安全 XSS、CSRF

XSS(跨站脚本攻击)

        XSS(跨站脚本攻击)详解 - 墨鱼菜鸡 - 博客园 (cnblogs.com)

        Cross Site Scripting。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

        反射型XSS:

        非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。

        存储型XSS:

        持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。

        XSS蠕虫:是一种借助Ajax技术实现对Web应用程序中存在的XSS漏洞进行自动化利用传播的蠕虫病毒,它可以将一些用户数据信息发送给Web应用程序然后再将自身代码传递进入Web应用程序,等到被感染用户访问Web应用程序时,蠕虫自身将又开始进行数据发送感染。XSS蠕虫的感染速度是随Web应用程序的用户访问量几何数递增的,感染效果非常可怕。

        DOM型XSS:

        不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

CSRF(跨站请求伪造)

CSRF 攻击详解 - 程序员自由之路 - 博客园 (cnblogs.com)

        Cross-Site Request Forgery。CSRF通过伪装来自受信任用户的请求来攻击受信任的网站。利用web中用户身份验证的漏洞:简单的身份验证只能保证请求来自某用户的浏览器,不能保证请求本身是用户自愿发出。

        CSRF攻击攻击原理及过程如下:

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

        从上面的流程可以看出,想要达成CSRF攻击,必须达到两个基本条件:

  • 登录受信任站点A,并在本地生成Cookie。
  • 在不登出A的情况下,访问危险网站B。      

        检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞

        预防CSRF攻击:

        1. 验证HTTP Referer字段

         HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。简单易行。

         但使用验证Referer相当于把安全性检查都依赖于第三方(浏览器)来保证,并不安全。有些浏览器可篡改Referer值,或者有些用户设置浏览器发送请求时不提供Referer。

        2. 添加token并验证

        token就是服务端返回给客户端类似sessionid那样一长串的类值(长是为了防暴力猜解)。csrf依赖于浏览器该问链接时自动对应网站的cookie,而token不放cookie(一般form表单加个hidden属性的input标签来存放)csrf就没法获取token,这样就可以通过检测发送过来的数据包中是否有正确的token值来决定是否响应请求。

        安全性比Referer高,实现较为复杂,且需要保证token存储的安全性。

        3. 在HTTP头中自定义属性并验证

        这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

        使用方式简单,且token不容易泄露。但局限性非常大,XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。

HTTP和HTTPS

        HTTP:IP--->TCP--->HTTP

        HTTPS: IP--->TCP--->SSL/TLS--->HTTP

  • HTTP 是超文本传输协议,明文传输,存在安全风险。HTTPS 在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • HTTP 的端口号是 80,HTTPS 的端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

        HTTP明文传输,存在窃听、篡改和冒充等风险。 

        HTTPS加入了SSL/TLS协议:信息加密、校验机制和身份证书。

  • 混合加密实现信息的机密性,解决窃听。
  • 摘要算法的方式来实现完整性,能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决篡改。
  • 将服务器公钥放入到数字证书中,解决冒充。

        1. 混合加密 :对称加密和非对称加密

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值