我新的Web應用程序的安全性。我正在Cakephp開發一個應用程序,我的一個朋友告訴我有關跨站請求僞造(CSRF)和跨站點腳本(XSS)攻擊等等,不知道還有多少人在那裏。CakePHP的安全
我需要了解如何讓CakePHP的捍衛我的web應用程序對這些有所幫助。我們的預算很低,我們現在不能聘請安全顧問。我們仍在開發應用程序並計劃在本月底發佈。所以想照顧的最初的東西,可以幫助我站在聯合國砍死;)
我新的Web應用程序的安全性。我正在Cakephp開發一個應用程序,我的一個朋友告訴我有關跨站請求僞造(CSRF)和跨站點腳本(XSS)攻擊等等,不知道還有多少人在那裏。CakePHP的安全
我需要了解如何讓CakePHP的捍衛我的web應用程序對這些有所幫助。我們的預算很低,我們現在不能聘請安全顧問。我們仍在開發應用程序並計劃在本月底發佈。所以想照顧的最初的東西,可以幫助我站在聯合國砍死;)
沒有(也不可能是)一個工具,你可以部署,然後再也不必考慮安全性。通過阻止有效輸入,部署像CakePHP的Sanitize::clean
這樣的「反XSS」黑客攻擊會阻止用戶訪問,同時還不一定會使應用程序更安全。輸入過濾黑客最多隻是一個混淆的措施,而不是解決安全漏洞的問題。
爲了有一個安全的Web應用程序,你必須寫一個安全的Web應用程序,從地上爬起來。這意味着,主要是當你將字符串從一個上下文轉換到另一個上下文時,注意細節。特別是:
任何時候你寫一個字符串,HTML文本內容或屬性值,HTML轉義它(htmlspecialchars()
),以避免HTML注入導致XSS。這不僅僅是可能包含攻擊的用戶輸入問題,它是將純文本放入HTML的正確方法。
如果您正在使用HTML輔助方法,他們應該是默認的(除非您關閉escape
)照顧這些元素的HTML轉義的;非常不幸的是,CakePHP教程包含了在HTML助手之外的文本中將未轉義的字符串回送到HTML中的錯誤做法。
無論何時您使用字符串值創建SQL查詢,SQL轉義它(爲您的數據庫提供適當的函數,如mysql_real_escape_string
)。
如果您正在使用CakePHP的ORM,而不是寫你自己的SQL,你不必擔心這一點。
避免使用用戶輸入(例如文件上載名稱)來命名文件系統上的文件(改爲生成乾淨的唯一ID)或作爲system()
命令的任何部分。
包括Security組件添加表單提交令牌方案,該方案將阻止CakePHP生成的表單上的XSRF。
蛋糕可以確保相對容易(比起編寫自己的PHP腳本): http://www.dereuromark.de/2010/10/05/cakephp-security/
感謝安全速成班。使用HTML助手時的一個問題不會 - htmlspecialchars()和mysql_real_escape_string()自動發生? – 2010-10-06 09:26:49
使用HTML助手時,'htmlspecialchars()'默認完成,是的,除非你設置''escape'=> false'。 'mysql_real_escape_string()'不是,因爲它是沒有任何意義的是SQL轉義的HTML輸出。在與數據庫交談時需要這樣做(並且如果使用ORM,將自動完成)。當你輸出沒有幫助器的內容時,需要'htmlspecialchars()',比如內聯的非表單內容。例如。 '
你好,<?php echo htmlspecialchars($ name); ?>!
'。 – bobince 2010-10-06 09:42:48「非常不幸的是,CakePHP教程包含了在HTML幫助器之外的文本中將未轉義的字符串轉換爲HTML的不良做法」我同意 - 這種方式很多人都沒有意識到這非常糟糕。 – mark 2010-10-06 14:07:39