灵魂拷问:到底怎么做防XSS攻击才是最佳方案?网上那些拦截器方案靠谱吗?
Xss攻击说明:
1、攻击者准备 恶意html/javascript代码片段,该代码最终会被嵌入到被攻击服务器加载的页面上。
2、恶意html/js代码,在用户不知情的情况下被执行,以该登录用户的身份执行敏感操作或获取敏感数据后发送给攻击者。
举例如下:
有个文章编辑页面,可以编写任意html/js代码。攻击者在里面嵌入了恶意js。
文章被提交保存后,下次显示出来时,执行该恶意js,从而获取到敏感数据或执行恶意操作。
更加全面的例子和说明,参见:https://www.cnblogs.com/dadonggg/p/7797299.html
防范措施:
恶意html/js代码片段,可以通过任何输入方式保存到服务器上,但这不是关键问题。
关键问题是,恶意html/js需要有执行的载体,即要通过浏览器和服务器页面。
1、如果我有一个后台服务,但是不提供任何html页面访问,就不用担心xss攻击。(网上那些防范措施都是扯淡)
2、即便提供了html页面,但是页面任何html数据都是静态的,没有经过api加载数据,那也不用担心xss攻击!
3、即便是有些页面需要从api加载数据并与html拼接(比如table列表),但是后台对api返回数据进行xss关键字过滤,也不用担心xss攻击。
堵住某些api返回恶意xss数据容易,还是堵住输入恶意xss数据容易?
我认为,差别不大,从入口或者出口把控都可以,但是也只建议针对部分api处理,而不是把所有出口、入口都进行过滤,这样会严重降低请求处理效率。
结论:
最好的方案是 在前端提交或后端接收数据时,对关键字段进行防Xss字符校验;
其次是在前端使用数据时进行xss过滤。
在后端Controller API层,可以方便针对单个api级别进行配置,加一个注解即可过滤。不需要、不建议在通用拦截器层做处理!!