XSS和CSRF

web安全策略和同源策略的意义

如果登陆了一个网站,不小心又打开另一个恶意网站,如果没有安全策略,则他可以对已登录的网站进行任意的dom操作、伪造接口请求等,因此安全策略是必要的;

 

浏览器的同源策略限制了非同源的域名之间不可以对DOM进行读写操作不可以读取非同源的cookie、indexDB、localStorge等数据与资源

XSS-跨站脚本攻击

理解

由于实际业务不可能完全不引用第三方的资源,因此需要跨域访问,而支持第三方资源引用就会容易引起XSS攻击。XSS是一种代码注入攻击,攻击者在网站注入恶意脚本,在浏览器上运行,从而盗取用户cookie等信息。

危害特点

  • 窃取cookie信息,利用CORS将cookie上传到攻击者的服务器
  • 监听用户行为,比如利用addEventListener监听用户键盘事件,获取用户输入的用户名密码等
  • 修改DOM,伪造登陆窗口,骗取用户输入的用户名和密码等信息
  • 生成悬浮广告,在页面生成悬浮广告,诱导用户点击

攻击类型

  • 存储型XSS:攻击者将恶意脚本注入到有漏洞的服务器,当浏览器访问带有恶意脚本的页面时,就会上传用户信息到恶意服务器
  • 反射型XSS:攻击者诱导用户点击一个连接,然后将带有恶意代码的请求发送到服务器服务器将恶意代码返回反射到浏览器,完成最终XSS攻击
  • 基于DOM的XSS:这个攻击方法不会涉及到服务器,是在web页面资源传输过程中或者用户使用web页面过程中 修改web页面的数据。这个劫持类型较多,例如本地软件劫持、路由器劫持

防御方法

无论是哪种攻击类型,他们的共同特点都是先将恶意脚本注入浏览器,然后将用户信息发送到恶意服务器。所以阻止XSS攻击要从防止浏览器脚本注入和阻止恶意消息的发送方面来实施。

  • 服务器对输入脚本关键字符进行过滤或转码(例如 将<script 转为 &lt;script&gt;)
  • 使用验证码,防止伪造用户提交
  • 对于不受信任的输入,限制输入长度
  • 使用HttpOnly属性标记cookie(HttpOnly属性标记的cookie只能用于请求携带,不能通过js访问)
  • 采用纯前端渲染。不使用服务器渲染,通过接口请求的方式,然后使用innerText、setAttrbute等方法设置内容与属性
  • 使用CSP安全策略。CSP的本质是建立白名单。可以指定哪些外部资源可以加载,来避免恶意第三方脚本的加载;也可以禁止向第三方域提交数据,防止信息外泄;还可以禁止执行内联脚本和未授权的脚本;还提供了上报机制,这样可以帮助我们尽快的发现有哪些XSS攻击,然后进行修复。

CRSF-跨域请求伪造攻击

理解

CRSF是指跨站请求伪造攻击,攻击者诱导用户进入第三方网站,在攻击者的网站中,利用用户的登陆状态伪造跨域请求,绕过服务器的用户验证,从服务器获取信息。

他的本质是利用同源请求会携带cookie发送到服务器,来冒充用户。

攻击类型

  • get类型:比如用户在网站中的img标签中构建一个请求,在用户点击时自动发送请求
  • post类型:比如构建一个隐藏的表单,在用户进入页面时自动提交
  • 链接类型:比如在a标签的href属性中构建一个请求,在用户点击的时候自动发送

防御方法

他的攻击特点是利用服务器的漏洞,因此主要是提升服务器的安全性

  • 利用cookie的SameSite属性Strict-完全禁止第三方cookie;Lax-对于get链接的形式可以携带;None-没有任何限制
  • 验证请求的来源站点。服务器根据http请求头中的origin或referer判断是否为运行的站点,如果这两个值都不存在,则直接拒绝该请求。(缺点是有些情况referer也可以被伪造)
  • 使用CSRF Token验证。浏览器向服务器发起请求时,服务器生成一个随机的CSRF Token,当浏览器再次发送请求时携带此Token,服务器会根据这个token进行验证。(缺点是流程繁琐,每个请求都要携带Token;其次如果服务器搭载了负载均衡,如果请求被分配到其他服务器,这个服务器session中没有缓存这个token,也无法完成验证)
  • 对cookie进行双重验证。浏览器访问页面时,服务器向请求域名中注入一个随机字符串cookie,当用户再次访问时,获取cookie中的字符串并拼接到URL中,服务器根据参数中的字符串和cookie中的字符串进行对比,完成验证。(优点:比上述两种实现都为简单方便;缺点:如果同时遭遇了XSS攻击,则也将失效)

