可注入的sql: $id=$_REQUEST['id']; $name=$_REQUEST['name']; select * from members where id=$id; select * from members where id='".$id."'"; select * from members where name='".$name."'"; 不可注入: select * from members where id='".intval($id)."'"; select * from members where name=".sql_escape($name);
一般参数化或者存储过程就ok
可注入的sql:
$id=$_REQUEST['id'];
$name=$_REQUEST['name'];
select * from members where id=$id;
select * from members where id='".$id."'";
select * from members where name='".$name."'";
不可注入:
select * from members where id='".intval($id)."'";
select * from members where name=".sql_escape($name);
过滤用户的输入,限制类型和大小,sql语句参数化。另外也要考虑webservices的参数漏洞。
使用JavaEE的PreparedStatement接口可以很方便的防止SQL注入,各个DataBase厂家的驱动都实现的不错。Druid这个连接池也有帮你过滤SQL,防止注入。jenkins可以配合一些插件,比如findBugs来查找有可能的SQL注入行为。
1/前端输入使用jsoup过滤。jsoup还可以自定义各类过滤规则。
2/使用ibatis之类的orm框架,绑定SQL执行的参数。