輸入校驗
網站代碼裏寫入過濾sql特殊字符的代碼,對一些特殊字符進行轉化,比如單引號,逗號,*,(括號)AND 1=1 、反斜槓,select union等查詢的sql語句都進行安全過濾,限制這些字符的輸入,禁止提交到後端中去。
/**
* SQL Inject Filter
*/
public function inject_filter($str, $is_urldecode = FALSE) {
if(is_array($str)) {
while (list($key) = each($str)) {
$str[$key] = $this->inject_filter($str[$key]);
}
return $str;
}
if(empty($is_urldecode)){
$str = rawurldecode($str);
}
if(preg_match('/sleep\(\d{1,}\)/i',$str)){
return 'sql injection';
}
if(preg_match('/select\s(.*)from\s(.*)/i',$str)){
return 'sql injection';
}
if(preg_match('/insert\s+into\s(.*)\((.*)\)\s+values\s+\((.*)\)/i',$str)){
return 'sql injection';
}
if(preg_match('/delete\s+from\s(.*)/i',$str)){
return 'sql injection';
}
if(preg_match('/create\s+table\s+(.*)\((.*)\)/i',$str)){
return 'sql injection';
}
if(preg_match('/drop\s+table\s+(.*)/i',$str)){
return 'sql injection';
}
if(preg_match('/\s+or\s+(.*)\=(.*)/i',$str)){
return 'sql injection';
}
return $str;
}
預編譯動態參數
使用prepared statements語句綁定變量來執行SQL字符串
權限控制
在創建一個SQL數據庫的用戶帳戶時,要遵循最低權限法則
nginx攔截
apache防火牆,nginx防火牆,都有內置的過濾sql注入的參數,當用戶輸入參數get、post、cookies方式提交過來的都會提前檢測攔截。
php攔截
開啓php的魔術模式,,magic_quotes_gpc = on即可,當一些特殊字符出現在網站前端的時候,就會自動進行轉化,轉化成一些其他符號導致sql語句無法執行。