我有一个在线的网站,我使用acunetix来检查我网站中的网络漏洞。在使用acunetix进行扫描时,它显示了url盲sql注入中的高风险警报。(由于长度较长,我没有使用代码)
例如:url显示vuln
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
原谅我的英语,并感谢你的帮助
答案 0 :(得分:3)
你应该使用mysql_real_escape_string()
来转义字符串,但是当预期的输入是一个整数时它永远不会有帮助(如果查询中没有引用用户输入,它就不会有任何区别) - 你应该将其转换为整数,使用(int)
或intval()
函数。
答案 1 :(得分:2)
如果有任何一个新的你能告诉我如何隐藏?id = 1
绝对没有意义 隐藏不会给安全带来任何影响 并且应该使用GET方法而不是POST来查看用户的配置文件。
我正在使用mysql_real_escape_string函数
此功能与注射无关。它不是“mysql_prevent_injection”,而是“mysql_real_escape_string”。因此,它仅用于格式化字符串。并且必须仅用于字符串。
如果要将数据视为字符串,则必须将其放在引号中。所以,mysql会知道它是一个字符串
人们总是将这两件事一起使用 - 引用和逃避。他们没有另一个没用。
如果您不想将您的号码视为字符串,请将其格式化为数字。
$id = intval($_GET['id']);
你必须根据它的类型格式化字符串的每个部分,而不是随意使用某些函数。
答案 2 :(得分:-2)
如果您知道您的ID应该是一个可以使用的号码:
if(is_numeric($_GET['id'])){
$id = mysql_real_escape_string($_GET['id']);
}
else{
;///////display error
}
答案 3 :(得分:-3)
您可以使用?id=1
请求而不是POST
GET