2013-04-02 59 views
10

在此链接:http://www.acunetix.com/websitesecurity/cross-site-scripting/根据The Theory of XSS,它说:the hacker infects a legitimate web page with his malicious client-side script。我在阅读这篇文章时遇到的第一个问题是:如果应用程序部署在安全的服务器上(例如银行的情况就是如此),那么黑客怎么能够访问网页的源代码呢?或者他能注入恶意脚本而不访问源jsp?什么是跨站点脚本

+0

的可能重复[?什么是跨站点脚本包容(XSSI)(http://stackoverflow.com/questions/8028511/what-is-跨站点脚本包含xssi) –

回答

34

该描述在其措辞方式上有点误导。服务器在有人请求时提供的页面不会改变。相反,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”,这个URL也会导致页面弹出警告消息,说:“嘘!”。当然,这是一个简单的例子。人们可以提供一个复杂的脚本,捕获按键或要求验证的名称和密码,或者清除屏幕并完全用震惊内容重写页面。它仍然看起来像它来自example.com,因为页面本身就是这样做的,但CONTENT正在请求的某处提供,并且只是作为页面的一部分反射回来。因此,如果页面只是吐出请求者提供的内容,并且您正在请求该页面,那么黑客如何感染您的请求?通常,这是通过在网页上提供链接或通过电子邮件发送给您的链接或URL缩短请求中的链接来实现的,因此很难看到URL中的乱七八糟。

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

服务器上没有任何东西被“感染”。当服务器的页面被重复发送时,XSS只是一个让事情看起来来自服务器的技巧。

+0

感谢您的一个很好的解释 – Victor

+0

我有一个错误的想法,公司内部网,当您尝试访问一个网站是在不同的域(在同一公司内)只有XSS出现问题。看起来XSS似乎可以一直发生。即使我尝试访问诸如http:// localhost:8080/someservlet – Victor

+0

之类的东西,您的新理解是正确的。不过,你正在描述一种有效的危险。 XSS最初只会影响您正在访问的页面,但是您注入的新内容可以将您重定向到任何地方 - 而且当该地点位于您已经身份验证的某个位置时,XSS特别危险。 – phatfingers

1

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

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

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

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

1

最好将脚本想象成被注入到糟糕编码的网页和客户端的网页浏览器之间的对话中。它实际上并没有注入到网页的代码中;而是进入客户端网络浏览器的数据流。

有两种类型的XSS攻击:

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

见一个简单的例子如下:What Is Cross-Site Scripting (XSS)?