XSS、CSRF是什么?
xss,即Cross Site Script,跨站脚本攻击。
其原本的缩写是CSS,但为了和层叠样式表(Cascading Style Sheet)有所区别,因而在安全领域叫做XSS。
XSS攻击是指攻击者在网站上注入恶意客户端代码,通过恶意脚本对客户端网页进行篡改,从而在浏览浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。
攻击者对客户端网页注入恶意脚本一般为JavaScript,又是也包含HTML和Flash,有很多方式进行XSS攻击,但它们的共同点是:将隐私数据发送给攻击者,将受害者重定向到一个由攻击者控制的网站。
XSS攻击分为3类:反射型(非持久型)、存储型(持久型)、基于DOM。
1、反射型发送请求时,XSS代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。做这个过程像一次反射,所以叫反射型XSS。
2、存储型存储型和反射型的区别就在于,具有攻击性的脚本被保存到了服务端并且可以被普通用户完整的从服务器中取得并执行,从而获得在网上的传播能力。
3、DOM型即基于DOM或本地的XSS攻击:其实是一种特殊类型的反射型XSS,他是基于DOM文档对象模型的一种漏洞。可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
CSRF即Cross-site request forgery ,中译是跨站请求伪造;CSRF顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站时通过cookie等方式辨识用户身份(包括使用服务器端Session的网站,因为Session也是大多保存在cookoe里面),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过XSS或连接 欺骗等途径,让用户在本机发起用户所不知道的请求。
防御措施
xss防范措施
1、输入过滤,避免XSS的方法之一,只要是将用户输入的内容进行过滤。对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、POST数据等,仅接受指定长度范围内。采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。(客户端和服务端都要)
2、输出转义,例如往HTML标签之间插入不可信数据的时候,首先要做的是对不可信数据进行HTML Entity 编码。
3、使用HttpOnly Cookie
HttpOnly是加在cookies上的一个标识,用于告诉浏览器不要向客户端脚本暴露cookie。当你在cookie上设置HttpOnly标识后,浏览器就会知会到这是特殊的cookie,只能由服务器检索到,所有来自客户端脚本的访问都会被禁止。
防范CSRF
1、验证HTTP Referer字段,利用HTTP头中的Referer判断请求来源是否合法,Referer记录了该HTTP请求的来源地址。
2、在请求地址中添加token并验证。CSRF攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有用户验证信息都存在cookie中,incident黑客可以在不知道这些验证信息的情况下直接利用用户自己的cookie来通过安全验证。要抵御CSRF,关键在于请求中放入黑客所不能伪造的信息,并且该信息不存在于cookie之中。可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端简历一个拦截器来验证这个token,如果请求中没有token或者token内容不对,则认为可能是CSRF攻击而拒绝该请求。
3、在HTTP头中自定义属性并验证。这种方式也是使用token并进行验证,和上一种方法不同的是,这里并不是吧token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP 头属性,并吧token值放入其中。这样解决了上种方法在请求中加入token的不便,同时,通过XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不同担心token会透过Referer 泄露到其他网站中去。