sql字符串转义防注入

在使用未预编译的sql时,如果不进行转义,则容易出现sql注入

例如:

$sql = "select * from user where username='$username' and password='$password'";

此时,如果账户名是一个字符串:zhangsan’#

select * from user where username='zhangsan'#' and password='$password

由于在mysql中,#表示注释,则真实sql:

select * from user where username='zhangsan'

此时就跳过密码,登录到系统中了。如果zhangsan是管理员,若后台有数据库连接,执行、导出等功能,最终整个数据库都直接被盗取。

一个严重的问题,就是sql参数赋值时,可以使用 ‘ ,从而抵消了前面 的 ‘ ,于是传递的值可以造成sql侵入。

可以使用  get_magic_quotes_gpc() 检测一个字符串是否已经转义,如果未转义,则使用 addslashes() 函数进行转义。

php中的GET、POST、COOKIE自动转义:

PHP中,有一个魔术引号的概念,如何打开?答:在PHP.ini中,magic_quotes_gpc=On;重启apache即可

魔术引号被打开后,系统会自动对$_GET,$_POST,$_COOKIE数据进行转义,在不知情的情况下,再次进行手动转义的话,就转多了,要想合理的进行转义,就要首先判断,魔术符号是否已经打开了,用magic_quotes_gpc()进行判断,不需要传值,关闭返回0,关闭返回1

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注