【问题标题】:How can i get the system type of a value i get from a form/string?如何获取从表单/字符串中获取的值的系统类型?
【发布时间】:2011-10-21 14:25:39
【问题描述】:

我从来没有尝试过这样的事情,所以我需要你的帮助。

我有以下代码:

    public int AddChannel(NameValueCollection FormValues)
    {
        string Keys = string.Join(",",FormValues.AllKeys);
        string Values = string.Join(",", FormValues.AllKeys.Select(key => String.Format("\"{0}\"", HttpContext.Current.Server.HtmlEncode(FormValues[key]))));

        return InsertQuery("INSERT INTO channels (" + Keys + ") VALUES (" + Values + ");");
    }

在处理时,某些字段应该是整数,否则 mysql 查询会失败。 如何检查 KeyValue 并将其转换为正确的类型?

【问题讨论】:

  • 我很好奇 - 为什么 html 对这些值进行编码? xss 预防通常应用于出站(而不是入站) - 而且您肯定会面临更大的 SQL 注入风险(我不使用 mysql,但它不允许参数吗?)
  • 实际上我尝试 SQL 注入一个简单的 ' 只是为了看看它是否失败。它似乎不会影响查询,结果已经编码完毕。
  • 由于您使用" 作为您的字符串分隔符,我会期望 ' 工作正常。现在试试"... 可以吗?
  • VALUES (""",""","","","","","","","","","","","","","");
  • meh - 它正在工作,但奇怪的原因是您使用 html 编码数据,这是不寻常的。我怀疑也会有办法解决这个问题.... html 编码在这里不正常(除非您存储并行的原始/编码版本,这样您就不必编码来显示)

标签: c# mysql gettype


【解决方案1】:

简而言之,没有。来自 http 帖子的数据是文本。您可以尝试推断123 可能是一个数字,但这并不安全,因为"123" 是一个完全有效的字符串。就个人而言,我希望代码提前知道架构,或者可以访问架构。并从架构中应用正确的转换(然后通过适当类型的参数添加值)。

【讨论】:

  • 你能举个例子吗?
  • 关于架构和转换。
  • @Dementic 是预先知道channels 的架构吗?还是会改变?
  • 它不会改变。如果需要,我可以获得包含架构的 DataTable。
  • 如果它没有改变,那么你的代码知道类型 - 你不能打开各种键来适当地翻译吗?或者定义一个类并使用属性类型(按名称查找)...?
猜你喜欢
  • 2014-01-01
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 2011-02-11
  • 2011-01-25
  • 2023-03-13
  • 2010-10-17
相关资源
最近更新 更多