<think>好的,用户想在Spring Boot中通过YML文件配置MyBatis,需要具体的配置方法示例。首先,我得回忆一下Spring Boot整合MyBatis的常规步骤,尤其是配置部分。根据之前的引用内容,用户提到的几个参考资料中,引用[4]提到了在application.properties中配置,而用户现在需要的是YML格式的配置。 首先,YML配置Properties配置的结构不同,所以需要转换一下。常见的数据库连接配置,比如数据源、MyBatis的mapper位置、类型别名等,都需要在YML中正确设置。例如,数据源的URL、用户名、密码,驱动类名这些是基础。然后MyBatis相关的配置,如mapper-locations、type-aliases-package,这些在YML中应该放在mybatis节点下。 接下来,我需要检查是否所有的配置项都有对应的YML语法。比如,在properties中可能是mybatis.mapper-locations=classpath:mapper/*.xml,那么在YML中应该是mybatis下的mapper-locations,并且使用列表格式。另外,引用[5]提到在application.properties中配置数据库连接,所以对应的YML应该是spring.datasource下的各个属性。 然后,用户可能需要一个完整的示例,包括YML配置、依赖引入、启动类注解以及Mapper接口的示例。根据引用[3][4],启动类需要@MapperScan注解来扫描Mapper接口。在YML中配置type-aliases-package的话,需要指定实体类的包路径。 另外,依赖方面,用户需要引入mybatis-spring-boot-starter,可能还有数据库驱动,比如MySQL。引用[4]中提到了mysql-connector-j,所以在pom.xml或build.gradle中需要添加相应的依赖。 需要确保步骤清晰,先讲依赖,再讲YML配置,然后是启动类Mapper的示例。可能还需要提到一些常见配置项,比如开启驼峰命名映射,这在MyBatis中是一个常用配置,对应的是map-underscore-to-camel-case属性。 还要注意格式是否正确,比如YML的缩进是否准确,避免语法错误。例如,spring.datasource.url的缩进是两个空格,下面的mybatis的配置也要正确缩进。此外,mapper-locations使用列表形式,每个元素前有短横线空格。 最后,生成相关问题的时候,要考虑用户可能遇到的后续问题,比如多数据源配置、整合MyBatis-Plus、或者事务管理,这些都可以作为相关问题提出。</think>在Spring Boot中通过YML配置MyBatis主要分为以下步骤: ### 一、添加依赖 ```yaml dependencies: implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3' implementation 'mysql:mysql-connector-java:8.0.33' implementation 'org.springframework.boot:spring-boot-starter-web' ``` ### 二、YML配置文件 在`application.yml`中添加: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath:mapper/**/*.xml # XML映射文件路径 type-aliases-package: com.example.demo.entity # 实体类包路径 configuration: map-underscore-to-camel-case: true # 开启驼峰命名映射 ``` ### 三、启动类配置 ```java @SpringBootApplication @MapperScan("com.example.demo.mapper") // 扫描Mapper接口 public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` ### 四、Mapper接口示例 ```java public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User selectById(Integer id); } ``` ### 五、XML映射文件示例 在`resources/mapper/UserMapper.xml`中: ```xml <mapper namespace="com.example.demo.mapper.UserMapper"> <select id="selectByName" resultType="User"> SELECT * FROM user WHERE name = #{name} </select> </mapper> ``` [^1]通过这种配置方式,MyBatis会自动加载XML映射文件并与接口绑定[^4]。数据库连接池默认使用HikariCP,可通过`spring.datasource.hikari.*`配置连接池参数[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍思码匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值