观自在书院

海纳百川有容则大 壁立千仞无欲则刚

博客园 首页 新随笔 联系 订阅 管理
预防SQL注射攻击
Michael Otey
所有的关系型数据库——包括SQL  SERVER,ORACLE,IBM DB2和MYSQL都容易受到SQL注射攻击。你可以购买一些产品来保护你的系统免受SQL注射攻击,但在大多数商务中,预防SQL注射必须是基于代码级的。SQL注射攻击主要来自WEB应用程序将用户的包含动态SQL代码的输入转换成了SQL 命令给数据库执行。你可以采用下面的四个重要的步骤来保护你的WEB应用程序免受攻击。除此之外,上个月我在强调的MSDN中模式与训练也提出了一些保护数据库驱动的WEB应用程序的建议。
4.最小权力法则
应用程序使用的去连接数据库的帐户应该只拥有必须的特权,这样有助于保护整个系统尽可能少的受到入侵者的危害。应用程序不应该用SA或者管理员帐户去连接数据库。作为替代,它应该只有访问它要调用的单个库的权力。
3.验证所有的输入
如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符。确保你的应用程序要检查以下字符:分号,等号,破折号,括号以及SQL关键字。.NET FRAMEWORK提供了正则表达式来进行复杂的模式匹配,运用它可以达到良好的效果。另外限制用户输入的字符的长度也是一个好主意。验证用户输入是必须的,因为入侵者可以利用WEB的开放性对应用程序进行SQL注射攻击。
2.避免动态的SQL语句
动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注射成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入做为参数而不是SQL命令来接收,这样就限制了入侵者的行动。当然,它不适用于你的存储过程中是利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,你的数据库仍然有受SQL注射攻击的危险。
1.使用双引号
使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程序上预防SQL注射攻击,单引号常常结束掉SQL语句,可能给于输入者不必要的权力。用双引号替换掉单引号可以使许多SQL注射攻击失败。
第一次翻译文章,不好的地方大家不要见怪:)
posted on 2004-05-23 11:56  观自在书院  阅读(2391)  评论(4编辑  收藏  举报