小组PHP
  • mysql 防止字符串注入是否仅过滤引号即可

    2016/01/12 wf 6 评论

在一些接收用户输入的字符串sql语句中,如:$sql = “select * from t where title = ‘{$_GET[‘title’]}'”;

title接收的是任意用户输入,如果用户输入了 ‘ or 1=1 #,那么sql就会变成 select * from t where title = ” or 1=1 #’,后的单引号会被注释形成sql注入。

假如我用此方法过滤:$_GET[‘title’] = htmlspecialchars($_GET[‘title’], ENT_QUOTES);

sql语句执行报错,看似已解决sql注入问题,那么该方案是否可行?why

2 收藏


直接登录
最新评论
  • 黯然_ 无业游民 2016/01/12

    不行,所有黑名单的方式防止sql注入都是不安全的。去看看《白帽子讲web安全》里面关于sql注入的你就明白了。

    • wf php、前端 2016/01/12

      hi,目前情况是用户输入内容会被单引号包围进库查询,
      假如所有的注入语句都在引号内,那么会被当成字符串进行查询也就不会有注入问题,
      所以我提的问题是在该特定情形下是否可以仅过滤引号作为临时方案。
      (ps:生产问题啊 严重 严重~~ 拜托 拜托~~)

  • 画梦 iOS工程师 2016/01/12

    Ado.net里面的SqlParameter可以解决这个。

    • wf php、前端 2016/01/12

      嗯,pdo里用绑定参数形式也可以过滤,但目前我的问题不好用pdo改