项目中如何对XSS统一处理

简介: XSS攻击是指攻击者利用网站中的漏洞,向页面中注入恶意脚本,从而获取用户的信息或者控制用户的计算机。举一个通俗的例子,早期使用JSP页面渲染页面的项目,如果将用户名改成nick<alert>1</alert>,则当用户打开页面时,就会弹出一个警告框,而这个警告框可以被恶意脚本所替代,例如读取cookies或者其他敏感信息等操作。

XSS攻击是什么?
XSS攻击是指攻击者利用网站中的漏洞,向页面中注入恶意脚本,从而获取用户的信息或者控制用户的计算机。
举一个通俗的例子,早期使用JSP页面渲染页面的项目,如果将用户名改成nick1,则当用户打开页面时,就会弹出一个警告框,而这个警告框可以被恶意脚本所替代,例如读取cookies或者其他敏感信息等操作。
如何在项目中防范XSS攻击呢
有一些项目使用Filter+注解的方式来过滤或者提示XSS攻击。
通过在参数中的字段上加上类似@Xss的注解,来表示这个字段是不允许输入XSS脚本的。
但是这种实现我觉得有几点不便之处。

严格来说,其实普通系统内的绝大部分输入字段都不允许输入XSS文本。除非一些存储富文本的字段。因此需要在很多字段上去标注上@Xss注解。
Filter中的代码,需要重复去读Request类的数据,因此需要自己实现一个可重复读的RequestWrapper.

因此我使用了JsonDeserializer更简单的处理全局的防Xss处理。
完整全局XSS统一处理实现在开源项目中:github.com/valarchie/A…
原理
Jackson框架允许自定义JsonDeserializer,因此可以在自定义的JsonDeserializer中剔除恶意XSS脚本注入。
自定义Xss过滤序列化器
/**

  • 直接将html标签去掉
  • @author valarchie

*/
public class JsonHtmlXssTrimSerializer extends JsonDeserializer {

public JsonHtmlXssTrimSerializer() {
    super();
}
@Override
public String deserialize(JsonParser p, DeserializationContext context) throws IOException {
    String value = p.getValueAsString();
    if( value != null) {
        // 去除掉html标签    如果想要转义的话  可使用 HtmlUtil.escape()
        return HtmlUtil.cleanHtmlTag(value);
    }
    return null;
}
@Override
public Class<String> handledType() {
    return String.class;
}

}
复制代码
配置自定义Xss过滤序列化器
@Configuration
public class JacksonConfig implements Jackson2ObjectMapperBuilderCustomizer{

@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
    // 防XSS脚本注入
    jacksonObjectMapperBuilder.deserializers(new JsonHtmlXssTrimSerializer());
}

}
复制代码
如何支持富文本
某一些字段可能是需要支持富文本的,比如公告栏里的内容之类的。此时我们可以给特定的字段标注标准的JsonDeserializer来覆盖我们自定义的序列化器。 以下是例子。
/**

  • @author valarchie

*/
@Data
public class NoticeAddCommand {

/**
 * 想要支持富文本的话, 避免Xss过滤的话, 请加上@JsonDeserialize(using = StringDeserializer.class) 注解
 */
@NotBlank
@JsonDeserialize(using = StringDeserializer.class)
protected String noticeContent;
protected String status;

}
复制代码
这是笔者关于Xss的全局统一处理的实现,如有不足欢迎大家评论指正。

相关文章
|
安全 前端开发 Java
代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全
代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全
187 0
|
SQL 安全 JavaScript
淘东电商项目(69) -互联网安全架构设计(XSS攻击防御)
淘东电商项目(69) -互联网安全架构设计(XSS攻击防御)
222 0
|
资源调度 JavaScript
vue项目:解决v-html可能带来的XSS是跨站脚本攻击
vue项目:解决v-html可能带来的XSS是跨站脚本攻击
1993 0
|
SQL JavaScript 安全
【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)
【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)
646 0
|
存储 安全 JavaScript
手摸手带你进行XSS攻击与防御
当谈到网络安全和信息安全时,跨站脚本攻击(XSS)是一个不可忽视的威胁。现在大家使用邮箱进行用户认证比较多,如果黑客利用XSS攻陷了用户的邮箱,拿到了cookie那么就可以冒充你进行收发邮件,那真就太可怕了,通过邮箱验证进行其他各种网站的登录与高危操作。 那么今天,本文将带大家深入了解XSS攻击与对应的防御措施。
|
JavaScript 安全 前端开发
同源策略如何防止 XSS 攻击?
【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
426 49
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
783 4
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
568 2
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
590 3
|
存储 JavaScript 前端开发
Xss跨站脚本攻击(Cross Site Script)
Xss跨站脚本攻击(Cross Site Script)