SQL 注入原理以及防治策略(2)

Mybaits:

#{}:相当于JDBC中的PreparedStatement

${}:是输出变量的值

简单说,#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

所以我们尽量要少用${} ,如果使用,需要再代码中做好校验

java代码:

   可以采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入

正则表达式可以参考为:

  str.replaceAll(".*([';]+|(--)+).*", " ");


Jpa:

标准JPA,基本上不会存在SQL注入风险,等价于 Mybaits 的#{}.

采用原生SQL查询同样需要注意SQL注入风险。

你可能感兴趣的:(SQL 注入原理以及防治策略(2))