XSS防御
背景
主要针对xss的补充防御:https://bbs.huaweicloud.com/blogs/444386#H10
防御措施
上文提到的常见防御手段主要分为:
- 入参校验
- 出参转码
- 前端过滤
一、入参校验
入参校验主要针对一些特殊字符进行过滤,避免持久型XSS的情况。
如果发现有特殊字符,则根据业务需求,进行相应的处理。例如禁止访问、直接过滤/替换字符,或者进行转码。各有优缺。
- 禁止访问:如果检测到特殊字符,则进行提示,并拦截本次访问。 防御等级比较高,不存在需要输入特殊字符的情况可使用
- 过滤/替换字符:如果检测到特殊字符,则直接将特殊字符进行替换。例如替换为下划线,会直接过滤掉用户,无感知。可能会导致用户体验不好。
- 进行转码:如果检测到特殊字符,则将对应的HTML转码。这种可以知道用户输入的是什么特殊字符,且能进行一定的防御。但是可能会导致数据超出限制,以及前端如果进行解码,可能同样会导致问题
常见的XSS特殊字符
https://bbs.huaweicloud.com/blogs/444387
// todo 补充过滤的代码 java
二、出参转码
HTML编码
主要针对字符传输到客户端前,需要优先进行转码,避免直接输出特殊字符到客户端。
处理方式一般主要通过html转码进行处理。
字符 | 实体名称 |
---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
/ |
/ |
常见的字符转码:https://www.w3school.com.cn/charsets/ref_html_8859.asp
// todo 补充出参替换的代码 java
三、前端过滤
针对服务端无法过滤的字符,例如反射型XSS。其实也是一种特殊的输入过滤手段,这是这里指的客户端,而不是服务端。
手动过滤:和服务端保持一致,可进行禁止输入、过滤/替换、转码手段。主要通过手动写函数的方式实现,且输入点可能会比较多,容易遗漏。
四、常见工具
使用 OWASP AntiSamy Project 和 OWASP ESAPI for Java 来防御 XSS(还有客户端的esapi4js: esapi.js)
// todo补充工具类的具体使用
五、安全设置
cookie设置
cookie作为客户端重要的敏感信息存储空间。xss很大可能会获取cookie数据,可以通过设置httponly属性,防止js获取cookie属性
cookie.setHttpOnly(true);
响应头设置
X-Content-Type-Options:浏览器会根据猜测自动解析响应数据,可能导致XSS。可以通过X-Content-Type-Options:nosniff防止浏览器的这种猜疑
X-XSS-Protection:浏览器有默认的策略,当检测到XSS渲染页面时,浏览器会进行停止渲染。机制并不完美,只能辅助
- 0:禁用XSS保护
- 1:启动XSS保护
- 1;mode=block:启动xss保护,并在检查到XSS攻击时,停止渲染页面
CSP设置
Content-Security-Policy:用于限制浏览器只加载指定来源的资源,比如只加载指定的js,从而减少XSS的攻击风险,不过由于加载的来源很多,需要配置全面,否则容易报错
// todo补充CSP的详情设置
- 点赞
- 收藏
- 关注作者
评论(0)