如何修复 php XSS 问题

How to fix php XSS issues

我已经使用 AppScan Source 工具(来自 HCL Software)扫描了我的 PHP 代码,发现几乎有 350 个各种模式的 XSS 类型问题。

想知道 PHP 中修复它们的好方法是什么?其中大部分是由于我们回显或动态添加的html。

在扫描中具有 XSS 的示例行如下所示

echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">'

XSS代表Cross-Site脚本这些是攻击。一种注入,其中将恶意脚本注入到其他良性和受信任的网站中。当攻击者使用 Web 应用程序向不同的最终用户发送恶意代码(通常以浏览器端脚本的形式)时,就会发生 XSS 攻击。

我们想防止这种情况发生。由于您使用的是 PHP,因此使用 http://htmlpurifier.org/ 无法解决此问题。您将不得不使用另一种方法。您可以尝试以下选项:

  • 在 echo 语句中加密您的值。
  • 您的应用程序代码不应在未检查恶意代码的情况下将接收到的作为输入的数据直接输出到浏览器。

这些是防止 XSS 攻击发生的简单步骤:

  1. 训练并保持意识。
  • 为了确保您的 Web 应用程序安全,参与构建 Web 应用程序的每个人都必须了解与 XSS 漏洞相关的风险。您应该为所有开发人员、QA 人员、DevOps 和系统管理员提供适当的安全培训。您可以先让他们参考此页面。
  1. 不要相信任何用户输入。
  • 将所有用户输入视为不受信任。用作 HTML 输出的一部分的任何用户输入都会引入 XSS 风险。以与处理 public 输入相同的方式处理来自经过身份验证的 and/or 内部用户的输入。
  1. 使用escaping/encoding.
  • 根据用户输入的使用位置使用适当的 escaping/encoding 技术:HTML 转义,JavaScript 转义,CSS 转义,URL转义等。使用现有的库进行转义,除非绝对必要,否则不要自己编写。
  1. 消毒 HTML。
  • 如果用户输入需要包含 HTML,则不能 escape/encode,因为它会破坏有效标签。在这种情况下,请使用受信任和经过验证的库来解析和清理 HTML。根据您的开发语言选择库,例如,HtmlSanitizer for .NET 或 SanitizeHelper for Ruby on Rails.
  1. 设置 HttpOnly 标志。
  • 要减轻可能的 XSS 漏洞的后果,请为 cookie 设置 HttpOnly 标志。如果您这样做,将无法通过 client-side JavaScript.
  • 访问此类 cookie
  1. 使用内容安全策略。
  • 为了减轻可能的 XSS 漏洞的后果,还可以使用内容安全策略 (CSP)。 CSP 是一种 HTTP 响应 header,它允许您根据请求源声明允许加载的动态资源。
  1. 定期扫描(使用 Acunetix)。
  • XSS 漏洞可能由您的开发人员或通过外部引入 libraries/modules/software。您应该使用 Acunetix 等 Web 漏洞扫描器定期扫描您的 Web 应用程序。如果你使用 Jenkins,你应该安装 Acunetix 插件来自动扫描每个构建。

我将在 PHP 中包含两个简短的编码示例: 您可以尝试我之前向您建议的 htmlspecialchars。 我将举一个例子,你给出的代码行是关于你的问题的。

echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">'

将更改为:

echo htmlspecialchars('<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">', ENT_QUOTES, 'UTF-8');

您也可以使用 html 编码器并将其放在 echo 中,例如:

echo "&lt;OpenSearchDescription xmlns=&quot;http://a9.com/-/spec/opensearch/1.1/&quot; xmlns:moz=&quot;http://www.mozilla.org/2006/browser/search/&quot;&gt;"

这些都给出了输出: <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">.

这里是关于 XSS 做什么的简短解释。 在 Cross-site 脚本攻击 (XSS) 中,攻击者使用您易受攻击的网页向您的网站发送恶意 JavaScript用户。用户的浏览器在用户的计算机上执行此恶意 JavaScript。 请注意,大约三分之一的网站易受 Cross-site 脚本攻击。

Google 代码大学也有这些关于网络安全的非常有教育意义的视频:

编辑:本网站可能也能帮助您。 http://htmlpurifier.org/ <- 这将重写您的代码。正如 IRIS 在评论中所说:“我只想说我们在 IRIS 中使用 HTML Purifier 来过滤电子邮件以抵御 XSS 攻击,我们对此印象深刻。”。看看它,它可能会帮助你。