baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.4k stars 4.31k forks source link

[功能改进]: 描述 OrderItem能否支持安全模式不进行防注入的替换 #6448

Closed btown021 closed 2 weeks ago

btown021 commented 2 months ago

确认

功能改进

image

如图 OrderItem在创建时 替换了Pattern.compile("'|\"|\<|\>|&|\|\+|=|#|-|;|\s|\t|\r|\n") 的内容,导致部分逻辑不能实现,我在使用反射修改 OrderItem 对象的 column 属性后代码正常运行 , 目前orderItem 除反射外无法正常跳过替换 能否加入安全模式 主动跳过该替换 如加入方法 public OrderItem setColumnSafe(String column) { // 正常的创建逻辑 但是不替换 ‘’ “ ” 等有Sql注入问题的字符 }

参考资料

No response

zshnb commented 1 month ago

+1,尤其是postgresql默认会把sql中的列名变小写,如果表中的列名是大写就会很麻烦

btown021 commented 1 month ago

+1,尤其是postgresql默认把sql中的列名变小写,如果表中的列名是大写就会很麻烦

我现在是通过反射的方式解决的,OrderItem 只有创建的时候会进行替换,可以反射修改里面内容

YonChun commented 1 month ago

+1 刚升级了一下版本,发现了这个问题,这样确实防止了SQL注入的问题,但是我认为这个配置应该是灵活可控的

btown021 commented 1 month ago

+1刚升级了一下版本,发现了这个问题,这样确实防止了SQL注入的问题,但是我认为这个配置应该是灵活可控的

是这样的,灵活了过后可以利用Sql的函数实现更多的东西,同时调用者也会保证Sql的安全性问题。 现在还是只能通过反射去解决

qmdx commented 2 weeks ago

你们可以重写(如果被 SQL 注入自行负责),如下:

page.setOrders(Arrays.asList(new OrderItem() {

          @Override
          public boolean isAsc() {
              return true;
          }

          @Override
          public String getColumn() {
              return "\"字段\"";
          }
 }));