Open bibi7 opened 4 years ago
XSS 全称是 Cross Site Scripting(即跨站脚本),或者说更为通用的我们可以理解成为恶意代码注入。 根据不同的注入方式,xss一般来说常见到的有两种。分别是存储型、反射型
存储型,顾名思义就是将恶意脚本存储了起来,确实,存储型的 XSS 将脚本存储到了服务端的数据库,然后在客户端执行这些脚本,从而达到攻击的效果。 常见的场景是留言评论区提交一段脚本代码,如果前后端没有做好转义的工作,那评论内容存到了数据库,在页面渲染过程中直接执行, 相当于执行一段未知逻辑的 JS 代码,是非常恐怖的。这就是存储型的 XSS 攻击。
反射型的话,一般是作为网络请求的一部分。正常情况下也会出现在url中(曾经我司安全部就给我提了这么一个bug) 之所以叫它反射型, 是因为恶意脚本是通过作为网络请求的参数,经过服务器,然后再反射到HTML文档中,执行解析。和存储型不一样的是,服务器并不会存储这些恶意脚本。
比如有这么一串url
https://ljbao.lu.com/yeb/820/trading/trade-info/143904672?amount=1.02&sid=507264088"/><img src=1 onmouseover=alert(123)>&isFirstInvest=false&need=trading
这样在html中,html解析到了这个标签且会插入在文档流中,当鼠标略过图片的时候,注入的js就会被触发。
保险起见,不管是前端还是后端都要对用户的输入做校验。比如可以在controller层过滤一下url
import org.apache.commons.lang.StringEscapeUtils; private String format(String str){ return StringEscapeUtils.escapeHtml(str); } @RequestMapping(value = "trading/trade-info/{productId:[0-9]+}", method = RequestMethod.GET) public String traddingInfo(@PathVariable("productId") String productId, ModelMap model) throws InvokeRemoteServiceException { //........ Map<String,Object> investmentInfo = investDetailService.getInvestmentInfoInit(productId, xxx, xxx); model.put("investmentInfo", investmentInfo); model.put("productId", format(productId)); //........ }
什么是xss?
XSS 全称是 Cross Site Scripting(即跨站脚本),或者说更为通用的我们可以理解成为恶意代码注入。 根据不同的注入方式,xss一般来说常见到的有两种。分别是存储型、反射型
存储型
存储型,顾名思义就是将恶意脚本存储了起来,确实,存储型的 XSS 将脚本存储到了服务端的数据库,然后在客户端执行这些脚本,从而达到攻击的效果。 常见的场景是留言评论区提交一段脚本代码,如果前后端没有做好转义的工作,那评论内容存到了数据库,在页面渲染过程中直接执行, 相当于执行一段未知逻辑的 JS 代码,是非常恐怖的。这就是存储型的 XSS 攻击。
反射型
反射型的话,一般是作为网络请求的一部分。正常情况下也会出现在url中(曾经我司安全部就给我提了这么一个bug) 之所以叫它反射型, 是因为恶意脚本是通过作为网络请求的参数,经过服务器,然后再反射到HTML文档中,执行解析。和存储型不一样的是,服务器并不会存储这些恶意脚本。
比如有这么一串url
这样在html中,html解析到了这个标签且会插入在文档流中,当鼠标略过图片的时候,注入的js就会被触发。
保险起见,不管是前端还是后端都要对用户的输入做校验。比如可以在controller层过滤一下url