是否Codeignited自動清理和保護表單輸入(對於DB注入和XSS等),我可以使用如下所示?CodeIgniter表單輸入安全性
$this->input->post('name')
還是我需要自己保護它?有什麼更好的方法來做到這一點?謝謝。
是否Codeignited自動清理和保護表單輸入(對於DB注入和XSS等),我可以使用如下所示?CodeIgniter表單輸入安全性
$this->input->post('name')
還是我需要自己保護它?有什麼更好的方法來做到這一點?謝謝。
不,它不會給你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);
。
在應用程序的「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過濾,因爲它非常耗費資源。
感謝您的回答。是否真的啓用全球XSS過濾使用資源成本高昂?另外,如果是全局配置文件,不會自動應用?我是否仍然需要傳遞TRUE參數? (例如'$ this-> input-> post('name',TRUE); '。 – Roman 2011-06-14 05:22:55
@Roman如果你在全局應用它,你將不需要在本地執行 – 2011-06-14 05:24:30
@Roman @Damien說,你不需要''this-> input-> port('name')的',TRUE'位,但它肯定是昂貴的,應該避免,因爲一切都會經過它,包括cookies,GET和POST參數,即使是你不想在整個過濾器中使用的那些。 – 2011-06-14 05:27:36
確保它在什麼情況下?針對XSS?針對SQL注入? – alex 2011-06-14 05:13:06
@alex,對於SQL注入和XSS等都是這樣。 – Roman 2011-06-14 05:15:02