mysql 注入问题.

当前情况,手上帮人修改一个非常老的网站,他里面的sql语句都是没有预处理的.
现在我无法做到帮他全部改成pdo,不想那么麻烦,我用正则添加把所有的sql语句中php变量都加上了单引号,并开启了gpc.
现在假如$sql="SELECT * FROM users WHERE username= '$name' ADD pwd='$pwd'";
我觉得这样好像不能注入了.我自己测试是将$name改成xxx'# 其他的都不会.不太懂sql.
请问现在这个还能被注入吗.
如果能,怎么防护?
谢谢

阅读 3.8k
5 个回答

防止sql注入是要改成参数化查询的,而不是拼接sql

采用PDO或者MySQLI预处理,绑定参数或者值的方式才能杜绝SQL注入。

各种高级语言连接mysql的类库应该都会提供用带占位符参数的SQL,实际执行的时候,传入参数值就可以了,这种方式有效的防止sql注入问题。

比如java的。

Connection connection = dataSource.getConnection();  
PreparedStatement selectStatement = connection.prepareStatement("SELECT * FROM T_USER WHERE USER_NAME = ?");  //使用占位符参数
selectStatement.setString(1, "zhangsan"); //替换参数

对sql进行预处理可以避免。

装个安全狗什么的,代码不用改了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题