可注入的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)."' "; 從成員中選擇*,其中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)."' ";
從成員中選擇*,其中name=".sql_escape($name);
過濾使用者的輸入,限制類型和大小,sql語句參數化。另外也要考慮webservices的參數漏洞。
使用JavaEE的PreparedStatement介面可以很方便的防止SQL注入,各個DataBase廠商的驅動程式都實現的不錯。 Druid這個連接池也有幫你過濾SQL,防止注入。 jenkins可以配合一些插件,像是findBugs來找出有可能的SQL注入行為。
1/前端輸入使用jsoup過濾。 jsoup也可以自訂各類別過濾規則。
2/使用ibatis之類的orm框架,綁定SQL執行的參數。