什么是跨站脚本?
跨站脚本(Cross-site scripting,简称XSS),是一种迫使Web站点回显可执行代码的攻击技术,而这些可执行代码由攻击者提供、最终为用户浏览器加载。不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到三方,即攻击者、客户端与网站。XSS的攻击目标是为了盗取客户端的cookie或者其他网站用于识别客户端身份的敏感信息。获取到合法用户的信息后,攻击者甚至可以假冒最终用户与网站进行交互。
XSS漏洞成因:是由于动态网页的Web应用对用户提交请求参数未做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是“>”、“<”),然后未加编码地输出到第三方用户的浏览器,这些攻击者恶意提交代码会被受害用户的浏览器解释执行。
XSS存在哪些威胁?
攻击者可以利用XSS漏洞、借助存在漏洞的Web网站攻击其他浏览相关网页的用户,窃取用户浏览会话中诸如用户名和口令(可能包含在cookie里)的敏感信息、通过插入恶意代码对用户执行挂马攻击。XSS漏洞还可能被攻击者用于网页篡改,只是多数情况为了经济利益最大化,攻击者不会直接进行篡改。
XSS分为:存储型 、反射型 、DOM型XSS
存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie
反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。
DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
可能触发的DOM型XSS的属性
1.document.referer
2.Window.name
3.Location
4.innerHTML
5.Document.write
例如:我们在URL中传入参数的值,然后客户端页面通过js脚本利用DOM的方法获得URL中参数的值,再通过DOM方法赋值给选择列表,该过程没有经过后端,完全是在前端完成的。所以,我们就可以在我们输入的参数上做手脚了。
XSS漏洞的挖掘
尽可能找到一切用户可控并且能够输出在页面代码中的地方,比如:
1.URL的每一个参数
2.URL本身
3.表单
4.搜索框
常见的场景
1.重灾区:评论区、留言区、个人信息、订单信息等
2.针对性:站内信、网页即时通讯、私信、意见反馈等
3.存在风险:搜索框。当前目录、图片属性等
XSS攻击的过程:
反射性XSS漏洞
1.A经常浏览某个网站,此网站为B所拥有。B的站点需要A使用用户名/密码进行登录,并存储了A敏感信息(比如银行帐户信息)。
2.C发现 B的站点存在反射性的XSS漏洞
3.C利用B网站的反射型XSS漏洞编写了一个exp,做成链接的形式,并利用各种手段诱使A点击
4.A在登录到B的站点后,浏览了 C 提供的恶意链接
嵌入到恶意链接中的恶意脚本在A的浏览器中执行。此脚本盗窃敏感信息(cookie、帐号信息等信息)。然后在A完全不知情的情况下将这些信息发送给 C。
5.C利用获取到的cookie就可以以A的身份登录B的站点,如果脚本的功更强大的话,C 还可以对A的浏览器做控制并进一步利用漏洞控制
存储型XSS漏洞
1.B拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
2.C检测到B的站点存在存储型的XSS漏洞。
3.C在B的网站上发布一个带有恶意脚本的热点信息,该热点信息存储在了B的服务器的数据库中,然后吸引其它用户来阅读该热点信息。
4.B或者是任何的其他人 如A浏览该信息之后,C的恶意脚本就会执行。
- C的恶意脚本执行后,C就可以对浏览器该页面的用户发动一起XSS攻击
从网站开发者角度,如何让防护XSS攻击?
1.验证所有输入的数据,有效检测攻击;
① 输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。
2.对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。
① 强壮的输出编码:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码而不仅局限于某个子集。
② 明确指定输出的编码方式(如ISO 8859-1或 UTF 8):不要允许攻击者为你的用户选择编码方式。
从网站用户角度,如何让防护XSS攻击?
当你打开一封Email或附件、浏览论坛帖子时,可能恶意脚本会自动执行,因此,在做这些操作时一定要特别谨慎。建议在浏览器设置中关闭JavaScript。如果使用IE浏览器,将安全级别设置到“高。