一:XSS
XSS的基本概念:
XSS全称Cross Site Scripting,跨域脚本攻击。
XSS攻击原理:
XSS不需要做任何的登录认证,它会通过合法的操作,比如在url中输入、或者在评论框中输入等,向页面注入一些脚本,可能是js、hmtl代码块等。
XSS的攻击方式:
1、反射型:发出请求时,XSS代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以叫反射型XSS。
2、存储型:存储型XSS和反射型XSS的差别在于,提交的代码会存储在服务器端,下次请求时目标页面时不用再提交XSS代码。
XSS的防范措施:
1、编码:对用户输入的数据进行HTML Entity 编码。把字符转换成转义字符,使得浏览器在最终输出结果上是一样的。
比如说这段代码:<script>alert(hqyj)</script>
若不进行任何处理,则浏览器会执行alert的js操作,实现XSS注入。进行编码处理之后,L在浏览器中的显示结果就是这个文本,将变量作为纯文本进行输出,且不引起JavaScript的执行。
2、过滤:移除用户输入的和事件相关的属性,过滤掉一些不安全的内容,移除用户输入的节点。
3、 校正:避免直接对HTML Entity进行解码。使用DOM Parse转换,校正不配对的DOM标签,把文本解析成DOM结构。
二:CSRF
CSRF的基本概念:
CSRF全称是Cross-site request forgery,跨站请求伪造。
CSRF的攻击原理:
用户是某网站的注册用户,且登录进去,于是该网站就给用户下发cookie。要完成一次CSRF攻击,受害者必须满足两个必要的条件:登录受信任网站,并在本地生成Cookie;在不登出的情况下,访问危险另一网站。
CSRF如何防御:
1、将cookie设置为HttpOnly
CRSF攻击很大程度上是利用了浏览器的cookie,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设置“HttpOnly”属性,这样通过程序就无法读取到cookie信息,避免了攻击者伪造cookie的情况出现。设置cookie为HttpOnly的代码如下:response.setHeader( "Set-Cookie", "cookiename=cookievalue;HttpOnly");
2、 Token 验证
攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于cookie中,因此攻击者可以在不知道用户验证信息的情况下直接利用用户的cookie来通过安全验证。在请求中放入攻击者所不能伪造的信息,并且该信总不存在于cookie之中。服务器发送给客户端一个token;客户端提交的表单中带着这个token;如果这个token不合法,那么服务器拒绝这个请求。
3、 Referer验证
Referer指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截。
三:CSRF 和 XSS 的区别
1、CSRF是跨站请求伪造; XSS是跨域脚本攻击。
2、CSRF需要用户先登录网站获取cookie; XSS不需要登录。
3、 CSRF是利用网站本身的漏洞; XSS是向网站注入JS代码,执行JS里的代码,篡改网站的内容。