当前位置:  开发笔记 > 后端 > 正文

如何在ASP.NET应用程序中避免SQL注入攻击?

如何解决《如何在ASP.NET应用程序中避免SQL注入攻击?》经验,为你挑选了5个好方法。

我需要避免在我的ASP.NET应用程序中容易受到SQL注入攻击.我怎么能做到这一点?



1> Tomalak..:

即使您的问题非常通用,但仍然适用一些规则:

使用参数化查询(SqlCommandwith SqlParameter)并将用户输入放入参数中.

不要使用未经检查的用户输入构建SQL字符串.

不要假设您可以构建一个可以检查用户输入是否存在各种畸形的清理程序.边缘情况很容易被遗忘.检查数字输入可能很简单,可以让您安全,但对于字符串输入,只需使用参数.

检查二级漏洞 - 如果这些值由用户输入组成,则不要使用SQL表值构建SQL查询字符串.

使用存储过程封装数据库操作.


不会.但是,提出这类问题的人很可能对这些问题没有深入了解.使它们明确是支持理解.随着你的抽象经验和能力的提升,你不需要明确,你也不可能再提出这样的问题了.

2> Vinko Vrsalo..:

使用预准备语句(链接到使用"为产品添加节点"部分中的预准备语句的ASP.NET教程).这里的所有都是它的.

那么,或者使用ORM,比如Linq to SQL或NHibernate,它们在内部使用预处理语句.



3> Rune Grimsta..:

使用参数!它真的很简单:-)

像这样创建你的查询(对于带有C#的MS Sql server):

SqlCommand getPersons = new SqlCommand("SELECT * FROM Table WHERE Name = @Name", conn); 

这里@Name是你想要避免sql注入的参数,conn是一个SqlConnection对象.然后要添加参数值,请执行以下操作:

getPersons.Parameters.AddWithValue("@Name", theName);

这里的theName是一个包含您要搜索的名称的变量.

现在应该不可能对该查询进行任何sql注入.

由于这很简单,没有理由不使用参数.



4> kevchadders..:

永远不要信任用户输入 - 使用验证控件,正则表达式,代码等验证所有文本框条目

永远不要使用动态SQL - 使用参数化SQL或存储过程

切勿使用管理员级帐户连接到数据库 - 使用受限访问帐户连接到数据库

不要以明文形式存储机密 - 加密或散列密码和其他敏感数据; 你还应该加密连接字符串

例外情况应该泄露最少的信息 - 不要在错误信息中泄露太多信息; 使用customErrors在出现未处理错误时显示最少的信息; 将debug设置为false

MSDN上的有用链接停止SQL注入



5> Brian Schmit..:

发生SQL注入是因为正在实时构造对数据库的查询,例如:

SELECT * From Table1 WHERE " + UserInput

UserInput 可能是恶意的,并且包含您不想要的其他陈述。

为了避免这种情况,您需要避免将查询串联在一起。

您可以通过使用参数化查询来完成此操作-签出DBCommand特定DB风格的对象。

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有