项目中如何对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的全局统一处理的实现,如有不足欢迎大家评论指正。

相关文章
|
6月前
|
SQL 安全 JavaScript
淘东电商项目(69) -互联网安全架构设计(XSS攻击防御)
淘东电商项目(69) -互联网安全架构设计(XSS攻击防御)
48 0
|
10月前
|
资源调度 JavaScript
vue项目:解决v-html可能带来的XSS是跨站脚本攻击
vue项目:解决v-html可能带来的XSS是跨站脚本攻击
875 0
|
11月前
|
SQL JavaScript 安全
【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)
【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)
245 0
|
2月前
|
JavaScript 安全 前端开发
js开发:请解释什么是XSS攻击和CSRF攻击,并说明如何防范这些攻击。
XSS和CSRF是两种常见的Web安全威胁。XSS攻击通过注入恶意脚本盗取用户信息或控制账户,防范措施包括输入验证、内容编码、HTTPOnly Cookie和CSP。CSRF攻击则诱使用户执行未经授权操作,防范手段有CSRF Tokens、双重验证、Referer检查和SameSite Cookie属性。开发者应采取这些防御措施并定期进行安全审计以增强应用安全性。
24 0
|
4月前
|
存储 JSON 前端开发
【面试题】XSS攻击是什么?
【面试题】XSS攻击是什么?
|
4月前
|
存储 开发框架 安全
如何处理预防XSS漏洞攻击问题
防止XSS攻击需要从多个方面入手,包括输入验证和过滤、输出编码、设置正确的HTTP头部、使用最新的安全框架和库、定期进行安全审计和漏洞扫描以及培训和意识提升等。只有综合运用这些措施,才能有效地防止XSS攻击,保护网站和用户的安全。
|
7月前
|
存储 安全 JavaScript
渗透攻击实例-xss跨站脚本攻击
渗透攻击实例-xss跨站脚本攻击
|
17天前
|
缓存 安全 JavaScript
前端安全:Vue应用中防范XSS和CSRF攻击
【4月更文挑战第23天】本文探讨了在Vue应用中防范XSS和CSRF攻击的重要性。XSS攻击通过注入恶意脚本威胁用户数据,而CSRF则利用用户身份发起非授权请求。防范措施包括:对输入内容转义、使用CSP、选择安全的库;采用Anti-CSRF令牌、同源策略和POST请求对抗CSRF;并实施代码审查、更新依赖及教育团队成员。通过这些实践,可提升Vue应用的安全性,抵御潜在攻击。
|
10天前
|
存储 安全 JavaScript
【PHP开发专栏】PHP跨站脚本攻击(XSS)防范
【4月更文挑战第30天】本文探讨了Web开发中的XSS攻击,解释了其原理和分类,包括存储型、反射型和DOM型XSS。XSS攻击可能导致数据泄露、会话劫持、网站破坏、钓鱼攻击和DDoS攻击。防范措施包括输入验证、输出编码、使用HTTP头部、定期更新及使用安全框架。PHP开发者应重视XSS防护,确保应用安全。
|
25天前
|
安全 JavaScript Go
跨站脚本攻击(XSS)防护在Django中的应用
【4月更文挑战第15天】本文介绍了Django如何防范XSS攻击。Django模板引擎自动转义HTML以防止恶意脚本,提供`mark_safe`函数和CSRF防护。此外,建议开发者验证清理用户输入、使用内容安全策略、更新库以及遵循安全编码实践来增强防护。通过这些措施,开发者能构建更安全的Web应用。