2011-06-14 70 views
1

是否Codeignited自動清理和保護表單輸入(對於DB注入和XSS等),我可以使用如下所示?CodeIgniter表單輸入安全性

$this->input->post('name') 

還是我需要自己保護它?有什麼更好的方法來做到這一點?謝謝。

+0

確保它在什麼情況下?針對XSS?針對SQL注入? – alex 2011-06-14 05:13:06

+0

@alex,對於SQL注入和XSS等都是這樣。 – Roman 2011-06-14 05:15:02

回答

2

不,它不會給你100%的安全。

特別是因爲它依賴於其中輸入。 如果您擔心XSS攻擊,您可以傳遞一個TRUE作爲第二個參數,並將XSS過濾器應用於該輸入(但請注意,由於資源方面的操作相當成功,因此不要大量使用)

$this->input->post('name', TRUE) 

在USERS手冊上閱讀關於Input class的更多信息。

如果輸入進入數據庫,比你要麼$ this->db->escape()(和它的其他表兄弟)手動逃避它,或者你使用query bindings或者,速度和簡單起見,你可以依靠的Active Record Class哪些自動轉義所有輸入查詢的數據。
(這個,如果你不想使用自定義轉義,用mysql_real_escape_string,或mysqli_和PDO準備語句)

編輯:

是的,XSS過濾器可在CONFIGS裝,但這是一個非常深入和徹底的過程,佔用了大量的資源。正如他們所說:

Note: This function should only be used to deal with data upon submission. 
It's not something that should be used for general runtime processing since it requires 
a fair amount of processing overhead. 

請注意,您也有跨站點請求僞造防護(CSRF),更多here

如果你擔心表演,你可以在html頁面輸出$ str之前使用php原生的htmlentities($str, ENT_QUOTES);

+0

謝謝,在手冊中提到XSS過濾可以通過$ config ['global_xss_filtering'] = TRUE'啓用。你是否認爲這應該避免因爲資源? – Roman 2011-06-14 05:18:32

+0

@羅曼看看它的代碼,它做了很多檢查和控制,所以是的,它相當的過熱,你應該明智地根據情況使用它。 – 2011-06-14 05:25:24

+0

謝謝你。是否在啓用'$ config ['csrf_protection'] = TRUE;'時有任何問題,因爲它們沒有給出任何警告。 – Roman 2011-06-14 05:32:58

3

在應用程序的「config」文件夾「的config.php」,有一個設置爲您啓用全局XSS過濾:

$config['global_xss_filtering'] = FALSE; 

post() function的第二個參數指定是否應用XSS篩選到該行:

$this->input->post('name', TRUE); 

最後,你可以使用form validation class驗證數據:

$this->form_validation->set_rules('name', 'Name', 'xss_clean'); 

您應該避免使用全局XSS過濾,因爲它非常耗費資源。

+0

感謝您的回答。是否真的啓用全球XSS過濾使用資源成本高昂?另外,如果是全局配置文件,不會自動應用?我是否仍然需要傳遞TRUE參數? (例如'$ this-> input-> post('name',TRUE); '。 – Roman 2011-06-14 05:22:55

+0

@Roman如果你在全局應用它,你將不需要在本地執行 – 2011-06-14 05:24:30

+0

@Roman @Damien說,你不需要''this-> input-> port('name')的',TRUE'位,但它肯定是昂貴的,應該避免,因爲一切都會經過它,包括cookies,GET和POST參數,即使是你不想在整個過濾器中使用的那些。 – 2011-06-14 05:27:36