在“{XSS理论”下的this site(archived snapshot)上,它说:
黑客用他的恶意客户端脚本感染合法网页
我的第一个问题是:如果应用程序部署在安全的服务器上(例如银行的情况),黑客如何才能访问网页的源代码?或者他可以在不访问源代码的情况下注入恶意脚本吗?
答案 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攻击:
有关简单示例,请参阅以下内容:What Is Cross-Site Scripting (XSS)?
答案 3 :(得分:0)
XSS是最危险的攻击之一,它试图通过使用应用程序中的漏洞来获取对用户浏览器的访问权限。
有关更多信息:What is Cross-site scripting(XSS) and how to prevent it?