跨站脚本17 Mar 2025 | 6 分钟阅读 跨站脚本(Cross-site scripting,简称 XSS)攻击是指黑客在用户的浏览器中执行恶意 JavaScript 代码。在这种攻击中,代码会在受害者的浏览器中运行。初始注入时,攻击者并不能完全控制网站。相反,恶意代码是攻击者附加在合法网站之上。每当网站加载时,恶意软件就会执行,这会导致浏览器被欺骗。 XSS 中的 JavaScript JavaScript 是一种在 Web 服务器内部运行的编程语言。通过客户端代码可以为网页添加交互性和功能性。它被广泛应用于 CMS 平台或所有主要应用程序中。如果 JavaScript 代码存在于我们的浏览器中,它不会像服务器端语言(如 PHP)那样影响网站访问者。JavaScript 由于是客户端的,所以不能在服务器上运行。通过后台请求,它可以与服务器进行交互。攻击者可以利用这些后台请求,在不刷新网页的情况下向网页添加恶意内容。这些请求可以异步执行操作,或者收集关于客户端浏览器的数据。 跨站脚本攻击的工作原理当攻击者利用网站软件中的漏洞时,他们才能将自己的代码注入到受害者网站的网页中。成功利用漏洞后,攻击者可以注入他们的脚本,这些脚本将通过受害者的浏览器执行。 当受害者的浏览器成功运行 JavaScript 时,可以从会话中访问有关目标用户的敏感信息。会话允许攻击者攻击网站管理员,从而完全攻陷网站。 当网站上大部分公开页面存在漏洞时,跨站脚本攻击将非常有用。在这种情况下,可以通过添加恶意内容、钓鱼提示、广告等来注入恶意代码,以攻击网站的访问者。 跨站脚本攻击的类型根据我们的目标,有多种使用跨站脚本攻击的方法。最常见的跨站脚本攻击类型如下: 存储型跨站脚本攻击 当攻击者在被入侵的服务器上存储一个有效载荷时,在这种情况下,就会发生存储型跨站脚本攻击。因此,恶意代码会通过网站传递给其他访问者。在这种攻击中,攻击者只需要进行初始操作,而这会导致许多访问者受到攻击。存储型跨站攻击是最危险的跨站脚本攻击。这种攻击的一个例子包括我们的个人资料字段,例如我们的电子邮件 ID、用户名,这些信息由服务器存储并在我们的帐户页面上显示。 反射型跨站脚本攻击 当数据从浏览器发送到服务器,并且有效载荷存储在该数据中时,在这种情况下,就会发生反射型跨站脚本攻击。这种攻击的一个例子包括联系表单或网站的搜索数据,这些数据被发送到目标并包含恶意脚本。搜索表单是另一种类型的反射型跨站攻击,其中访问者将搜索查询发送到服务器,并且结果仅对访问者可见。攻击者发送受害者的自定义链接,这些链接将访问者导向易受攻击的页面。 自反射型跨站脚本攻击 当攻击者利用需要手动更改和极具体境的漏洞时,在这种情况下,就会发生自反射型跨站脚本攻击。具体更改包括将我们的信息设置为有效载荷或 cookie 值之类的内容。 盲注型跨站脚本攻击 当攻击者看不到攻击结果时,在这种情况下,就会发生盲注型跨站脚本攻击。在盲注型跨站脚本攻击中,漏洞存在于只能由授权用户访问的页面上。如果攻击者想要成功发起攻击,这需要更多的准备。如果有效载荷失败,攻击者将不会收到任何通知。黑客还可以使用多态脚本(polyglots)来提高这类攻击的成功率。多态脚本可以在不同的场景下工作,例如脚本标签、纯文本和属性。 DOM 型跨站脚本攻击 当页面上的 JavaScript 容易受到跨站脚本 (XSS) 攻击,而不是服务器本身受到攻击时,在这种情况下,就会发生 DOM 型跨站脚本攻击。JavaScript 可以为页面添加交互性。它还可以向 URL 添加参数,用于在页面加载后修改页面。当用户的输入未被净化时,恶意代码可以在修改 DOM 的过程中添加到页面中。当 URL 提供语言并且网站切换到这些语言而不是默认语言时,这表明了一个 DOM 型跨站脚本的例子。 跨站脚本攻击的防范攻击者可以利用各种方法来利用网站漏洞。如果我们想降低跨站脚本的风险,没有单一的策略。不安全的で用户输入会帮助跨站脚本攻击,因为它会直接渲染到网站的网页上。如果用户输入得到妥善净化,这种攻击将是不可能的。我们可以通过多种方式确保用户输入不会在我们的网站上被逃逸。使用以下保护措施,我们可以加强我们的 Web 应用程序并保护我们的网站。 白名单值 我们可以将用户输入限制在特定的白名单内。这种做法允许我们将安全且已知的值发送到服务器。如果我们知道接收到的数据,例如下拉菜单的内容,那么受限制的用户输入才有效。 限制输入中的 HTML HTML 仅限于受信任的用户。如果我们想允许对输入进行格式化和样式设置,我们可以使用 Markdown 而不是 HTML 来生成内容。如果我们想使用 HTML,我们应该使用像 DOMPurify 这样强大的净化器对其进行净化,它用于删除所有不安全的代码。 净化值 如果我们使用由用户生成的内容在页面上,我们应该确保它不会通过使用实体而不是不安全的字符来生成 HTML 内容。常规字符和实体外观相同,但实体无法生成 HTML。 对 Cookie 使用 HTTPOnly 标志 会话 cookie 用于允许网站在请求之间识别用户。攻击者经常会窃取用户的 cookie 并盗取管理员会话。一旦攻击者窃取了用户的 cookie,他们就可以在没有授权访问或凭据的情况下登录到管理员帐户。HttpOnly cookie 用于阻止 JavaScript 读取 cookie 的内容,并增加攻击者窃取会话的难度。使用此方法,我们可以防止我们的 cookie 被攻击者读取。攻击者仍然可以作为管理员用户,并使用活动的浏览器会话发送请求。如果攻击者将 cookie 作为主要的识别机制,在这种情况下,此方法才有用。 使用 WAF 我们可以使用防火墙来虚拟修补针对我们网站的攻击。此方法用于在我们的网站收到恶意请求之前拦截 SQLi、RCE、XSS 等请求。DDoS 等大规模攻击也可以由它保护。 下一主题防范密码破解 |
我们请求您订阅我们的新闻通讯以获取最新更新。