SQL注入

作者: 黄靠谱 | 来源:发表于2019-01-28 12:18 被阅读41次

可能引发注入的场景

  1. SQL里面直接拼接了SQL
  • 查询参数里面直接拼接SQL,没有做处理(直接把查询关键字拼到SQL里面了, 比如 name= ' OR 1=1 --'
  • 相关的字段直接拼接SQL,没有做处理(根据自定义字段进行条件查询,Mybatis SQL拼接,或者JDBC原生的SQL拼接)
  1. 存错过程里面直接调用的SQL

解决方案

  1. 框架上做预处理(PreparedStatement、Mybatis #取参数、Hibernate)避免直接用外部传入值拼接SQL

  2. 如果必须拼接SQL时

  • 做正则表达式匹配过滤,过滤关键字(delete 、update、 or、 drop、truncate等等)
  • 如果有数据格式的话,先做一下格式验证,比如参数必须是int,那么check这个参数是否合法
  • 不要在web端直接引用SQL语句,而是通过在后台根据条件进行转换,比如 字段值 =1 name字段,字段值 =2 age字段,那么传入到后台之后, 1 -->name, 2--> age,避免用户直接修改html代码来攻击
  1. Mysql高版本默认不支持多语句执行,但是配置了 &allowMultiQueries=true就要特别注意了,允许一句SQL语句后面拼接 update 、delete等语句。但是在存储过程的调用中,就需要额外注意了
  2. 在查询SQL的service方法里面添加 ReadOnly 的事务配置,避免修改数据的发生

相关文章

网友评论

      本文标题:SQL注入

      本文链接:https://www.haomeiwen.com/subject/qwhajqtx.html