【问题标题】:XSS - is it only possible by using JavaScript?XSS - 只有使用 JavaScript 才有可能吗?
【发布时间】:2013-05-17 13:16:58
【问题描述】:

我知道有很多关于 SO 上的跨站点脚本的问题,并尝试阅读投票最多的问题。在阅读了一些网页之后,我仍然不确定这种攻击类型可以使用的所有可能性。我问的不是如何清理输入,而是可以期待什么。

在 SO 和其他页面上给出的大多数示例中,有两种方法,其中最简单的(例如 this one on PHPMaster)接缝插入一些用于窃取 cookie 等的 <script> 代码。

另一个提出的here by user Baba 是插入完整的<form> 代码结构,但它似乎在用户提交表单之前不应该工作,但是可能会使用一些JavaScript 事件,如... onmouseover='form.submit()'...

我能够检查的所有网络示例都只是基于使用一些 JavaScript 代码的方法。

是否可以使用其他方法,比如——以某种方式——改变 HTML,甚至是服务器端脚本?

我知道可以通过 SQL 注入或只是在服务器上进行黑客攻击来获得此信息,但我的意思是只能通过操纵(错误处理的)GET、POST 请求或其他一些请求?

【问题讨论】:

  • 如果除非用户提交表单,否则它不起作用怎么办?如果您使表单看起来像页面的一部分,那很有可能。
  • @Quentin 是的,我想告诉你,<script>...code...</script> 可以自动运行,无需任何用户反应。
  • @jantimon 谢谢,非常有趣,似乎是我想知道的。请您将其发布为答案,以便我接受吗?我很佩服this one

标签: javascript security xss


【解决方案1】:

跨站点脚本不仅仅是将 JavaScript 代码插入网页。它是浏览器在易受攻击的网页上下文中解释的任何代码注入的通用术语,请参阅CWE-79

在页面生成期间,应用程序不会阻止数据包含可由 Web 浏览器执行的内容,例如 JavaScript、HTML 标记、HTML 属性、鼠标事件、Flash、ActiveX 等。

例如,攻击者可以将自己的登录表单注入现有登录页面,从而将凭据重定向到他的站点。这也称为 XSS。

但是,注入 JavaScript 通常更容易且更有希望,因为它可以同时控制文档和受害者浏览器。使用 JavaScript,攻击者可以读取 cookie,从而窃取受害者的会话 cookie 来劫持受害者的​​会话。在某些情况下,攻击者甚至可以在受害者的机器上执行任意命令。

XSS 的攻击向量多种多样,但它们都有一个共同点,即由于某些输入处理不当,它们都有可能发生。这可以是通过 GET 或 POST 提供的参数,也可以是 HTTP 请求中包含的任何其他信息,例如cookie 或任何其他 HTTP 标头字段。有些使用单个注入点,有些则分成多个注入点;有些是直接的,有些是间接的;有些是自动触发的,有些需要某些事件;等等

【讨论】:

    【解决方案2】:

    我知道可以通过 SQL 注入或只是在服务器上进行黑客攻击来获得此信息,但我的意思是只能通过操纵(错误处理的)GET、POST 请求或其他一些请求?

    GET 参数和 POST 正文是通过 HTTP 请求攻击 Web 应用程序的主要载体,但还有其他的。如果您对文件上传不小心,那么我也许可以上传Trojan。如果您天真地将上传的文件托管在与您的网站相同的域中,那么我可以上传 JS 或 HTML 并使用same-origin privileges 运行它。请求标头也是攻击者可能操纵的输入,但我不知道滥用它们的成功攻击。

    Code-injection是一类攻击,包括XSS、SQL注入、Shell注入等。

    只要将攻击者控制的 GET 或 POST 参数转换为代码或编程语言符号,您就有代码注入漏洞的风险。

    如果 GET 或 POST 参数天真地将 interpolated 插入 SQL 字符串,那么您将面临 SQL 注入的风险。

    如果将 GET 或 POST 参数(或文件上传中的文件名之类的标头)传递给 shell,那么您将面临 shell injectionfile inclusion 的风险。

    如果您的应用程序使用与您的服务器端语言等效的 eval 和一个不受信任的参数,那么您将面临服务器端脚本注入的风险。

    您需要怀疑您的所有输入,将它们视为纯文本字符串,并在用另一种语言编写字符串时,通过escaping 将纯文本字符串转换为该目标语言的子字符串。过滤可以在这里提供深度防御。


    XSS - 只有使用 JavaScript 才有可能吗?

    没有。可以在 IE 中注入 VBScript。 Javascript 可以通过 URL 和 CSS 间接注入。注入的图像可能会泄露隐藏在引荐来源网址中的秘密。注入的元标记或 iframe 可以重定向到您网站的网络钓鱼版本。

    易受HTTP response header splitting 攻击的系统可能会被注入响应标头(如重定向 URL 或 Set-Cookie 指令)的 HTML 和脚本破坏。

    HTML 嵌入了如此多的语言,因此您需要非常小心地包含来自不受信任来源的 HTML 的 sn-ps。如果您必须在您的网站中包含外部 HTML,请使用 white-listing sanitizer

    【讨论】:

    • 感谢您的详细解释!
    【解决方案3】:

    XSS 是关于 javascript 的。

    但是,要注入您的恶意 javascript 代码,您必须使用可能位于服务器或客户端的页面代码漏洞。

    您可以使用CSP (content security policy) 在现代浏览器中防止 XSS。

    XSS Cheat Sheet 中还有一个 XSS 技巧列表。然而,这些技巧中的大多数不适用于现代浏览器。

    如果它也是请求的一部分,Webkit 将不会执行 javascript。 例如demo.php?x=<script>alert("xss")</script> 不会显示警告框,即使脚本标签被注入到 dom 中。相反,会引发以下错误: “拒绝执行 JavaScript 脚本。在请求中找到脚本的源代码。”

    【讨论】:

    • 阅读完 Mike Samuel 的回答后,我决定接受他的回答“更完整”,但我发现您的回答也非常有用(我的 +1,谢谢)
    • 不正确。 XSS 不仅仅是关于 javascript。秋葵的答案是对的。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多