引发 SQL 注入攻击的主要原因,是因为以下两点原因:
1。 php 配置文件 php。ini 中的 magic_quotes_gpc选项没有打开,被置为 off
2。 开发者没有对数据类型进行检查和转义
不过事实上,第二点最为重要。
我认为, 对用户输入的数据类型进行检查,向 MYSQL 提交正确的数据类型,这应该是一个 web 程序员最最基本的素质。但现实中,常常有许多小白式的 Web 开发者忘了这点, 从而导致后门大开。
如何防止 PHP SQL 注入攻击
如何防止 php sql 注入攻击?我认为最重要的一点,就是要对数据类型进行检查和转义。
总结的几点规则如下:
php。ini 中的 display_errors 选项,应该设为 display_errors = off。这样 php 脚本出错之后,不会在 web 页面输出错误,以免让攻击者分析出有作的信息。
调用 mysql_query 等 mysql 函数时,前面应该加上 @,即 @mysql_query(。
。。),这样 mysql 错误不会被输出。同理以免让攻击者分析出有用的信息。另外,有些程序员在做开发时,当 mysql_query出错时,习惯输出错误以及 sql 语句,例如: $t_strSQL = "SELECT a from b。。。。
"; if ( mysql_query($t_strSQL) ) { // 正确的处理 } else { echo "错误! SQL 语句:$t_strSQL \r\n错误信息"。mysql_query(); exit; }
这种做法是相当危险和愚蠢的。
如果一定要这么做,最好在网站的配置文件中,设一个全局变量或定义一个宏,设一下 debug 标志:
全局配置文件中: define("DEBUG_MODE",0); // 1: DEBUG MODE; 0: RELEASE MODE //调用脚本中: $t_strSQL = "SELECT a from b。
。。。"; if ( mysql_query($t_strSQL) ) { // 正确的处理 } else { if (DEBUG_MODE) echo "错误! SQL 语句:$t_strSQL \r\n错误信息"。mysql_query(); exit; }
对提交的 sql 语句,进行转义和类型检查。
全部