25

这个网站存档快照)的“XSS 理论”下,它说:

黑客用他的恶意客户端脚本感染了一个合法的网页

阅读本文时我的第一个问题是:如果应用程序部署在安全的服务器上(例如银行的情况),黑客如何能够访问网页的源代码?或者他/她可以在不访问源代码的情况下注入恶意脚本吗?

4

3 回答 3

66

使用跨站点脚本,可以感染生成的 HTML文档,而不会导致Web 服务器本身被感染。XSS 攻击使用服务器作为载体将恶意内容呈现给客户端,或者从请求立即返回(反射攻击),或者通过存储和检索延迟(存储攻击)。

XSS 攻击利用了服务器生成页面的弱点,该弱点允许请求数据以原始形式显示在响应中。该页面仅反映在请求中提交的内容......但该请求的内容可能包含突破普通文本内容的字符并引入开发人员不打算的 HTML 或 JavaScript 内容。

这是一个简单的例子。假设您使用某种模板语言来生成 HTML 页面(如 PHP、ASP、CGI 或 Velocity 或 Freemarker 脚本)。它采用以下页面并将“<?=$name?>”替换为“name”查询参数的未转义值。

<html>
<head><title>Example</title></head>
<body>Hi, <?=$name?></body>
</html>

有人使用以下 URL 调用该页面:

http://example.com/unsafepage?name=Rumplestiltskin

应该期望看到此消息:

Hi, Rumplestiltskin

使用更恶意的内容调用同一页面可用于大幅改变页面或用户体验。

http://example.com/unsafepage?name=Rumplestiltskin<script>alert('Boo!')</script>

这个 URL 不仅会说“嗨,Rumplestiltskin”,还会导致页面弹出一条警告消息,上面写着“嘘!”。当然,这是一个简单的例子。可以提供一个复杂的脚本来捕获击键或要求验证名称和密码,或者清除屏幕并用令人震惊的内容完全重写页面。它看起来仍然像来自 example.com,因为页面本身确实如此,但内容是在请求中的某处提供的,并且只是作为页面的一部分反射回来。

所以,如果页面只是吐出请求者提供的内容,而您正在请求该页面,那么黑客如何感染您的请求?通常,这是通过在网页上或通过电子邮件发送给您或在 URL 缩短的请求中提供链接来完成的,因此很难看到 URL 中的混乱。

<a href="http://example.com?name=<script>alert('Malicious content')</script>">
Click Me!
</a>

具有可利用 XSS 漏洞的服务器本身不会运行任何恶意代码——它的编程保持不变——但它可以被用来向客户端提供恶意内容。

于 2013-04-11T03:33:01.333 回答
5

该攻击者不需要访问源代码。

一个简单的示例是写入页面的 URL 参数。您可以更改 URL 参数以包含脚本标记。

另一个例子是评论系统。如果网站没有正确清理输入/输出,攻击者可以将脚本添加到评论中,然后将在查看评论的任何人的计算机上显示和执行。

这些都是简单的例子。它还有很多不同类型的 XSS 攻击。

于 2013-04-11T02:30:09.370 回答
4

最好将脚本视为被注入到错误编码的网页和客户端的 Web 浏览器之间的对话中间。它实际上并没有注入到网页的代码中;而是进入到客户端 Web 浏览器的数据流中。

XSS 攻击有两种类型:

  1. 非持久性:这将是一个特制的 URL,它将脚本作为参数之一嵌入到目标页面。讨厌的 URL 可以通过电子邮件发送出去,目的是诱使收件人点击它。目标页面错误地处理了参数,并且无意中将最初通过 URL 字符串传入的代码发送到了客户端机器。
  2. 持久性:此攻击使用网站上的一个页面,该页面将表单数据保存到数据库中,而没有正确处理输入数据。恶意用户可以将讨厌的脚本作为典型数据字段(如姓氏)的一部分嵌入在客户端的 Web 浏览器上运行,而在不知不觉中。通常,讨厌的脚本会被存储到数据库中,并在每个客户访问受感染页面时重新运行。

有关简单示例,请参见以下内容:什么是跨站点脚本 (XSS)?

于 2016-11-08T19:32:36.947 回答