首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >防御mysql注入和跨站点脚本攻击的最佳方法

防御mysql注入和跨站点脚本攻击的最佳方法
EN

Stack Overflow用户
提问于 2009-02-20 10:11:36
回答 2查看 15.1K关注 0票数 15

目前,我采用了一种“把所有东西都扔到墙上,看看什么能坚持下去”的方法来阻止上述问题。下面是我拼凑出来的函数:

代码语言:javascript
复制
function madSafety($string)
{

$string = mysql_real_escape_string($string);
$string = stripslashes($string);
$string = strip_tags($string);
return $string;

}

然而,我相信有一种更好的方法可以做到这一点。我使用的是FILTER_ SANITIZE_STRING,但这看起来并不完全安全。

我想我是在问,你们采用了哪些方法,它们有多成功?谢谢

EN

回答 2

Stack Overflow用户

发布于 2009-02-20 10:21:01

防止SQL注入的最好方法是绑定变量,而不是将它们“注入”到字符串中。http://www.php.net/manual/en/mysqli-stmt.bind-param.php

票数 10
EN

Stack Overflow用户

发布于 2013-11-01 21:01:06

这个话题太不对劲了!

你不应该过滤用户的输入!这是他输入的信息。如果我想要我的密码,你会怎么做:'"'>s3cr3t<script>alert()</script>

过滤字符并给我一个更改过的密码,这样我就连第一次登录都不能成功?这很糟糕。

正确的解决方案是使用准备好的语句或mysql_real_escape_string()来避免sql注入,并使用上下文感知的字符转义来避免您的html代码混乱。

让我提醒您,web只是表示用户输入的信息的方式之一。如果一些桌面软件这样做,你会接受这样的剥离吗?我希望你的答案是否定的,你会理解为什么这不是正确的方式。

注意,在不同的上下文中,必须对不同的字符进行转义。例如,如果您需要将用户的名字显示为工具提示,则可以使用以下命令:

代码语言:javascript
复制
<span title="{$user->firstName}">{$user->firstName}</span>

但是,如果用户将他的名字设置为'"><script>window.document.location.href="http://google.com"</script>,你会怎么做?去掉引号?这就大错特错了!与其这样做毫无意义,不如考虑在呈现数据时转义引号,而不是持久化数据!

您应该考虑的另一个上下文是在呈现值本身时。考虑之前使用的html代码,并设想用户的名字类似于<textarea>。这将把后面的所有html代码包装到这个textarea元素中,从而拆分整个页面。

再说一次-考虑转义数据,这取决于您使用它的上下文!

另外,我真的不确定如何应对那些反对票。各位,你们真的在读我的回复吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/568995

复制
相关文章

相似问题

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