Php 如何防止URL盲sql注入攻击

Php 如何防止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

我有一个网站是在线的,我正在使用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
而不是

   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发送的内容!这是唯一明智的答案。但编辑了措辞。