XSS - 只能使用JavaScript吗?

时间:2013-05-17 13:16:58

标签: javascript security xss

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

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

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

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

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

我知道有人可以通过SQL注入或者只是在服务器上进行攻击来获取它,但我的意思是只能操纵(处理错误)GET,POST请求 - 或者其他一些?

3 个答案:

答案 0 :(得分:1)

XSS是关于javascript的。

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

您可以使用CSP (content security policy)来阻止现代浏览中的XSS。

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

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

答案 1 :(得分:1)

  

我知道有人可以通过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吗?

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

易受HTTP response header splitting攻击的系统可能被HTML&amp;脚本注入到响应头中,如重定向URL或Set-Cookie指令。

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

答案 2 :(得分:1)

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

  

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

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

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

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