看一例简单的PHP+SQL代码的漏洞,谈谈感想。 Unknown 2009/02/24

| |

$sql='UPDATE pw_user SET `onlineip`=$onlineip WHERE `uid`=$winduid';

再看$onlineip是怎么来的:

if($_SERVER['HTTP_CLIENT_IP'])
$onlineip=$_SERVER['HTTP_CLIENT_IP'];
else if($_SERVER['HTTP_X_FORWARDED_FOR'])
$onlineip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
$onlineip=$_SERVER['REMOTE_ADDR'];

$onlineip =substrs($onlineip,16);

十六个字节,够提升权限的了吧?抓包提交HTTP_X_FORWARDED_FOR。


这类文章用于说明PHP的漏洞、PHP安全性不如ASP或JSP,那就说明你就是个人云亦云的外行!
这只能说明在处理SQL语句时一定要检查SQL语句中变量的真实情况罢了。

再次请编程人员记住:客户端返回的数据都是不可信的,一定要再三校验,尤其是处理SQL(尤其是update或set等更新数据库的语句)!

但是,连这样普通的一个判断用户真实IP的代码,都有可能被伪造,说明了其实潜在的危险还是蛮大的。

所以在SQL执行插入前,一定要用合适的方法先进行校验,而且SQL中变量两端加上引号!本例中如果变量加上引号,应该问题也会好一点。不过加上引号,恶意用户也能在$onlineip中加入引号以提前结束SQL的。这里显示应该用正则来检验/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/

请给这篇日志评个分吧~!

本文评分: 6.2/10 (20 votes)    提示:您还未对本文评分,您可以进行评分并发表您的意见!

加入收藏!

Tags: , , , , , , ,
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [注册]