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攻击攻击原理及过程如下:
- 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
- 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
- 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
- 浏览器在接收到这些攻击性代码后,根据网站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. 混合加密 :对称加密和非对称加密