转义用户发送的数据?
这是我真正不明白的事情之一。我知道转义任何用户发送的数据非常重要。有很多方法可以做到这一点:stripslashes()
(删除反斜杠)、strip_tags
(删除 HTML 和 PHP 标签)、htmlSpecialChars
(例如,将 & 更改为 &
)、正则表达式 (preg_match()
) 以不允许处理“坏”数据。
何时使用、如何使用、为什么使用?
This is one of things that I really don't get. I know that it's super-important to escape any user sent data. There are lot of methods how to do that: stripslashes()
(removes backslashes), strip_tags
(removes HTML and PHP tags), htmlSpecialChars
(for example, change & to &
), regex's (preg_match()
) to do not allow process "bad" data.
When to use, how to use, why to use?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(4)
顺便说一句:在 PHP 中过滤用户输入数据的最佳实践是使用 filter_input< /代码>
。
示例:
$userId = filter_input(INPUT_GET, 'user_id', FILTER_SANITIZE_NUMBER_INT);
$username = filter_input(INPUT_GET, 'username', FILTER_SANITIZE_SPECIAL_CHARS);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
更多过滤器常量此处。
如果您的数据要进入数据库,则必须防止用户发送超出正常查询的数据以破坏或修改该查询。使用带有参数绑定的 MySQLi 是当前保护数据库的最佳方法。只要您还使用字符串或 preg 替换即可。这样就确保整数 ID 是 int。您希望从数据中删除逻辑上尽可能多的字符。
如果您的数据要放置在标签之间,则 strip_tags 后跟 htmlentities 是一个很好的做法。但是,如果您可以使用白名单,那就这样做。如果您知道输出只能是 int,请确保它是 int。 echo htmlentities(strip_tags($value));
如果您将该数据放入标签内 以上还不够。您还必须替换单引号。在这里,更重要的是防止有毒数据进入。如果 $value 类似于
' onClick='alert("oops");'
您可能会陷入严重的困境。在这里,您绝对应该使用白名单,并且仅在绝对必要时才允许用户输入的内容出现在此处。
如果你想输出到 JavaScript 中。不。即使您已经从事安全工作多年,也不应该这样做。然而。对于非常具体的值可以有一个例外。整数。锁定为 A-Za-z0-9 和空格的字符串用 preg 替换。然而。这是非常危险的,可能会严重损害您的系统。
如果您想将变量放入 eval 或 exec 中。只是不要。你不够聪明,无法阻止攻击。我也不是,没有人是。有人找到方法只是时间问题。如果最初编写的代码没问题?稍后,代码将发生更改,并且不再适用。只是不要这样做。时期。或者有一天,你会坐在监狱里,心里想:“但我并没有侵入五角大楼……”
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果您获取
$_POST['album_name']
的内容,并将其直接放在您的页面上,那么有人可以提交 HTML 和 JavaScript,它们随后将成为页面的一部分,现在您的网站已被黑客入侵。或者,您可以获取
$_POST['album_name']
的内容并将其放入 SQL 查询中。但是用户已经编写了他们自己的 SQL 查询,您现在已经运行了该查询,并且现在您的数据库已被黑客攻击。http://xkcd.com/327/
If you take the contents of, say,
$_POST['album_name']
, and out put it directly on your page, then someone could submit HTML and JavaScript, which would then become a part of the page, and now your site is hacked.Or, you could take the contents of
$_POST['album_name']
and put it into an SQL query. But the user has written their own SQL query, which you have now run, and now your database is hacked.http://xkcd.com/327/