学习笔记之xss原理篇
什么是xss
创新互联建站是一家企业级云计算解决方案提供商,超15年IDC数据中心运营经验。主营GPU显卡服务器,站群服务器,托管服务器,海外高防服务器,机柜大带宽、租用·托管,动态拨号VPS,海外云手机,海外云服务器,海外服务器租用托管等。
XSS又叫CSS (Cross Site Script) ,跨站脚本***。它指的是恶意***者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的***,因为其被动且不好利用,所以许多人常呼略其危害性。
XSS有哪些类型?
反射型:简单的描述就是把用户输入的数据反射给浏览器,这个数据可能是Html代码或者js代码,反射后让浏览器去执行。
存储型:把用户输入的数据(比如恶意的js代码)存储在服务器端,具有很强的稳定性,危害时间长。
DOM Based XSS:这种不是按照存储在哪里来划分的,可以说是反射型,由于历史原因,归为一类,通过改变DOM结构形成的XSS称之为DOM Based。
实际上,我认为xss主要可以分为:持久型xss和非持久型xss。
持久型xss就是将对客户端***的脚本植入到服务器上,从而导致每个正常访问页面的用户都会遭到这段xss脚本的***。
非持久型xss是对一个页面的url中的某个参数做文章,把精心构造的恶意脚本包装到url参数中,再将这个url散布到网上, 骗取用户访问这个url,从而对其进行***。
XSS的危害
1、劫持Cookie
2、构建Get和Post请求操作用户的浏览器,使用JavaScript模拟浏览器发包
3、XSS钓鱼
4、获取用户系统,浏览器信息
5、识别用户安装的软件
6、劫持浏览器回话,从而执行任意操作。
7、强制弹出广告页面,刷流量
8、获取用户真实ip
等等。。。。。。。。。。。。
XSS的触发条件
了解XSS的触发条件就先得从HTML(超文本标记语言)开始,我们浏览的网页全部都是基于超文本标记语言创建的。
而XSS的原理也就是往HTML中注入脚本,HTML指定了脚本标记.在没有过滤字符的情况下,只需要保持完整无错的脚本标记即可触发XSS,假如我们在某个资料表单提交内容,表单提交内容就是某个标记属性所赋的值,我们可以构造如下值来闭和标记来构造完整无错的脚本标记,
"><"
"><"
结果形成了 <"">Hahaha
(假如做了一些过滤,还可以这样)
测试闭和表单赋值所在的标记,形成完整无错的脚本标记可触发XSS,但是没有脚本标记怎么触发XSS呢?呵呵,我们只好利用其他标记了,假如要在网页里显示一张图片,那么就要使用一个标记,示例如下:
img标记并不是真正地把图片给加入到Html文档把两者合二为一,而是通过src属性赋值。那么浏览器的任务就是解释这个img标记,访问src属性所赋的值中的URL地址并输出图片。问题来了!浏览器会不会检测src属性所赋的值呢?答案是否!那么我们就可以在这里大做文章了,接触过javascript的同志应该知道,javascript有一个URL伪协议,可以使用“javascript:”这种协议说明符加上任意的javascript代码,当浏览器装载这样的URL时,便会执行其中的代码.于是我们就得出了一个经典的XSS示例:
当然并不是所有标记的属性都能用,细心的你应该发现标记的属性在访问文件才触发的XSS,这里我就不再深入,因为离开标记的属性还有事件能帮助我们触发XSS.那什么是事件呢?只有达到某个条件才会引发事件,正巧img标记有一个可以利用的onerror()事件,当img标记内含有一个onerror()事件而正好图片没有正常输出便会触发这个事件,而事件中可以加入任意的脚本代码,其中的代码也会执行.现在我们又得到了另外一个经典的XSS示例:
过滤了alert来执行弹窗
综合这一部分,我们知道XSS的触发条件包括:完整无错的脚本标记,访问文件的标记属性和触发事件。
预防措施
1、输入检测
对用户的所有输入数据进行检测,比如过滤其中的“<”、“>”、“/”等可能导致脚本注入的特殊字符,或者过滤 "script"、"javascript" 等脚本关键字,或者对输入数据的长度进行限制等等。同时,我们也要考虑用户可能绕开ASCII码,使用十六进行编码如“<”(“<”)、“>”(“>”)等来输入脚本。因此,对用户输入的十六进制编码,我们也要进行相 应的过滤。只要开发人员能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能够有效地阻止XSS***。
2. 输出编码
通过前面对XSS***的分析,我们可以看到,之所以会产生XSS***,就是因为Web应用程序将用户的输入直接嵌入到某个页面当中,作为该页面的HTML代 码的一部分。因此,当Web应用程序将用户的输入数据输出到目标页面中时,只要用HtmlEncoder等工具先对这些数据进行编码,然后再输出到目标页面中。这样,如果用户输入一些HTML的脚本,也会被当成普通的文字,而不会成为目标页面HTML代码的一部分得到执行。
3. Cookie防盗
利用XSS***,***者可以很方便地窃取到合法用户的Cookie信息。因此,对于网站来说,不能在Cookie信息中存放太多敏感信息,也不能将 Cookie作为身份认证的唯一标识,等等。因此,对于Cookie,我们可以采取以下的措施。首先,我们要尽可能地避免在Cookie中泄露隐私,如用 户名、密码等;其次,我们可以将Cookie信息用MD5等Hash算法进行多次散列后存放;再次,为了防止重放***,我们也可以将Cookie和IP进行绑定,这样也可以阻止***者冒充正常用户的身份。
4. 严格限制URL访问
攻 击者使用XSS***,通常都要借助于自己指定的网站页面,比如用它来记录敏感信息等等。因此,在页面的脚本代码执行过程中,只要我们 严格限制其访问的URL,比如只允许脚本代码访问本网站的URL等方式,就可以避免脚本的执行链接到其它可能是***者指定的页面上。
5 网站程序端
防范XSS***的一种方法是在服务器端采取防范措施。在大部分的跨站漏洞里,就是因为程序的过滤不严格,导致了***者可以在网站中加入“<”、“>”等字符,从而导致XSS***的产生.所以我们在程序的编写中就要强制过滤关键字,过滤“<”、“>”,把用户的输入放入引号内,以达到数据与代码隔离、过滤双引号,防止用户跨越许可的标记,添加自定义标记、过滤TAB和空格,防止关键字被拆分、过滤script关键字、过滤&#,防止HTML属性绕过检查.下面是一些实例
5.1 过滤“<”、“>”实例
***语句:<script>alert(/XSS/)</script>
防范方法:replace(str,“<”,“&#x3C;”)&#ascii
replace(str,“>”,“&#x3E;”)
注:script为服务器端语句,不进行ascii解释,用户输入的语句中含有“<”,“>”,都用&#x代替.所以过滤“<”、“>”基本可以防范跨站.&#(unicode编码的十进制数)是unicode的HTML表示方式
5.2 HTML属性过滤
上面的代码可以过滤掉“<”和“>”标记,让***者无法构造HTML标记.但是,有经验的***者就有可能会利用已存在的脚本属性来进行针对性***,假如***者利用插入图片功能,把图片的路径属性修改为一段script代码,也是可以达到跨站的目的的.
下面我们来用实例来演示如何防范运用插图片方式进行***的手法:
***语句:<imgsrc=“javascript:alert(/XSS/)”width=100>
很多的HTML标记里属性都支持“javascript:跨站代码”的形式,因此就需要对***者输入的数据进行如下转换
防范方法:replace(str,“javascript:”,“”)
replace(str,“jscript:”,“”)
replace(str,“vbscript:”,“”)
从而达到的效果是:用户输入的语句中含有“javascript”,“jscript”,“vbscript”,都用空白代替.从而让***者利用插入图片功能修改路径属性进行跨站***的企图失败
5.3 过滤特殊字符
因为HTML属性的值,是用可支持“&#ASCii”的形式进行表示的,所以***语句代码可变型为:
***语句:<imgsrc=“javascript:alert(/XSS/)”width=100> 这样就可以突破过滤程序进行跨站***.
其防范代码为: replace(str,“&”,“&”) 这个代码中把“&”替换为了“&”,后面的语句就变得没有意义了.
5.4 其他的方式绕过
过滤例如下面这段代码:
***语句:<imgsrc=“javascript:alert(/XSS/)”width=100>
注意中间的空格,此空格分隔了关键字,也就是说,对Tab键进行了拆分.这样就需要考虑把Tab空格过滤.
5.5 HTML属性跨站的彻底防范
就算是程序员考虑到了大多数的***方法,并做出了相应的过滤.***者也是有可能利用程序的缺陷进行***的.例如下面这两条语句实例:
<imgsrc=“#”style=“XSS:expression(alert(/XSS/));”>
<imgsrc=“#”/**/onerror=alert(/XSS/)width=100>
***者仍然可以绕过过滤进行XSS***,所以也要考虑到这种情况的防范.
XSS为什么真正的***过程中个很少用呢?
1、耗时间
2、有一定几率不成功
3、没有相应的软件来完成自动化***
4、前期需要基本的html、js功底,后期需要扎实的html、js、actionscript2/3.0等语言的功底
5、是一种被动的***手法
6、对website有http-only、crossdomian.xml没有用
没事可以都收据一些xss***脚本没准就用上了呢
这一篇文章很不错适合新手看 https://zhuanlan.zhihu.com/p/26177815
当前标题:学习笔记之xss原理篇
当前网址:http://myzitong.com/article/pooopi.html