目前我根本不允许撇号(连同其他字符,如您所见),对每个字段重申:
foreach(char c in Comments)
{
if(c=='\'' || c=='$' || c=='\"' || c=='&' || c=='%' || c=='@' || c=='-' || c=='<' || c=='>')
{
errorMessage = "You have entered at least one invalid character in the \"Comments\" field. Invalid characters are: [\'], [\"], [&], [$], [@], [-], [<], [>], and [%]";
}
}
我编写这个代码已经有一段时间了,而且我越来越好,但真正的问题是,虽然我确信有一种方法可以有效地“去除”或以其他方式验证用户输入,但我不确定哪种方法是最好的,并且在安全危机迫在眉睫之前可能不会。
如果必须的话,我会决定根本不允许在表单中使用单引号(就像现在这样),但是这可能会激怒任何名为 say...Bill O'Reilly 的名称字段等。等
可能还有其他的(我不知道怎么调用它们,“插件”?“外部程序?”)可以为我完成这项工作,但这实际上是无用的,因为我不仅有不知道如何集成它,我不知道如何专门针对我的 Web 界面/数据库对其进行定制。
是否有任何代码可以帮助我从普通的撇号中检测到 sql 注入(inject)撇号(可能是通过它周围的字符?)?请记住,我的某些字段最多可容纳 500 个字符(文本区域),而一个字段最多可容纳 1,000 个字符。
感谢任何想法或帮助!
请您参考如下方法:
没有多少输入编码/清理会像参数化查询一样安全。
参见 SqlCommand.Parameters有关参数化查询的详细信息。
string commandText = "SELECT * FROM Sales WHERE CustomerID = @ID;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
var reader = command.ExecuteReader();
//.....
}
