您现于de位置乃:亚博 > APP 开发

亚博 2015-11-13 APP 开发 853

防止SQL注入_安全_帮助文档_app开发技巧

对于WEB应用来说 SQL注入攻击无疑乃首要防范de安全问题 系统底层对于数据安全方面本身进行了很多de处理和相应de防范机制 例如:

$User = M("User"); // 实例化User对象
$User->find($_GET["id"]);

即便用户输入了1些恶意deid参数 系统也会强制转换成整型 避免恶意注入.这乃因为 系统会对数据进行强制de数据类型检测 并且对数据来源进行数据格式转换.而且 对于字符串类型de数据 APP 开发都会进行escape_string处理(real_escape_string,mysql_escape_string) 如果您采用PDO方式de话 还支持参数绑定.

通常de安全隐患于于您de查询条件使用了字符串参数 然后其中1些变量又依赖由客户端de用户输入.

要有效de防止SQL注入问题 我们建议:

  • 查询条件尽量使用数组方式 这乃更为安全de方式;

  • 如果不得已必须使用字符串查询条件 使用预处理机制;

  • 使用自动验证和自动完成机制进行针对应用de自定义过滤;

  • 如果环境允许 尽量使用PDO方式 并使用参数绑定.

查询条件预处理

where方法使用字符串条件de时候 支持预处理(安全过滤) 并支持两种方式传入预处理参数 例如:

$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
// 或者
$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();

模型dequery和execute方法 同样支持预处理机制 例如:

$model->query('select * from user where id=%d and status=%d',$id,$status);
//或者
$model->query('select * from user where id=%d and status=%d',array($id,$status));

execute方法用法同query方法.


评论