sql中 # 和 $ 的区别

  三:sql中 # 和 $ 的区别:  #可以防止sql注入
                    #是占位符,在DBMS才进行替换,在预编译时使用?占位,能防止sql注入;       

delete from user where name = ?;

而传入的参数将会经过PreparedStatement方法的强制类型检查和安全检查等处理,最后作为一个合法的字符串传入。

在#{}预处理之后可以预防SQL注入传入username 为 xiaoming‘or’1=1,使用#{},经过sql动态解析和预编译,会把单引号转义为 ’ 那么sql最终解析为:

delete from user where name = "xiaoming\' or \'1=1 ";

 $是拼接符,在动态sql解析阶段将会进行变量替换,有可能会引发sql注入

${}这种方式只是简单的字符串替换,在动态SQL解析阶段将会进行变量替换,假如传递的参数为xiaoming,
最终处理结果如下:
delete from user where name = 'xiaoming' ;

预编译之前就已经被替换,有被注入的风险。如果传入的为那么使用{} 处理后直接替换字符串的sql就解析为:
delete from user where name = 'a' or '1=1' ;

     这样整个表的数据就会被干掉引发生产事故

发布了27 篇原创文章 · 获赞 0 · 访问量 813

猜你喜欢

转载自blog.csdn.net/u013232219/article/details/104406619