25.3.1. 使用pdo_mysql替代mysql
禁止通过字符串链接拼接sql语句,极容易出现注入漏洞
错误的写法:
$sql = "select * from table where id='".$id."'"; $sql = "INSERT INTO fruit(name, colour) VALUES ('".$name."', '".$colour."')";
$sql = "select * from table where id=".$id; 这种写法如果id没有做检查可以100%注入成功
正确的写法
$sql = "select * from table where id=?"; $sql = "INSERT INTO fruit(name, colour) VALUES (?, ?)";
使用“?”优势不便于我们排查调试有可能你传入的数字不对称,我们建议使用bindParam() 和 bindValue()
$sql = "select * from table where id = :id"; $sql = "INSERT INTO fruit(name, colour) VALUES (:name, :colour)";
25.3.2. 查询规范
禁止使用 * 例如:
select * from member;
查询记录是否存在
select count(id) from member where username = :username
25.3.3. 结果集使用注意事项
返回数据库查询结果有几种形式
数组形式
Array ( [0] => banana [1] => yellow ) Array ( [NAME] => banana [COLOUR] => yellow )
对象形式
Object ( Obj->NAME Obj->COLOUR )
正确的使用方式
print($row['name']); print($row->name);
错误的使用使方式
print($row[0]); print($row[1]);
这种方式,有可能当数据库结构改变,增加字段,字段顺序发生变化,输出数据都会出错
原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。
时间: 2024-10-12 10:02:09