常见的web攻击和防范方法(XSS跨站脚本攻击)

一、XSS跨站脚本攻击

xss全称是 Cross site Scripting 跨站脚本,为了和css区分,故叫它xss。

XSS攻击是指浏览器中执行恶意脚本(无论是跨域还是同域),从而拿到用户的信息进行操作。

这些操作一般可以完成下面这些事情

  1. 窃取 Cookie
  2. 监听用户行为,比如输入账号密码后直接发送到黑客服务器
  3. 修改DOM伪造登录表单
  4. 在页面中生成浮窗广告

通常情况下,XSS攻击的实现有三种方式:存储型、反射型和文档型。原理比较简单。

存储型

将恶意脚本存储了起来,存储型的XSS将脚本存储到了服务端的数据库,然后在客户端执行这些脚本,从而达到攻击的效果。

常见的场景是留言评论区提交一段代码,如果前后端没有做好转义的工作,那评论内容存到了数据库,在页面渲染过程中直接执行,相当于执行一段位置逻辑的js代码,是非常恐怖的。

反射型

恶意脚本作为网络请求的一部分。比如我在浏览器上输入

http://baidu.com?q=<script>alert(你完蛋了")</script
复制代码

这样在服务端会拿到q参数,然后将内容返回给浏览器端,浏览器将这些内容作为HTML的一部分解析,发现是一个脚本,就直接执行了,于是这样被攻击了。

之所以叫它反射型,是因为恶意脚本是通过作为网络请求的参数,经过服务器,然后在反射到HTML文档中,执行解析。和存储型不一样的是:服务器并不会存储这些恶意脚本。

文档型

文档型的XsS攻击并不会经过服务端,而是作为中间人的角色,在数据传输过程劫持到网络数据包,然后修改里面的HTML文档。

这样的劫持方式包括wifi路由劫持,或者本地恶意软件等。

XSS的防范措施

明白三种xss攻击的原理,发现一个共同点:都是让恶意脚本直接能在浏览器中执行,那么要防范它,就是要避免这些脚本代码的执行。

为了完成这一点,必须做到一个信念,两个利用。
一个信念:不要相信任何用户的输入!

无论是在前端和服务端,都要对用户的输入进行转码或过滤

< script> alert(你完了!)</ script> 
复制代码

转码后变为

&]t; script> alert('你完蛋了')</ script>
复制代码

这样的代码在html解析的过程中是无法执行的。当然也可以利用关键词过滤的方式,将script标签给删除。

利用CSP

CSP即浏览器中的内容安全策略,它的核心思想就是服务器决定浏览器加载哪些资源,具体来说可以完成以下功能:

  1. 限制其他域下的资源加载
  2. 禁止冋其他域提交数据
  3. 提供上报机制,能帮助我们及时发现XSS攻击

利用 Httponly

很多XSS攻击脚本都是用来窃取 Cookie,而设置 Cookie的 Httponly属性后,,JavaScript便无法读取Cookie的值,这样也很好的防范XSS攻击。

总结:

xss攻击是指浏览器中执行恶意脚本,然后拿到用户的信息进行操作。主要分为存储型、反射型和文档型。防范的措施包括:一个信念:不要相信用户的输入,对输入的内容转码或者过滤,让其不可执行。两个利用:利用CSP,利用Cookie的Httponly属性。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享