Home | 简体中文 | 繁体中文 | 杂文 | Search | ITEYE 博客 | OSChina 博客 | Facebook | Linkedin | Email

14.3. 数据库开发规范

14.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)"; 				
			

14.3.2. 查询规范

禁止使用 * 例如:

select * from member;
			

查询记录是否存在

select count(id) from member where username = :username
			

14.3.3. 结果集使用注意事项

错误的使用使方式

print($row[0]);
print($row[1]); 
			

这种方式,有可能当数据库结构改变,增加字段,字段顺序发生变化,输出数据都会出错

comments powered by Disqus