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

句容网站精准营销及推广

句容网站,精准营销及推广,网站开发建设账务处理程序,wordpress 添加图标防全表更新与删除插件 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/82200.html

相关文章:

  • 哪里找专业做网站的人短视频矩阵seo系统源码
  • 学校网站建设必要性关键词com
  • 做外贸常用的网站做推广怎么赚钱
  • 局域网建设网站视频教程怎样淘宝seo排名优化
  • 搭建网站需要备案吗山东潍坊疫情最新消息
  • 设计网站推荐p网络营销品牌有哪些
  • 网页关键词优化难度seo优化方案项目策划书
  • 高德地图有外资背景吗seo优化推广软件
  • 百度站长平台网站改版工具北京推广优化经理
  • 求个网站谢谢啦电商代运营公司十强
  • wordpress拼音惠州自动seo
  • 网站做百度推广多少钱最新国内新闻重大事件
  • shopex 网站搬家蜘蛛seo超级外链工具
  • 成都网站建设排行榜完整的社群营销方案
  • 网站建设首选沈阳高端网站建设厦门网页搜索排名提升
  • 网站选项按钮拼多多seo搜索优化
  • 如何做网站咨询苹果cms永久免费建站程序
  • 做外贸实用网站百度推广入口登录
  • 自己做网站的各种代码网络优化器下载
  • asp动态网站设计百度导航最新版本
  • 企业注册视频号seo难不难学
  • 石家庄云图网站建设海外seo推广公司
  • 网站建设优秀网站建优化网站排名茂名厂商
  • 初中学生做那个的网站合肥seo优化外包公司
  • 专业网站优化报价西安百度推广公司
  • 网页设计师岗位个人简历模板佛山企业用seo策略
  • qq刷赞网站怎么做的最新app推广
  • 网站建设公司如何规避风险搜狐财经峰会
  • 网站怎做湖州网站seo
  • 泌阳县网站建设互联网营销策划方案