我有一个网站,这是在线的,我正在使用acunetix检查我的网站的网页漏洞。在使用acunetix进行扫描时,在url盲目sql注入中显示了高风险警报。(由于代码太长,我不会放在这里。)
例如:url显示漏洞
www.site.com/phpfile.php?1d=1 我正在使用mysql_real_escape_string函数;在此之后,它也显示高风险警报。我怎么防止它..。
如果有新的,你可以告诉我如何隐藏(不使用.htacess;在我的服务器.htacess不工作) ?id=1
例如:当用户单击查询时,它应该显示以下内容
www.site.com/phpfile.php而不是
www.site.com/phpfile.php?1d=1 请原谅我的英语,并提前感谢你的帮助
发布于 2011-11-01 09:30:13
您应该使用mysql_real_escape_string()对字符串进行转义,但是当期望的输入是整数时,这是没有帮助的(如果用户输入在查询中没有用引号引起来,它实际上不会有任何区别)-您应该使用(int)或intval()函数将其转换为整数。
此外,我强烈建议您使用预准备语句(例如PDO)或ORM层(例如Doctrine)。
发布于 2012-03-29 13:00:17
如果有新的,你能告诉我怎样才能隐藏?id=1吗
这是完全没有意义的。
隐藏不会增加安全性。
查看用户的个人资料应该使用GET方法,而不是POST方法。
我正在使用mysql_real_escape_string函数
此函数与注入无关。它的名字不是"mysql_prevent_injection",而是"mysql_real_escape_string“。因此,它仅用于格式化字符串。并且只能用于字符串。
如果您希望将数据视为字符串,则必须将其放在引号中。因此,mysql会知道它是一个字符串。
人们总是把这两件事放在一起使用--引号和转义。一个没有另一个,他们就是无用的。
如果您不想将数字视为字符串,请将其格式化为数字。
$id = intval($_GET['id']);你必须根据字符串的类型来格式化字符串的每一部分,而不仅仅是随意使用一些函数。
发布于 2012-03-29 11:25:43
如果你知道你的id应该是一个数字,你可以使用:
if(is_numeric($_GET['id'])){
$id = mysql_real_escape_string($_GET['id']);
}
else{
;///////display error
}https://stackoverflow.com/questions/7961571
复制相似问题