PHP gbk 字符集防sql注入攻击
<?php
/*
主要的原因是因为0xbf27 在 gbk 编码情况下出现的bug ,其它编码gb2312 utf-8无影响。
简单的解决方法,使用gb2312编码,改动较小。
mysql_query("SET CHARACTER SET 'gb2312'");
多数项目都在使用addslashes()来自动转义“'”“"”“\”
addslashes()对单字节没有问题,对gbk编码存在bug
这个和Sql创建数据库表时没有任何关系。既使
CREATE TABLE `test` (
`id` int( 4 ) NOT NULL AUTO_INCREMENT ,
`content` varchar( 200 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM DEFAULT CHARSET = gbk
也不受此bug影响
*/
$c=addslashes($_GET['c']);
mysql_connect("localhost","root","123456");
mysql_select_db("test");
mysql_query("SET CHARACTER SET 'gbk'");
$content=$c;
$sql=" select count(*) num from `test` where `content`='$content'";
$rs = mysql_query($sql);
$row=mysql_fetch_array($rs);
if(isset($row['num'])){
echo "登陆OK ";
}
else
{
echo "登陆失败,用户ID不存在";
}
/*
bug测试地址 test.php?c=%bf%27 OR 1 = 1 /*
*/
?>
- 上一篇:PHP UTF-8编码下无法运行
- 下一篇:win2003 IIS6 添加PHP支持