如何避免 sql 注入

PreparedStatement(简单又有效的方法)

例如:

最终执行的sql语句打印出来是SELECT * FROM admin WHERE username = '韦小宝' AND password = '\';DROP TABLE tableName;#'

从以上截图就能看出来,由此可见,prepareStatement对象防止sql注入的方式是把用户非法输入的单引号用\反斜杠做了转义,从而达到了防止sql注入的目的

Statement对象就没那么好心了,它才不会把用户非法输入的单引号用\反斜杠做转义呢!

PreparedStatement可以有效防止sql注入,所以生产环境上一定要使用PreparedStatement,而不能使用Statement

当然啦,你可以仔细研究下PreparedStatement对象是如何防止sql注入的,我自己把最终执行的sql语句打印出来了,看到打印出来的sql语句就明白了,原来是mysql数据库产商,在实现PreparedStatement接口的实现类中的setString(int parameterIndex, String x)函数中做了一些处理,把单引号做了转义(只要用户输入的字符串中有单引号,那mysql数据库产商的setString()这个函数,就会把单引号做转义)

使用正则表达式过滤传入的参数

字符串过滤

猜你喜欢

转载自www.cnblogs.com/lzghyh/p/12682770.html
今日推荐