2011-04-14 81 views
2

我看到使用XSS乾淨的Kohana的舊版本 http://docs.kohanaphp.com/general/securityXSS在Kohana的潔淨3.1

但如何的文檔中的Kohana 3.1 使用htmlpurifier 和

$this->input->get('my_var','default_value', true); 
+0

你永遠需要從中獲取修改數據。您需要在使用HTML :: chars()輸出期間清理數據。並直接使用'$ _GET'訪問get變量。 – zerkms 2011-04-14 12:21:48

+0

'$ this-> request-> query()'更好;) – biakaveron 2011-04-14 12:42:12

+0

@biakaveron:或'$ this-> request-> param()'。由於某種原因,從未使用過它。我的錯。 – zerkms 2011-04-14 13:09:36

回答

14

拉斯穆斯的替代實現這一提議移除來自Kohana的XSS黑名單爲了逃避輸出htmlspecialchars() - HTML::chars()或使用HTML Purifier,以防您真的需要讓一些HTML進入。

從3.1開始,缺省情況下,安全方法沒有xss_clean()方法,您必須安裝shadowhand's HTMLpurifier模塊來保護輸入字符串(通過從github添加子模塊,將其放入模塊並在啓動時啓用它)。

模塊本身將覆蓋默認安全類,並添加使用HTMLpurifier進行轉義的xss_clean()方法。還有一個模塊的配置文件,您可以在應用程序級別設置所有內容。沒有輸入轉義是由於許多原因「自動」完成的;開銷,一致性等

按要求是相當多在這個版本重寫相匹配的RFC 2616,並獲得更強大HMVC,你會訪問您的查詢字符串Request::query() [$this->request->query()你的控制器裏面]瓦爾,但仍然沒有逃脫的那一面完成(每個請求可以有它自己的頭,POST,GET等)

最簡單的方法可以讓你逃脫當前POST變量是做:

$safe = Arr::map('Security::xss_clean', $this->request->post()); 

PS 不要在這裏寫的關於$this->request->param()的廢話過分注意,它只是用於訪問匹配的Route參數,而不是GET或POST變量。

+0

+1非常好的答案 – alex 2011-04-16 08:05:30

3

爲Kohana的框架HTMLPurifier模塊:在引導和測試 https://github.com/shadowhand/purifier

負荷,模塊:

$my_test = '<a href="#" onclick="window.location.href = \'http://google.com\'"></a>'; 
echo Security::xss_clean($my_test); 
+0

你真的知道PHP,你通過什麼方法? – Kemo 2011-04-16 15:52:30

+0

echo Security :: xss_clean($ my_test); – 2011-04-16 16:46:28

+0

你應該在你的回答中寫下:) – Kemo 2011-04-16 22:49:00