Php 如何防止URL盲sql注入攻击
我有一个网站是在线的,我正在使用acunetix检查我网站中的网络漏洞。在使用acunetix进行扫描时,它在url盲sql注入中显示了一个高风险警报。(由于代码很长,所以我不放代码) 例如:显示vuln的urlPhp 如何防止URL盲sql注入攻击,php,sql-injection,Php,Sql Injection,我有一个网站是在线的,我正在使用acunetix检查我网站中的网络漏洞。在使用acunetix进行扫描时,它在url盲sql注入中显示了一个高风险警报。(由于代码很长,所以我不放代码) 例如:显示vuln的url www.site.com/phpfile.php?1d=1 我正在使用mysql\u real\u escape\u字符串函数;在此之后,它也显示出高风险警报。我如何预防它 如果有新的,请告诉我如何隐藏(不使用.htacess;在我的服务器中,.htacess不工作)id=1
www.site.com/phpfile.php?1d=1
我正在使用mysql\u real\u escape\u字符串函数;在此之后,它也显示出高风险警报。我如何预防它
如果有新的,请告诉我如何隐藏(不使用.htacess;在我的服务器中,.htacess不工作)id=1
例如:当用户单击查询时,它应该显示以下内容
www.site.com/phpfile.php
而不是
www.site.com/phpfile.php?1d=1
请原谅我的英语,并提前感谢您的帮助您应该使用
mysql\u real\u escape\u string()
对字符串进行转义,但是当预期的输入是整数时,它永远不会有帮助(如果查询中没有引用用户输入,它实际上不会有任何区别)-您应该使用(int)将其转换为整数
或intval()
函数
另外,我强烈建议您使用准备好的语句(例如)或ORM层(例如)。如果您知道您的id应该是一个数字,您可以使用
POST
请求而不是GET
轻松隐藏?id=1
:
if(is_numeric($_GET['id'])){
$id = mysql_real_escape_string($_GET['id']);
}
else{
;///////display error
}
如果有新的,你能告诉我如何隐藏?id=1吗
这绝对没有意义。隐藏不会增加安全性。
查看用户的个人资料应该使用GET方法,而不是POST方法 我正在使用mysql\u real\u escape\u字符串函数 此功能与注入无关。它被称为“mysql\u防止\u注入”,而不是“mysql\u真实\u逃逸\u字符串”。因此,它仅用于格式化字符串。并且只能用于字符串。
如果要将数据作为字符串处理,则必须将其置于引号中。因此,mysql会知道这是一个字符串。
人们总是把这两件事放在一起使用——引号和转义。没有一个,它们是无用的 如果不想将数字视为字符串,请将其格式化为数字
$id = intval($_GET['id']);
您必须根据字符串的类型对其每个部分进行格式化,而不仅仅是随机使用一些函数。什么?mysql\u real\u escape\u string在这里是做什么的?
mysql\u real\u escape\u string
在这里完全没有用处。它实际上什么都不做,因为你已经做了你应该做的,并且测试了一个数值。不要使用你接受的答案!它不能保护您免受实际攻击!恶意用户可以轻松修改通过POST发送的内容!这是唯一明智的答案。但编辑了措辞。