2013-11-01 210 views
1

我已經開發了CakePHP的,什麼我發現在我的應用程序存儲的XSS攻擊的應用程序。爲了處理這種攻擊,我在我的應用程序中添加了Sanitizing::clean,該應用程序將特殊字符轉換爲HTML代碼。CakePHP的:防止XSS攻擊

但是,如果在鏈接$this->Html->link中使用了任何已過濾的字符串,則該字符串會再次由於cakephp中的默認escape=true而被編碼。 & LT變成&放大器:LT導致&的LT而不只是<

可能的解決方案是增加在$this->Html->linkescape=false,但我已創建的應用程序,以便有太多的地方html->link存在,所以它不會是有效率地去到處改變。

如果有任何其他解決方案存在請幫助?

+0

你的做法是錯誤的。不要使用Sanitize類。只需使用'h()'來代替。參見[CakePHP的安全性(http://www.dereuromark.de/2010/10/05/cakephp-security/) – mark

+0

我用H()也...還是同樣的事情正在發生。特殊字符再被編碼時編碼的文本使用$這個 - > HTML的「鏈接因逃逸的默認行爲=真.. – Vicky

+0

http://stackoverflow.com/questions/6786789/cakephp-avoid-xss -attack-保持最易用性的使用-的蛋糕許多人似乎都認爲這是最好的存儲數據不乾淨,然後確保你永遠都不會顯示出來。然後,Html Helper的默認轉義設置將處理鏈接上的跨站點腳本問題。 – Kai

回答

2

製作一個像MyHtmlHelper這樣的自定義幫助程序,它擴展了HtmlHelper並覆蓋了link()方法。

在您的控制器中,包括使用別名功能(如public $helpers = array('Html' => array('className' => 'MyHtmlHelper'));),因此$this->Html在視圖中將使用您的自定義幫助程序的實例,您不必在視圖文件中進行任何更改。