PHP 開發中有效防禦 SQL 插入式攻擊有哪些好方法?

來源:互聯網
上載者:User

回複內容:

沒有編譯就沒有注入,避免提交上來的資料被編譯就可以了, 參數綁定就是避免提交資料被編譯的方法。使用PDO或者MySQLi,有很多封裝好的方便的Class。
例如使用PHP-PDO-MySQL-Class · GitHub (這個Class使用上比較類似Python的MySQLdb)的話,這樣就是安全的:
$DB->query("SELECT * FROM fruit WHERE name IN (?)",array($_GET['pm1'],$_GET['pm2']));$DB->query("SELECT * FROM users WHERE name=? and password=?",array($_GET['name'],$_GET['pw']));?>
防SQL注入最好的方法就是千萬不要自己拼裝SQL命令和參數, 而是用PDO的prepare和bind.
原理就在於要把你的SQL查詢命令和傳遞的參數分開:
> prepare的時候, DB server會把你的SQL語句解析成SQL命令.
> bind的時候, 只是動態傳參給DB Server解析好的SQL命令.

其他所有的過濾特殊字元串這種白名單的方式都是浮雲.僅僅防止sql注入的話,使用mysqli或者PDO的先行編譯就行了。用架構的話,要留意架構內部是怎麼處理的。拼接sql語句這種做法早就該進曆史的垃圾堆了。

此外PDO的先行編譯有個bug,在5.3.6之前還是會預設調用mysql_*進行拼接,需要設定$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);。prepare && bind 一下即可。簡單來說,僅僅對於PHP程式的SQL注入,對輸入輸出的資料進行安全過濾是最主要的方法。
當然說起來簡單,真正要做到很複雜,要考慮的細節和因素很多,包括編碼、類型、前後邏輯等等,一個處理不慎,反而會弄巧成拙。
因此要做到程式儘可能的安全,需要程式員具有一定的安全意識和知識,從程式的最底層構建上就把安全因素考慮進去。
個人認為國內PHP安全圈的水準還是相當高的,各方面的資料也很多,推薦兩個網站,裡面有很多相關的資料,有興趣的可以參考學習下:
http://80vul.com
http://bbs.wolvez.org 一律不能直接使用外來的參數,不要直接構造查詢語句,使用statement進行參數填充等等1、不要隨意開啟生產環境中Webserver的錯誤顯示。
2、永遠不要信任來自使用者端的變數輸入,有固定格式的變數一定要嚴格檢查對應的格式,沒有固定格式的變數需要對引號等特殊字元進行必要的過濾轉義。
3、使用先行編譯綁定變數的SQL語句。
4、做好資料庫帳號許可權管理。
5、嚴格加密處理使用者的機密資訊。

來自 「Web安全之SQL注入攻擊技巧與防範」。給兩個辦法,匈牙利命名法、注入嘗試探測

別瞧不起匈牙利命名法,這貨的原意可不是你以為的傻瓜一樣在變數名後加上類型名。真正的做法是:未做escape過濾的字串命令按照你自己的習慣命名,escape後的字串加上類似_f或_ss這樣的suffix。習慣後在寫代碼的時候自然就會要求傳入的字串都是過濾過的。

注入嘗試探測則比較簡單:作為駭客來說如果需要進行攻擊,會進行多次注入嘗試,期間幾乎可以肯定會構造出一個無效的sql語句,執行時就會報錯了。自己寫個資料庫的query函數進行封裝,如果發現有執行無效的sql語句則通過郵件或其他形式進行警示。

當然…擔心SQL注入,都是用拼接字串做SQL查詢的土鱉程式員。正常的程式員會去找個ORM用。我採用的方法是:
1.對團隊成員進行安全培訓,找出最常見的攻擊方法逐個指導代碼內屏蔽方式
2.用nginx之類的反向 Proxy進行url參數過濾,基本能擋住90%的攻擊
3.對磁碟檔案進行高度許可權設定
4.計劃任務的指令碼對程式原始碼定期(比如每小時)執行遍曆搜尋,一般水平的攻擊,都逃不過這個排查
5.對nginx過濾出的危險url進行程式自動分析,對於超過閾值的ip直接防火牆屏蔽
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.