1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| 防护一:sql语句不在使用${}表达式,改为#{} <select id="getBlogById" resultType="Blog" parameterType=”int”> SELECT id,title,author,content FROM blog WHERE id=#{id} </select>
编译后的SQL:SELECT id,title,author,content FROM blog WHERE id = ? (能避免sql注入)
<select id="getBlogById" resultType="Blog" parameterType=”int”> SELECT id,title,author,content FROM blog WHERE id=${id} <!--假如id= 3 --> </select>
编译后的SQL:SELECT id,title,author,content FROM blog WHERE id = 3 (无法避免sql注入)
SQL注入只能对编译过程起作用 #{}:相当于JDBC中的PreparedStatement ${}:是输出变量的值
#{}是经过预编译的,是安全的; ${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
防护二:采用阿里的druid数据连接池,添加如下配置 <!-- 配置监控统计拦截的filters,和防sql注入 --> <property name="filters" value="stat,wall" />
防护三:使用正则表达式过滤输入参数
|