首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止URL盲sql注入攻击

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

Stack Overflow用户
提问于 2011-11-01 09:21:50
回答 4查看 5.8K关注 0票数 0

我有一个网站,这是在线的,我正在使用acunetix检查我的网站的网页漏洞。在使用acunetix进行扫描时,在url盲目sql注入中显示了高风险警报。(由于代码太长,我不会放在这里。)

例如:url显示漏洞

代码语言:javascript
复制
   www.site.com/phpfile.php?1d=1 

我正在使用mysql_real_escape_string函数;在此之后,它也显示高风险警报。我怎么防止它..。

如果有新的,你可以告诉我如何隐藏(不使用.htacess;在我的服务器.htacess不工作) ?id=1

例如:当用户单击查询时,它应该显示以下内容

代码语言:javascript
复制
   www.site.com/phpfile.php

而不是

代码语言:javascript
复制
   www.site.com/phpfile.php?1d=1 

请原谅我的英语,并提前感谢你的帮助

EN

回答 4

Stack Overflow用户

发布于 2011-11-01 09:30:13

您应该使用mysql_real_escape_string()对字符串进行转义,但是当期望的输入是整数时,这是没有帮助的(如果用户输入在查询中没有用引号引起来,它实际上不会有任何区别)-您应该使用(int)intval()函数将其转换为整数。

此外,我强烈建议您使用预准备语句(例如PDO)或ORM层(例如Doctrine)。

票数 3
EN

Stack Overflow用户

发布于 2012-03-29 13:00:17

如果有新的,你能告诉我怎样才能隐藏?id=1吗

这是完全没有意义的。

隐藏不会增加安全性。

查看用户的个人资料应该使用GET方法,而不是POST方法。

我正在使用mysql_real_escape_string函数

此函数与注入无关。它的名字不是"mysql_prevent_injection",而是"mysql_real_escape_string“。因此,它仅用于格式化字符串。并且只能用于字符串。

如果您希望将数据视为字符串,则必须将其放在引号中。因此,mysql会知道它是一个字符串。

人们总是把这两件事放在一起使用--引号和转义。一个没有另一个,他们就是无用的。

如果您不想将数字视为字符串,请将其格式化为数字。

代码语言:javascript
复制
$id = intval($_GET['id']);

你必须根据字符串的类型来格式化字符串的每一部分,而不仅仅是随意使用一些函数。

票数 2
EN

Stack Overflow用户

发布于 2012-03-29 11:25:43

如果你知道你的id应该是一个数字,你可以使用:

代码语言:javascript
复制
if(is_numeric($_GET['id'])){
    $id = mysql_real_escape_string($_GET['id']);
}
else{
    ;///////display error
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7961571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档