我爱Aspx >> Asp.Net >> 预防SQL注入攻击(译自MSDN)Michael Otey
所有的关系型数据库——包括SQL SERVER,ORACLE,IBM DB2和MYSQL都容易受到SQL注射攻击。你可以购买一些产品来保护你的系统免受SQL注射攻击,但在大多数商务中,预防SQL注射必须是基于代码级的。SQL注射攻击主要来自WEB应用程序将用户的包含动态SQL代码的输入转换成了SQL 命令给数据库执行。你可以采用下面的四个重要的步骤来保护你的WEB应用程序免受攻击。除此之外,上个月我在强调的MSDN中模式与训练也提出了一些保护数据库驱动的WEB应用程序的建议。
1.使用双引号
使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程序上预防SQL注射攻击,单引号常常结束掉SQL语句,可能给于输入者不必要的权力。用双引号替换掉单引号可以使许多SQL注射攻击失败。
2.避免动态的SQL语句
动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注射成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入做为参数而不是SQL命令来接收,这样就限制了入侵者的行动。当然,它不适用于你的存储过程中是利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,你的数据库仍然有受SQL注射攻击的危险。
3.验证所有的输入
如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符。确保你的应用程序要检查以下字符:分号,等号,破折号,括号以及SQL关键字。.NET FRAMEWORK提供了正则表达式来进行复杂的模式匹配,运用它可以达到良好的效果。另外限制用户输入的字符的长度也是一个好主意。验证用户输入是必须的,因为入侵者可以利用WEB的开放性对应用程序进行SQL注射攻击。
4.最小权力法则
应用程序使用的去连接数据库的帐户应该只拥有必须的特权,这样有助于保护整个系统尽可能少的受到入侵者的危害。应用程序不应该用SA或者管理员帐户去连接数据库。作为替代,它应该只有访问它要调用的单个库的权力。
Ҷƪл˵?
常用SQL书写技巧[04-21]
从应用程序观SQL Server和Oracle..[03-18]
Sqlite数据库在Media NAS系统的应..[03-18]
数据库系统优化,高性能sql语句[03-18]
在SQL Server中用XQuery分解XML数..[03-18]
Microsoft SQL Server 2005 Serv..[03-18]
在C#中建立复杂的、灵活的SQL查询..[03-17]
在C#中建立复杂的、灵活的SQL查询..[03-16]
两种取得硬盘剩余空间方法[04-21]
用XenoCode 2006 加密dll (.NET混..[04-21]
用JSON技术加快AJAX程序开发[04-21]
用C#绘柱形图(owc编程)[04-21]
JS的IE和Firefox兼容性汇编[04-21]
编写高性能Web 应用程序的 10 个..[04-21]
ASP输出Word、Excel文件[04-21]
UTF-8与GB2312互转方法[04-21]
.net打包自动安装数据库[04-21]
解读C#中的规则表达式(正则表达..[04-21]