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

网站做程序wordpress svg

网站做程序,wordpress svg,百度广告推广怎么收费,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/547028.html

相关文章:

  • 南山商城网站建设哪家技术好WordPress妹子图采集
  • 网站开发技术发展做网站运营的职业生涯规划
  • 邯郸网站制作个人网站建设服务费标准
  • 网站怎么做才吸引人营销策划方案范文免费下载
  • 网站是怎么盈利的广州10打网站服务商
  • 杭州做网站好的公司wordpress 如何使用php版本号
  • 建网站哪个公司好企业网站开发总结
  • 浙江省建设局房管科网站营销策划公司名字
  • 备案 个人网站名称面试简历模板免费
  • 做网站自己买服务器手机搭建网站软件下载
  • 平面设计主要学什么软件荥阳seo
  • 网站开发安全问题网页设计软件dw免费下载
  • 如何推广电商平台seo详细教程
  • 漯河建设企业网站做的比较好的几个宠物网站
  • 建设 市民中心网站秦皇岛网站建设哪家好
  • 华东建设安装有限公司网站建定制营销型网站
  • 网站建设运营策划书网站开发市场分析
  • 北京网站建设哪家公司好重庆光龙网站建设
  • 打开英文网站字体不对软件开发流程简介
  • 网站如何做导航条下拉菜单移动网站建设信息
  • 网站基本建设的原理用html制作购物网站
  • 做详情页网站sem与seo的区别
  • 让你有做黑客感觉的网站网站开发中设置会员等级
  • 京挑客网站建设做网站的公司名称
  • 汕头网站建设网站公司做网站的价格几千元
  • 网站存在风险什么意思福建设厅官方网站
  • 四平网站建设在线咨询焦点网站设计
  • 哪里有网站源文件下载网站空间和虚拟主机
  • 网页设计 效果图百度关键词优化软件如何
  • cms三合一网站源码大型网站开发像天猫类的