1、全称Cross-Site Scripting,即跨站脚本
2、简单来说
3、造成xss的有几个要点:
4、比方说在有表单输入的地方,用户输入了 scriptalert('OK')/script ,服务器没有经过过滤直接保存下来,那么当其他用户访问这个页面时,就会弹出这个提示框;当然xss攻击还能做一些其他更复杂的事情,比如说获取用户的cookie什么的;
5、 预防措施
1、全称:Cross Site Request Forgery,即跨站请求伪造;
2、 原理
3、 预防措施 (采用anti-csrf-token方案)
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的 *** 注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS是获取信息,不需要提前知道其他用户页面的代码和数据包。CSRF是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包。要完成一次CSRF攻击,受害者必须依次完成两个步骤:
登录受信任网站A,并在本地生成Cookie。
在不登出A的情况下,访问危险网站B。
CSRF的防御
服务端的CSRF方式 *** 很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。通过验证码的 *** 。
by三人行慕课
XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
简而言之,就是作恶用户通过表单提交一些前端代码,如果不做处理的话,这些前端代码将会在展示的时候被浏览器执行。
解决XSS攻击,可以通过后端对输入的数据做过滤或者转义,使XSS攻击代码失效。
对于过滤XSS脚本的代码,通过搜索引擎可以搜索到很多,但似乎都不是那么全面。基本上都是只能过滤querystring(表单类型)类型的入参,而不能过滤json类型的入参。其实,在现在的开发中,更多的是使用json类型做数据交互。下面就直接贴代码了:
这里重写了两个 *** :getParameter和getParameterValues,getParameter *** 是直接通过request获得querystring类型的入参调用的 *** 。如果是通过springMVC注解类型来获得参数的话,走的是getParameterValues的 *** 。大家可以通过打印一个输出来验证一下。
StringEscapeUtils.escapeHtml4这个 *** 来自Apache的工具类,maven坐标如下:
过滤的代码写完了,下面就是在一个filter中应用该代码。
过滤表单类型的代码已经完成(xssObjectMapper这个是后面过滤json类型才用到的)。下面来实现过滤json类型的代码:
代码如下:
这里是通过修改SpringMVC的json序列化来达到过滤xss的目的的。其实也可以通过之一种 *** ,重写getInputStream *** 来实现,这里我就不做演示了(通过json类型传参会走getInputStream *** ,通过重写该 *** 打印输出可以证明)。
TestController.java
下面通过postman测试下效果:
可以看到,js代码已经经过转义。转义过后的代码,即使前端读取过去了,也不会被浏览器执行的。