什么是跨站脚本

时间:2013-04-02 02:57:55

标签: security xss

在“{XSS理论”下的this sitearchived snapshot)上,它说:

  

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

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

4 个答案:

答案 0 :(得分:47)

使用跨站点脚本,可以感染生成的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>

有人使用以下网址调用该页面:

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

应该期待看到这条消息:

Hi, Rumplestiltskin

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

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

这个网址不会只是说“嗨,Rumplestiltskin”,而是会让页面弹出一条警告信息,上面写着“嘘!”。当然,这是一个简单的例子。可以提供复杂的脚本来捕获击键或要求验证名称和密码,或者清除屏幕并完全重写具有震动内容的页面。它仍然看起来像是来自example.com,因为页面本身确实如此,但是CONTENT正在请求中的某个地方提供,并且只是作为页面的一部分反映出来。

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

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

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

答案 1 :(得分:3)

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

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

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

这些是简单的例子。还有更多内容和许多不同类型的XSS攻击。

答案 2 :(得分:2)

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

有两种类型的XSS攻击:

  1. 非持久性:这是一个特制的URL,它将脚本作为参数之一嵌入到目标页面中。令人讨厌的URL可以在电子邮件中发送,目的是诱使收件人点击它。目标页面错误地处理了参数,并无意中将代码发送到最初通过URL字符串传递的客户端计算机。
  2. 持久性:此攻击使用站点上的页面将表单数据保存到数据库,而无需正确处理输入数据。恶意用户可以在一个典型的数据字段(如姓氏)中嵌入一个讨厌的脚本,该字段在不知不觉中在客户端的Web浏览器上运行。通常,讨厌的脚本将存储到数据库中,并在每个客户端访问受感染页面时重新运行。
  3. 有关简单示例,请参阅以下内容:What Is Cross-Site Scripting (XSS)?

答案 3 :(得分:0)

XSS是最危险的攻击之一,它试图通过使用应用程序中的漏洞来获取对用户浏览器的访问权限。

有关更多信息:What is Cross-site scripting(XSS) and how to prevent it?