+ -
当前位置:首页 → 问答吧 → 第五题 (彻底避免)

第五题 (彻底避免)

时间:2008-10-08

来源:互联网

自己编写如下函数过滤(可以根据需要增加新转义,彻底避免二次漏洞问题)

/*
*   永久性过滤危险字符
*/
function str_slashes($str)
{
    $str = str_replace("'", "&#039", $str); //转译 '
    $str = str_replace("\\", "&#092", $str); //转译 \
    return $str;
}


作者: linvo   发布时间: 2008-10-08

论坛的加亮MS有问题,LZ用附件发上来看看吧

作者: 飞翔de希望   发布时间: 2008-10-08

已修正!

作者: linvo   发布时间: 2008-10-08

$str = str_replace("'","'",$str); //转译 '


把单引号替换为单引号?

a.jpg (17.35 KB)

下载次数:0

2008-10-8 16:39

作者: 飞翔de希望   发布时间: 2008-10-08

没注意,呵呵
谢谢,已修正

作者: linvo   发布时间: 2008-10-08

原帖由 linvo 于 2008-10-8 17:11 发表
没注意,呵呵
谢谢,已修正
这次MS也不对,Replace的参数,前两个写反了吧。。。
应该是


这样做不认为是一个好办法,因为这样最终在HTML里是正常的,但是,如果是在其它的C/S结构的程序调用这里的数据时,就不正常了。

作者: 飞翔de希望   发布时间: 2008-10-09

恩,是反了。。。改好了:P
那倒是,看软件程序的编码了。
我主要是想换一个思路,不想再写那些常见的解决办法:)

传统防注入方法无外乎
输入内容验证格式(限制非法字符)
使用转义函数进行过滤
限制数据库以及系统用户权限等等

作者: linvo   发布时间: 2008-10-09

应该在此之前加一个get_magic_quotes_gpc()的判断,如果系统开了自动转义,那你提交的内容应该先把自动转义去掉,不然会多一条线的。。

作者: 飞翔de希望   发布时间: 2008-10-09

恩,有道理~
可以加一句

$str = get_magic_quotes_gpc() == 1 ? stripslashes($str) : $str;

作者: linvo   发布时间: 2008-10-09

lsAD

作者: cnkiller   发布时间: 2009-06-05