XSS防御

举报
object 发表于 2025/01/03 11:30:26 2025/01/03
【摘要】 背景主要针对xss的补充防御:https://bbs.huaweicloud.com/blogs/444386#H10防御措施上文提到的常见防御手段主要分为:入参校验出参转码前端过滤一、入参校验入参校验主要针对一些特殊字符进行过滤,避免持久型XSS的情况。如果发现有特殊字符,则根据业务需求,进行相应的处理。例如禁止访问、直接过滤/替换字符,或者进行转码。各有优缺。禁止访问:如果检测到特殊字符...

背景

主要针对xss的补充防御:https://bbs.huaweicloud.com/blogs/444386#H10

防御措施

上文提到的常见防御手段主要分为:

  1. 入参校验
  2. 出参转码
  3. 前端过滤

一、入参校验

入参校验主要针对一些特殊字符进行过滤,避免持久型XSS的情况。

如果发现有特殊字符,则根据业务需求,进行相应的处理。例如禁止访问、直接过滤/替换字符,或者进行转码。各有优缺。

  • 禁止访问:如果检测到特殊字符,则进行提示,并拦截本次访问。 防御等级比较高,不存在需要输入特殊字符的情况可使用
  • 过滤/替换字符:如果检测到特殊字符,则直接将特殊字符进行替换。例如替换为下划线,会直接过滤掉用户,无感知。可能会导致用户体验不好。
  • 进行转码:如果检测到特殊字符,则将对应的HTML转码。这种可以知道用户输入的是什么特殊字符,且能进行一定的防御。但是可能会导致数据超出限制,以及前端如果进行解码,可能同样会导致问题

常见的XSS特殊字符

https://bbs.huaweicloud.com/blogs/444387

// todo 补充过滤的代码 java

二、出参转码

HTML编码

主要针对字符传输到客户端前,需要优先进行转码,避免直接输出特殊字符到客户端。

处理方式一般主要通过html转码进行处理。

字符 实体名称

&

&

<

&lt;

>

&gt;

"

&quot;

'

&#x27;

/

&#x2F;

常见的字符转码: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的详情设置

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。