来源:未知 时间:2015-04-13 12:16 作者:xxadmin 阅读:次
[导读] SQL注入是可以通过一些sql语法上的处理不当导致数据库或网站权限给你拿到了,今天小编整理了一些常用的php mysql中的SQL注入防范方法吧. 使用php5.3或以上的版本我们可以直接使用PDO与...
SQL注入是可以通过一些sql语法上的处理不当导致数据库或网站权限给你拿到了,今天小编整理了一些常用的php mysql中的SQL注入防范方法吧. 使用php5.3或以上的版本我们可以直接使用PDO与mysqli处理数据 1.使用PDO(PHP Data Objects),代码如下:
2.使用mysqli,代码如下:
3.如果是php5.3以下版本我们可以使用ADDSLASHES和MYSQL_REAL_ESCAPE_STRING这些函数来处理,代码如下:
国内很多PHP coder仍在依靠addslashes防止SQL注入(包括我在内),我还是建议大家加强中文防止SQL注入的检查,addslashes的问题在于可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截. 当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧. 最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[‘lastname’]进行检查一下. 再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别: mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用,否则只能用 mysql_escape_string,两者的区别是: mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑. 如果是字符型就用addslashes()过滤一下,然后再过滤”%”和”_”,代码如下:
当然也可以加php通用防注入代码:
保存为checkpostandget.php 然后在每个php文件前加include(“checkpostandget.php“);即可 总结一下: addslashes() 是强行加. mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求. mysql_escape_string不考虑连接的当前字符集. |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com