XSS攻击

学习XSS之前,我们很有必要知道XSS到底是什么东西。其英文名是(Cross Site Scripting),意思就是跨站脚本攻击,是黑客常用的攻击手段之一,因为与层叠样式表CSS(Cascading Style Sheets)同名,为了避免混淆,故将其命名为XSS。好了,现在知道了它的名字的由来之后,最重要的就是去了解XSS的实现原理。

XSS实现原理

因为浏览器本身的设计缺陷,浏览器只负责解释执行html+css+javascript代码,并不会检验其安全性。故如果你的服务器对没有对XSS漏洞准备安全的预防措施,都会存在XSS漏洞。下面具体讲一下XSS的攻击过程:

1.用户登陆web应用程序上的网页;.该网页已经被攻击者利用各种手段注入了javascript等脚本代码;
2.服务器对用户的浏览请求做出反应,用户获取攻击者注入过代码的URL;
3.攻击者的javascript代码在浏览者的浏览器上打开;此时可能会伴随用户浏览器向攻击者发送会话令牌,然后攻击者劫持用户会话等现象的发生。
在接触了几天XSS之后,大致有以下特点:
1.XSS即是web应用程序上的计算机安全漏洞,也是黑客常用的攻击手段;对于攻击者而言,需要有很好的计算机语言基础,如JavaScript,HTML5,Ajax,Css和其他脚本语言。
2.XSS产生的主要原因是web浏览器对用户的输入过滤不足。
3.通过将代码注入到网页,虽然对Web服务器没有直接伤害,但它借助网络传播,其危害最终会反馈到服务器。
4.XSS漏洞如此普遍主要是因为web浏览器本身的设计是不安全的,开发人员在交互过程中的设计阶段忽略了XSS防护,加上大部分人还没认识到XSS的危害和错误的认为XSS就只会在浏览器上弹出一个窗口而已,加上触发跨站脚本的方式简单且众多和web2.0的流行和社交功能的迅猛发展,奠定了XSS发展的基础。
5.XSS最重要也是最核心的是利用自己构造好的XSS语句,欺骗web应用程序上的过滤器,实现绕过其安全检测,达成向网页中注入javaScript等脚本信息的目的,从而导致XSS漏洞在互联网上传播。
6.要善于利用工具提高效率,要学会利用各种编码方式提高XSS的攻击性和隐蔽性。例如,unicode,escapes,URL编码,十六进制,八进制等,同时对于特定情境下也可以利用脚本加密技术实现XSS攻击。
7.有时候配合CSRF漏洞,将会由意想不到的效果

同时XSS攻击也有一下弊端

1.XSS攻击无对应软件完成自动化攻击,且有一定几率不成功;
2.是一种被动的攻击手段,对website有http-only,crossdomiar。
下面几个概念需要理解好
1.shellcode——起初是溢出程序和蠕虫程序的核心,注入目标网页中,使用脚本编写好的代码;
2.Exploit——完整编写好的漏洞利用工具;
3.POC(Proof of Concept)——一段证明漏洞存在的程序代码片段;
4.payload——意思为有效载荷,概念验证,即是漏洞验证脚本;是组成Poc和Exp的必要组成部分。

XSS的分类

一.持久型的XSS
攻击方把恶意脚本代码固化在页面中,当其他用户访问到此页面的时候,浏览器会解析并且执行该脚本代码,进而对其他用户进行XSS攻击。最典型的例子是留言板。

二.非持久性(反射型)的XSS
攻击方通过改写网页访问的URL,使其指向攻击方已经准备好的脚本代码。典型的例子是,搜索栏中输入脚本代码。欺骗用户自己去点击链接才能触发XSS代码。

三.DOM型的XSS
攻击方利用javascript来展开攻击,用户请求一个由攻击方提供的经过专门设计的URL,包括嵌入式的javascript,服务器响应用户请求的时候不对URL进行处理,当用户浏览这个相应的时候,脚本得以触发。

如何防止XSS跨站脚本攻击:

原则:不相信用户输入的数据

将重要的cookie标记为http only,这样的话Javascript 中的document.cookie语句就不能获取到cookie了
只允许用户输入我们期望的数据。例如:年龄的textbox中,只允许用户输入数字,而数字之外的字符都过滤掉

对数据进行Html Encode 处理。< 转化为 &lt;、> 转化为 &gt;、& 转化为 &amp;
、' 转化为 &#039;、" 转化为 &quot;、空格 转化为 &nbsp;
过滤或移除特殊的Html标签。例如:<script>、<iframe>、&lt;
 for <、&gt; for >、&quot for
过滤JavaScript 事件的标签。
例如 “onclick=”、”onfocus” 等等 

很多浏览器都加入了安全机制来过滤XSS

另外:
如何防止SQL注入:

永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双”-“进行转换等。
永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取
永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接
不要把机密信息直接存放,加密或者hash掉密码和敏感的信息
应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值