码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [安全类] Xss跨站脚本攻击 springboot [解释与代码校验]


    目录

    1. 了解xss攻击原理:

     2. 代码防御:  

    3. 使用springboot中的自定义校验注解

    4.  自定义校验注解@Xss并指定校验逻辑

    -> 注意这个注解 @Constraint(validatedBy = {XssValidator.class})

    5. XssValidator 注解实现逻辑

    6. 使用场景(插入用户名等时 用户不能有特殊字符)


    1. 了解xss攻击原理:

    XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容

     2. 代码防御:  

    XSS攻击主要是由程序漏洞造成的, 这里只引用了解释之一

    不信任用户提交的任何内容,对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、REFER、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。尽量采用POST而非GET提交表单;对“<”,“>”,“;”,“””等字符做过滤;任何内容输出到页面之前都必须加以en-code,避免不小心把htmltag显示出来。

    3. 使用springboot中的自定义校验注解

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-validationartifactId>
    4. dependency>

    4.  自定义校验注解@Xss并指定校验逻辑

    1. /**
    2. * 自定义xss校验注解
    3. */
    4. @Retention(RetentionPolicy.RUNTIME)
    5. @Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
    6. @Constraint(validatedBy = {XssValidator.class})
    7. public @interface Xss {
    8. String message() default "不允许任何脚本运行";
    9. Class[] groups() default {};
    10. Classextends Payload>[] payload() default {};
    11. }

    -> 注意这个注解 @Constraint(validatedBy = {XssValidator.class})

    指定了xss的校验逻辑 看看String类型参数 是否存在<>等非法字符

    如果存在 提示或 进行其他逻辑操作

    5. XssValidator 注解实现逻辑

    1. import com.ruoyi.common.utils.StringUtils;
    2. import javax.validation.ConstraintValidator;
    3. import javax.validation.ConstraintValidatorContext;
    4. import java.util.regex.Matcher;
    5. import java.util.regex.Pattern;
    6. /**
    7. * 自定义xss校验注解实现
    8. */
    9. public class XssValidator implements ConstraintValidator {
    10. private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />";
    11. /**
    12. * 判断是否需要校验
    13. *
    14. * true 表示放行
    15. * false 表示拦截 {@code false} if {@code value} does not pass the constraint
    16. * @param value
    17. * @param constraintValidatorContext
    18. * @return
    19. */
    20. @Override
    21. public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
    22. if (StringUtils.isBlank(value)) {
    23. //System.out.println(constraintValidatorContext.getDefaultConstraintMessageTemplate());
    24. return true;
    25. }
    26. return !containsHtml(value);
    27. }
    28. public static boolean containsHtml(String value) {
    29. Pattern pattern = Pattern.compile(HTML_PATTERN);
    30. Matcher matcher = pattern.matcher(value);
    31. return matcher.matches();
    32. }
    33. }

    6. 使用场景(插入用户名等时 用户不能有特殊字符)

    1. @Xss(message = "用户名不能包含特殊字符")
    2. @NotBlank(message = "用户账号不能为空")
    3. @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
    4. public String getUserName(){
    5. return userName;
    6. }

     在业务代码中使用并测试

  • 相关阅读:
    迁移使用 GH-ost/PT-osc 的源数据库
    umich cv-4-1 卷积网络基本组成部分介绍
    2022IDEAMaven搭建MyBatis框架(标签和对象不理解的看一下初始那一期的基础部分)
    硬件基本功--过流、过压保护电路
    基于Java毕业设计医友医院信息管理源码+系统+mysql+lw文档+部署软件
    在报酬与体验之间触碰到玩家“G”点才是元宇宙链游发展之道
    【Python入门】Python的List容器二
    基于UDP丢包统计程序设计
    该从什么角度思考npm、yarn与pnpm的区别
    分布式多级缓存
  • 原文地址:https://blog.csdn.net/pingzhuyan/article/details/126807716
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号