【Mybatis-Plus】防全表更新與刪除外掛

清清飞扬發表於2024-08-27

From: https://baomidou.com/plugins/block-attack/

BlockAttackInnerInterceptor 是 MyBatis-Plus 框架提供的一個安全外掛,專門用於防止惡意的全表更新和刪除操作。該外掛透過攔截 updatedelete 語句,確保這些操作不會無意中影響到整個資料表,從而保護資料的完整性和安全性。

功能特性

  • 阻止全表更新刪除:外掛能夠識別並阻止沒有指定條件的 updatedelete 語句,這些語句可能會導致全表資料被修改或刪除。
  • 保護資料安全:透過限制全表操作,減少因誤操作或惡意攻擊導致的資料丟失風險。

使用方法

  1. 注入外掛:在 Spring Boot 配置類中,透過 @Bean 註解將 MybatisPlusInterceptor 注入到 Spring 容器中,並新增 BlockAttackInnerInterceptor 作為內部攔截器。
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}
}
  1. 配置攔截規則:外掛預設攔截沒有指定條件的 updatedelete 語句。如果需要自定義攔截規則,可以參考 MyBatis-Plus 的文件進行配置。

測試示例

全表更新測試

以下測試示例展示瞭如何使用 BlockAttackInnerInterceptor 來防止全表更新操作。

@SpringBootTest
public class QueryWrapperTest {
@Autowired
private UserService userService;
/**
* SQL:UPDATE user SET name=?,email=?;
*/
@Test
public void testFullUpdate() {
User user = new User();
user.setId(999L);
user.setName("custom_name");
user.setEmail("xxx@mail.com");
// 由於沒有指定更新條件,外掛將丟擲異常
// com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Prohibition of table update operation
Assertions.assertThrows(MybatisPlusException.class, () -> {
userService.saveOrUpdate(user, null);
});
}
}

部分更新測試

以下測試示例展示瞭如何正確地執行部分更新操作,外掛不會對此類操作進行攔截。

@SpringBootTest
public class QueryWrapperTest {
@Autowired
private UserService userService;
/**
* SQL:UPDATE user SET name=?, email=? WHERE id = ?;
*/
@Test
public void testPartialUpdate() {
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(User::getId, 1);
User user = new User();
user.setId(10L);
user.setName("custom_name");
user.setEmail("xxx@mail.com");
// 由於指定了更新條件,外掛不會攔截此操作
userService.saveOrUpdate(user, wrapper);
}
}

注意

  • 合理配置:確保在配置外掛時,考慮到專案的實際需求,避免過度限制導致正常操作受阻。
  • 測試驗證:在生產環境部署前,應充分測試外掛的功能,確保其按預期工作。

BlockAttackInnerInterceptor 外掛是 MyBatis-Plus 提供的一個重要的安全工具,它能夠有效地防止全表更新和刪除操作,保護資料庫免受意外或惡意的資料破壞。透過合理配置和使用該外掛,可以顯著提高應用程式的資料安全性。

相關文章