SQL查询的安全方案

使用预处理语句防SQL注入

如:

1
2
3
4
5
// sql语句
DELETE FROM user WHERE user_id={$_GET['user_id']};

// 当$_GET['useR_id'] = "?user_id=1OR1=1"就会生成
DELETE FROM user WHERE user_id=1OR1=1;

写入数据库的数据要进行特殊字符的转义

查询错误信息不要返回给用户,将错误记录到日志

MYSQL的其他安全设置

  • 定期做数据备份
  • 不给查询用户root权限,合理分配权限
  • 关闭远程访问数据库权限
  • 修改root密码,不用默认密码,使用较复杂的密码
  • 删除多余的用户
  • 修改root用户的名称
  • 限制一般用户浏览其他库
  • 限制用户对数据文件的访问权限

注:PHP端尽量使用PDO对数据库进行相关操作,PDO拥有对预处理语句很好的支持的方法,MySQLi也有,但是可扩展性不如PDO,效率略高与PDO,MySQLi函数在新版本中已经趋向于淘汰,所以不建议使用,而且它没有更好的支持预处理的方法。