CI(codeigniter)如何防止sql注入 |
||
發表時間: 2012-11-30 06:52:12 By:雪潔 瀏覽次數:6009 | ||
通常狀況下咱們只要使用AR和開啓xss就能夠防止了。實現方法:php 1.開啓xssmysql
2.使用ARweb 也許你會問AR是什麼?參考ci手冊,請看下圖:sql 相信你應該明白了。數據庫 那麼有的朋友會說爲何我都用了仍是有注入呢?那麼你就要分析其餘方面的漏洞了。安全 因 爲若是你所有使用了AR,那麼你傳進去的都是些「表名,條件」之類的參數,若是是sql注入的話這些參數傳進去會是失效的,比 如:$this->db->get('table');若是把table換成"select * from admin"它會執行成功嗎?以上只是我的想法,不正確的還請指正。xss |
如下一些建議可供參考。函數
1.不管如何在獲取參數之時都建設將 xss過濾打開,好比codeigniter
其中的true就表明打開了 xsspost
2.不要直接使用$_GET等相似方式得到數據,若是這樣獲取數據的話將不會被xss過濾
3.CI的數據在入庫以前不只不會增長轉義字符,並且還會取消它
好比 Input.php 裏面的這麼一段
4.若是你使用 $this->db->query('YOUR QUERY HERE'); 直接查詢數據庫,那麼你須要使用 $this->db->escape('fileld_name') 語句進行轉義,這樣才安全。
escape函數其實是調用的escape_str這個函數,只不過escape增長了一層對數據類型的判斷,看到了沒(注意:它可沒判斷數值類型的喲,因此說若是傳入的數據是數值型的話,你得本身動手判斷一下了),下面這兩個東東就是進行轉義的傢伙了。
5.不管如何你都必需要對數值型數據手動判斷,這個得你本身作,好比用個 (int)之類的強制轉換。
對於使用 Active Record 操做的數據你能夠偷懶不用 $this->db->escape('fileld_name') 轉義了(事實上你若是你使用了反而會被多增長些引號之類的東西),由於它會幫你搞定,但數值型你仍是要本身判斷。
若是你使用 Active Record 操做的數據,那麼其實CI是在數據快要入數據庫的時候進行轉義的,因此在前面的不少地方你都看不到addslashes之類函數的身影,這樣作也是有好處的你看看escape_str函數裏對轉義函數的判斷就知道了。
8.上面我一再強調數值型數據必須得本身搞定,實際上若是你的SQL語句中對數值型加了單引號的話,應該問題不大,不過仍是建議處理一下。