Voi*_*ing 1 c# sql sql-injection webmatrix razor
目前我根本不允许使用撇号(以及你可以看到的其他角色),对每个字段重复:
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 [%]";
}
}
Run Code Online (Sandbox Code Playgroud)
我已经编写了一段时间,我正在变得更好,但真正的问题是,虽然我确信有一种方法可以有效地"剥离"或以其他方式验证用户输入,但我不确定方法是最好的,可能直到安全危机迫在眉睫.
如果必须的话,我会决定永远不会允许单引号进入表格(就像现在一样),但是这可能会加剧任何名字的人... Bill O'Reilly的名字字段等等.
可能还有其他(我不知道该怎么称呼它们,'插件?''在程序之外?')可以为我做这个工作,但这实际上是无用的,因为我不仅不知道如何为了整合它,我不知道如何专门定制它到我的Web界面/数据库.
是否有任何代码可以帮助我从正常的撇号中检测sql注入撇号(通过它周围的字符?)?请记住,我的一些字段最多可容纳500个字符(textareas),最多可容纳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();
//.....
}
Run Code Online (Sandbox Code Playgroud)