一、CSRF
概念
CSRF(Cross-site request forgery)——跨站请求伪造。也被称为“One Click Attack”或者“Session Riding”,通常缩写为CSRF或者XSRF,通过伪装来自受信任用户的请求,来利用受信任的网站。
攻击原理
曾经注册登录过的网站,当再次打开时,无需登录个人账户直接进入。这是由于浏览器保存了我们的cookie,里面记录了一些信息,当然,这些cookie是服务器创建后返回给浏览器的,浏览器只进行了保存。
①此时,用户未退出该网站(A)之前,在同一浏览器中,打开一个TAB页访问网站B;
②网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
③浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
危害
攻击者能够欺骗受害用户完成该受害者所允许的任一状态改变的操作。配合其他漏洞攻击产生蠕虫效果,会将 CSRF 攻击一传十,十传百。
防御
①cookie设置httpOnly
HttpOnly是Cookie中一个属性,用于防止客户端脚本通过document.cookie属性访问Cookie
②token验证
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。
它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。缺点是无法作废已颁布的令牌/不易应对数据过期。
③隐藏令牌
把token隐藏在http的head头中。
④Referer验证
Referer是http协议中定义的,Referer就是上一个页面的地址,浏览器会在点击一个链接时自动添加到请求头中。
二、XXS
概念
XXS(Cross Site Scripting)——跨域脚本攻击。不需要做任何登录认证,通过合法操作注入脚本。
攻击原理
a. 反射型:发出请求时,XSS代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以叫反射型XSS。
b.存储型:存储型XSS和反射型XSS的差别在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求时目标页面时不用再提交XSS代码。
防范
编码(HTML Entity 编码)、过滤(移除用户输入的和事件相关的属性)、校正(避免直接对HTML Entity进行解码)
XXS于CSRF不同点
CSRF是跨站请求伪造; XSS是跨域脚本攻击。
CSRF需要用户先登录网站A,获取cookie; XSS不需要登录。
CSRF是利用网站A本身的漏洞,去请求网站A的api; XSS是向网站A注入JS代码,然后执行JS里的代码,篡改网站A的内容。