php代码审计--sql注入

sql注入是web安全中最常见,也是平常中危害最大的漏洞。

最近在学习代码审计,拿自己审核的一段代码做个笔记。

1、sql语句拼接可能引起sql注入

很多偷懒的程序员对于没有过滤的参数,直接将其拼接到sql语句中,可能导致命令执行。

如:$sql = "select count(*) as qty from t_user where f_uid='"+$userAccount+"' and f_password='"+$password+"'";

造成sql注入时的sql语句就变成了select count(*) as qty from t_user where f_uid='admin'--'and f_password=***;

2、强制转换也不能全部阻挡住sql注入

有一部分程序员会有一定的安全意识,对变量会进行强制转换来进行过滤。

如:$sql = sprintf("select count(*) as qty from t_user where f_uid='%d' and f_password='%s'",$userAccount,$password);

但是,这种过滤是不能挡住sql注入的,主要是因为userAccount会被强制转换成整型也就是%d,但是password所传过来的参数并不会变更,

因为password所在的位置为字符串。

总结:预编译是所有sql注入的终结防御,荆轲刺秦王。

原文地址:https://www.cnblogs.com/ermei/p/5684087.html