我在DNN PortalSecurity.cs中找到了这段代码。这应该使输入字符串sql注入安全。我想知道这段代码是否可以清理用户输入以使其在非参数化查询中安全使用,即它是否可以阻止SQL注入?你在这看到任何问题吗?
private string FormatRemoveSQL(string strSQL)
{
const string BadStatementExpression = ";|--|create|drop|select|insert|delete|update|union|sp_|xp_|exec|/\\*.*\\*/|declare|waitfor|%|&";
return Regex.Replace(strSQL, BadStatementExpression, " ", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace("'", "''");
}
答案 0 :(得分:2)
所有这一切都是删除共同语言关键字。为了足够安全,它必须由供应商进行宗教维护,因此从行政角度来看,这是一场噩梦。
此外,我非常怀疑该列表包含所有可能存在危险的关键字。它也可能限制您输入某些字符串的能力(尽管可能需要)。然而,它可能会阻止偶然的黑客 - 想要。
我会称这是外行人使输入字符串安全的方式。