当前位置: 首页 > wzjs >正文

句容网站品牌推广百度seo

句容网站,品牌推广百度seo,做网站设计需要哪些知识,创建个人网站制作流程步骤防全表更新与删除插件 BlockAttackInnerInterceptor 是 MyBatis-Plus 框架提供的一个安全插件,专门用于防止恶意的全表更新和删除操作。该插件通过拦截 update 和 delete 语句,确保这些操作不会无意中影响到整个数据表,从而保护数据的完整性…

防全表更新与删除插件

BlockAttackInnerInterceptor 是 MyBatis-Plus 框架提供的一个安全插件,专门用于防止恶意的全表更新和删除操作。该插件通过拦截 update 和 delete 语句,确保这些操作不会无意中影响到整个数据表,从而保护数据的完整性和安全性。

功能特性

  • 阻止全表更新删除:插件能够识别并阻止没有指定条件的 update 和 delete 语句,这些语句可能会导致全表数据被修改或删除。
  • 保护数据安全:通过限制全表操作,减少因误操作或恶意攻击导致的数据丢失风险。

使用方法

  1. 注入插件:在 Spring Boot 配置类中,通过 @Bean 注解将 MybatisPlusInterceptor 注入到 Spring 容器中,并添加 BlockAttackInnerInterceptor 作为内部拦截器。
@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());return interceptor;}
}

  1. 配置拦截规则:插件默认拦截没有指定条件的 update 和 delete 语句。如果需要自定义拦截规则,可以参考 MyBatis-Plus 的文档进行配置。

测试示例

全表更新测试

以下测试示例展示了如何使用 BlockAttackInnerInterceptor 来防止全表更新操作。

@SpringBootTest
public class QueryWrapperTest {@Autowiredprivate UserService userService;/*** SQL:UPDATE user  SET name=?,email=?;*/@Testpublic 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 operationAssertions.assertThrows(MybatisPlusException.class, () -> {userService.saveOrUpdate(user, null);});}
}

部分更新测试

以下测试示例展示了如何正确地执行部分更新操作,插件不会对此类操作进行拦截。

@SpringBootTest
public class QueryWrapperTest {@Autowiredprivate UserService userService;/*** SQL:UPDATE user  SET name=?, email=? WHERE id = ?;*/@Testpublic 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 提供的一个重要的安全工具,它能够有效地防止全表更新和删除操作,保护数据库免受意外或恶意的数据破坏。通过合理配置和使用该插件,可以显著提高应用程序的数据安全性。

源码阅读

public class BlockAttackInnerInterceptor extends JsqlParserSupport implements InnerInterceptor {@Overridepublic void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {PluginUtils.MPStatementHandler handler = PluginUtils.mpStatementHandler(sh);MappedStatement ms = handler.mappedStatement();SqlCommandType sct = ms.getSqlCommandType();if (sct == SqlCommandType.UPDATE || sct == SqlCommandType.DELETE) {if (InterceptorIgnoreHelper.willIgnoreBlockAttack(ms.getId())) return;BoundSql boundSql = handler.boundSql();parserMulti(boundSql.getSql(), null);}}@Overrideprotected void processDelete(Delete delete, int index, String sql, Object obj) {this.checkWhere(delete.getTable().getName(), delete.getWhere(), "Prohibition of full table deletion");}@Overrideprotected void processUpdate(Update update, int index, String sql, Object obj) {this.checkWhere(update.getTable().getName(), update.getWhere(), "Prohibition of table update operation");}protected void checkWhere(String tableName, Expression where, String ex) {Assert.isFalse(this.fullMatch(where, this.getTableLogicField(tableName)), ex);}private boolean fullMatch(Expression where, String logicField) {if (where == null) {return true;}if (StringUtils.isNotBlank(logicField) && (where instanceof BinaryExpression)) {BinaryExpression binaryExpression = (BinaryExpression) where;if (StringUtils.equals(binaryExpression.getLeftExpression().toString(), logicField) || StringUtils.equals(binaryExpression.getRightExpression().toString(), logicField)) {return true;}}if (where instanceof EqualsTo) {// example: 1=1EqualsTo equalsTo = (EqualsTo) where;return StringUtils.equals(equalsTo.getLeftExpression().toString(), equalsTo.getRightExpression().toString());} else if (where instanceof NotEqualsTo) {// example: 1 != 2NotEqualsTo notEqualsTo = (NotEqualsTo) where;return !StringUtils.equals(notEqualsTo.getLeftExpression().toString(), notEqualsTo.getRightExpression().toString());} else if (where instanceof OrExpression) {OrExpression orExpression = (OrExpression) where;return fullMatch(orExpression.getLeftExpression(), logicField) || fullMatch(orExpression.getRightExpression(), logicField);} else if (where instanceof AndExpression) {AndExpression andExpression = (AndExpression) where;return fullMatch(andExpression.getLeftExpression(), logicField) && fullMatch(andExpression.getRightExpression(), logicField);} else if (where instanceof Parenthesis) {// example: (1 = 1)Parenthesis parenthesis = (Parenthesis) where;return fullMatch(parenthesis.getExpression(), logicField);}return false;}/*** 获取表名中的逻辑删除字段** @param tableName 表名* @return 逻辑删除字段*/private String getTableLogicField(String tableName) {if (StringUtils.isBlank(tableName)) {return StringUtils.EMPTY;}TableInfo tableInfo = TableInfoHelper.getTableInfo(tableName);if (tableInfo == null || !tableInfo.isWithLogicDelete() || tableInfo.getLogicDeleteFieldInfo() == null) {return StringUtils.EMPTY;}return tableInfo.getLogicDeleteFieldInfo().getColumn();}
}

http://www.dtcms.com/wzjs/94297.html

相关文章:

  • 用ps做网站尺寸交换友情链接的平台有哪些
  • 网站建设中 目录怎么做更好h5制作
  • 企业形象型网站建设如何做网页
  • 成都科技网站建设电话咨询北京seo主管
  • 网站如何做中英文切换软件推广平台有哪些
  • 爱站攻略今日百度小说排行榜风云榜
  • 做网站图片代码怎么居中杭州seo关键词优化公司
  • xampp做网站设置百度搜索排名怎么做
  • 佛山网站建设外包海门网站建设
  • 高端网站制作建设游戏推广公司
  • 文创设计网站抖音seo排名软件哪个好
  • 吉林做网站哪家好电商怎么做
  • 品牌建设方案和思路怎么优化自己网站
  • 电影网站模板百度推广代理商赚钱吗
  • 成品短视频app下载有哪些软件苹果seo系统
  • 淘宝客免费建网站html制作网站
  • 一个网站的建设需要哪些流程百度学术搜索
  • 东莞网站建设最优如何提高自己的营销能力
  • 广州软件开发软件公司优化大师怎么卸载
  • 网站建设防火墙级别要求百度搜索引擎api
  • 门头沟建设网站seo优化技术排名
  • 北京企业制作网站推广优化方案
  • 网站软件下载安装免费版南京网站设计
  • 用html做网站步骤百度大数据查询平台
  • 俄语网站里做外贸shop朝阳区seo搜索引擎优化怎么样
  • 教师网站建设企业实践总结网站优化有哪些技巧
  • 焦作 做 网站广东seo推广外包
  • 微信网站建设定制数据网站有哪些
  • 怎么做网站代码网络营销是什么专业
  • wordpress外贸询盘插件如何优化关键词搜索