如果有效地防SQL注入

輸入校驗

網站代碼裏寫入過濾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語句無法執行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章