📜  如何使用 HTML/ PHP防止 XSS?

📅  最后修改于: 2021-11-07 08:52:06             🧑  作者: Mango

跨站点脚本XSS是一种安全漏洞,攻击者可以访问网站并在客户端执行潜在的恶意脚本。这是一种代码注入攻击,可能是由于用户数据验证不正确而引起的,这些数据通常通过 Web 表单或使用已被篡改的超链接插入到页面中。可以通过任何客户端编码语言(例如 JavaScript、HTML、 PHP、VBScript)插入此代码。

它们为什么会发生?
跨站点脚本或 XSS 攻击的发生主要是由于服务器端开发人员未交付安全代码。因此,每个程序员都有责任提供安全代码,使攻击者难以利用可能的安全漏洞。

跨站脚本攻击

攻击者可以使用 XSS 完成什么?
攻击者可以利用 XSS 漏洞来实现一系列潜在的恶意目标,例如:

  • 窃取“会话标识符”——通过窃取一个人的会话 ID,攻击者可以冒充我们并访问应用程序。这可能导致未经授权的人访问潜在数据。
  • URL 重定向 – URL 重定向是将用户重定向到另一个恶意网络钓鱼页面以收集敏感信息的行为。
  • 运行不需要的软件——攻击者还可以在我们的计算机和其他设备上安装恶意软件。此恶意软件可能会对驻留在设备上的数据造成损害。

在 HTML 和PHP防止 XSS
以下是我们可以在 Web 应用程序中防止 XSS 的方法 –

  • 使用 htmlspecialchars()函数– htmlspecialchars()函数将特殊字符转换为 HTML 实体。对于大多数 Web 应用程序,我们可以使用此方法,这是防止 XSS 的最流行方法之一。此过程也称为 HTML 转义。
    • ‘&’(与号)变成了 ‘&’
    • ‘”’(双引号)变成了 ‘”‘
    • ”(大于)变成 ‘>’
  • htmlentities() – htmlentities() 也执行与 htmlspecialchars() 相同的任务,但此函数涵盖更多字符实体。使用此函数也可能导致过度编码,并可能导致某些内容显示不正确。
  • strip_tags() –此函数删除 HTML 标签之间的内容。此函数也不过滤或编码非成对的右尖括号。
  • addlashes()—— addslashes()函数添加了一个斜杠字符,以防止攻击者终止变量赋值并在末尾添加可执行代码。
  • 内容安全策略 (CSP) – CSP 是我们选择防御 XSS 攻击的最后一个选项。 CSP 的使用限制了攻击者的行为。我们的浏览器执行它从服务器接收的所有 JavsScript,无论它们是内部来源还是外部来源。当涉及到 HTML 文档时,浏览器无法确定资源是否是恶意的。 CSP 是一个 HTTP 标头,它将一组受信任的资源源列入白名单,浏览器可以使用这些源来确定对传入资源的信任。
    X-Content-Security-Policy: script-src 'self'

    上面一行暗示浏览器只信任引用当前域的源 URL。浏览器将仅从该源获取资源的所有输入,而其他所有输入都将被忽略。
    我们可以添加许多资源指令。其中一些在下面给出——

    • connect-src:限制您可以使用 XMLHttpRequest、WebSocket 等连接的源。
    • font-src:限制网页字体的来源。 frame-src:限制可以作为框架嵌入页面的源 URL。
    • img-src:限制图片来源。 media-src:限制视频和音频的来源。
    • object-src:限制 Flash 和其他插件的来源。 script-src:限制脚本文件的来源。
    • style-src:限制 CSS 文件的来源。
  • 第三方PHP库——还有一些第三方PHP库有助于防止 XSS。其中一些列在下面——
    1. 已编辑
    2. PHP反 XSS
    3. HTML 净化器

    其中,HTMLPurifier 经常被维护和更新。一旦开发人员获得了 HTML 脚本知识的基本水平,它就非常易于使用。

结论:作为指导原则,我们应该尽量不要插入用户控制的数据,除非应用程序函数明确需要它。注释可能是最好的例子,用户可以输入导致恶意 XSS 的脚本。这通常被视为对应用程序没有任何功能用途,但也引入了一些严重的安全漏洞。