【发布时间】: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 编码在这里不正常(除非您存储并行的原始/编码版本,这样您就不必编码来显示)