“跨站点脚本编制”攻击是一种隐私违例,可让攻击者获取合法用户的凭证,并在与特定 Web 站点交互时假冒这位用户。
这个攻击立足于下列事实:Web 站点中所包含的脚本直接将用户在 HTML 页面中的输入(通常是参数值)返回,而不预先加以清理。 如果脚本在响应页面中返回由 JavaScript 代码组成的输入,浏览器便可以执行输入中的代码。 因此,有可能形成指向站点的若干链接,且其中一个参数是由恶意的 JavaScript 代码组成。 该代码将在站点上下文中(由用户浏览器)执行,这授权它通过用户浏览器访问用户所拥有的站点 Cookie 以及站点的其他窗口。
攻击依照下列方式继续进行:攻击者诱惑合法用户单击攻击者生成的链接。 用户单击该链接时,便会生成对于 Web 站点的请求,其中的参数值含有恶意的 JavaScript 代码。 如果 Web 站点将这个参数值嵌入在响应的 HTML 页面中(这正是站点问题的本质所在),恶意代码便会在用户浏览器中运行。
脚本可能执行的操作如下:
[1] 将用户的 cookie(针对合法站点)发送给攻击者。
[2] 将可通过 DOM(URL、表单字段等)访问的信息发送给攻击者。
结果是在易受攻击的站点上,受害用户的安全和隐私受到侵害。
部分注意事项如下:
[1] 虽然受攻击的 Web 站点涉入其中,但它没有直接受害。 它被用作攻击者发送的恶意脚本的“跳板”,用来以合法身份返回受害者的浏览器。 不过,由于受害者的隐私是在特定站点的上下文中受到侵害,并且由于站点有直接责任,因此,这将视为站点的安全缺陷。
[2] 如果受害的用户所访问的站点由攻击者来维护,攻击者便可以使用 Web 站点链接来提供恶意的链接。 如果攻击者知道用户的电子邮件地址,且用户的电子邮件客户端使用浏览器来呈现 HTML 消息,恶意的链接也可以由电子邮件来提供。
[3] 用户输入在表单字段值(即 URL 参数)中最常见,但也有已知的攻击将恶意的代码嵌入路径、查询,或 HTTP Referrer 头中,甚至是嵌入 Cookie 中。
[4] AppScan 会发送许多类型的“跨站点脚本编制”攻击,其中包括只作用于特定浏览器或浏览器版本的攻击。AppScan 的“在浏览器中显示”功能使用 Internet Explorer 来显示漏洞。对于不易侵害 Internet Explorer 而易侵害其他浏览器的变体来说,“在浏览器中显示”功能无法运作,且不会出现弹出窗口。
将输入发送给很容易受到跨站点脚本编制攻击的 Web 应用程序,有两种可能的方案:
A. 在响应页面中,返回发送给 CGI 脚本的参数值,嵌入在 HTML 中。
例如:[请求]
GET /cgi-bin/script.pl?name=JSmith HTTP/1.0
[响应]
HTTP/1.1 200 OK
Server: SomeServer
Date: Sun, 01 Jan 2002 00:31:19 GMT
Content-Type: text/html
Accept-Ranges: bytes
Content-Length: 27
Hello JSmith
B. 在 HTML 参数值上下文中,返回发送给 CGI 脚本的参数值。
例如:[请求]
GET /cgi-bin/script.pl?name=JSmith HTTP/1.0
[响应] HTTP/1.1 200 OK Server: SomeServer Date: Sun, 01 Jan 2002 00:31:19 GMT Content-Type: text/html Accept-Ranges: bytes Content-Length: 254
Please fill in your zip code: