2011-06-11 119 views
0

爲什麼CodeIgniter的XSS過濾器只能通過正則表達式對特定事件做出反應,而不是首先對所有輸入進行清理,而不管內容是否受到污染?此外,這是爲什麼輸入時並沒有輸出完成(像它應該是什麼?)爲什麼CodeIgniter的XSS過濾器不乾淨?

回答

8

爲什麼CodeIgniter的XSS過濾器只有通過具體的事情,而不是消毒放在首位所有輸入的正則表達式的反應不管內容是否被污染?

這沒有多大意義。如果沒有先檢查一下,我們如何判斷是否有「污染」?

通過CI的xss_clean()的定義,我們不總是要淨化輸入。正如你所提到的那樣,這是重要的輸出 - 這就是我們需要注意XSS atacks的地方。如果我們總是用CI的xss_clean()「清理」輸入,那麼我怎樣才能在我的博客上發佈javascript或PHP代碼示例,或者讓用戶在評論中這樣做?它最終會變得[removed]

而且,爲什麼輸入過程中完成這件事,而不是輸出(像它應該是什麼?)

你必須啓用全局XSS過濾器在您的CI配置的選項,這將請在$_POST$_GET$_COOKIE之前自動運行xss_clean(),然後才能開始使用它。這是可以保護你免受自己損害的最低級別,但是該選項總是可用來明確清理數據。例如:

// With the Input class on $_POST data 
$this->input->post('username', TRUE); // Second parameter runs xss_clean 

// Using the Security class on any data 
$this->security->xss_clean($username); 

// Using the Form Validation class to automatically clean the input 
$this->form_validation->set_rules('username', '', 'xss_clean'); 

既然你仍然可以簡單地使用$_POST['username']相反,通過啓用全球過濾器將已經xss_cleaned你。這是一種懶惰的方式,不幸的是,一旦這些全局變量被清除,就無法撤消它。

如果您已經意識到XSS攻擊可能發生的時間和地點 - 您可以根據需要輕鬆使用該功能。請記住,這不是而是神奇地使所有數據「安全」,它只是防止一些更惡意的代碼注入。像</div>這樣的更無害的東西將通過此過濾器。你應該始終以適當的方式對使用它的上下文進行顯式消毒。

+0

是否可以打開全局xss篩選器並同時在適用的情況下顯式xss_clean()? – Obay 2012-03-15 06:09:33

+1

如果您正在討論直接使用get,post和cookie:那麼它毫無意義 - 如果全局啓用,篩選器會自動運行這些事情。你仍然應該使用它,只要記住XSS的矢量是可以運行javascript的任何地方。例如,打印到Excel或文本文件時,它不會對您造成傷害。我總是說過濾器*輸出*,而不是輸入。 http://stackoverflow.com/questions/9674848/codeigniter-input-filtering/9675233#9675233 – 2012-03-15 06:57:08

+1

......這樣說,它也不會傷害你做到這一點,如果這就是你想知道的:http: //stackoverflow.com/questions/9714945/is-it-okay-to-repeatedly-xss-clean-data-in-codeigniter – 2012-03-15 07:29:15