bal*_*log 18 .net sql asp.net security sql-injection
我需要避免在我的ASP.NET应用程序中容易受到SQL注入攻击.我怎么能做到这一点?
Tom*_*lak 24
即使您的问题非常通用,但仍然适用一些规则:
SqlCommandwith SqlParameter)并将用户输入放入参数中.Vin*_*vic 17
使用预准备语句(链接到使用"为产品添加节点"部分中的预准备语句的ASP.NET教程).这里的所有都是它的.
那么,或者使用ORM,比如Linq to SQL或NHibernate,它们在内部使用预处理语句.
Run*_*tad 14
使用参数!它真的很简单:-)
像这样创建你的查询(对于带有C#的MS Sql server):
SqlCommand getPersons = new SqlCommand("SELECT * FROM Table WHERE Name = @Name", conn);
Run Code Online (Sandbox Code Playgroud)
这里@Name是你想要避免sql注入的参数,conn是一个SqlConnection对象.然后要添加参数值,请执行以下操作:
getPersons.Parameters.AddWithValue("@Name", theName);
Run Code Online (Sandbox Code Playgroud)
这里的theName是一个包含您要搜索的名称的变量.
现在应该不可能对该查询进行任何sql注入.
由于这很简单,没有理由不使用参数.
发生SQL注入是因为正在实时构造对数据库的查询,例如:
SELECT * From Table1 WHERE " + UserInput
Run Code Online (Sandbox Code Playgroud)
UserInput 可能是恶意的,并且包含您不想要的其他陈述。
为了避免这种情况,您需要避免将查询串联在一起。
您可以通过使用参数化查询来完成此操作-签出DBCommand特定DB风格的对象。