2010-10-01 16 views
0

我正在重做我們公司的代碼,並且我想要有一個清晰,易於閱讀和合理安全的application.cfm。你將什麼安全腳本/代碼添加到你的application.cfm中?

不,我們沒有使用application.cfc。所以我們不要討論這個問題。

只是想知道你會爲安全性添加什麼腳本。

我使用ColdFusion 8標準版,SQL 2008

這裏是我當前使用的腳本之一,但我想從一些其他的ColdFusion程序員聽到。

​​

謝謝你的時間。

+0

我正在尋找可以防止sql注入,xss,crlf等的腳本。 – crosenblum 2010-10-01 16:44:09

+0

您能否至少解釋爲什麼您不能或不會使用Application.cfc?在這方面你有點敵意。 – 2010-10-01 17:20:07

+0

我不是想敵視敵人。只要我指定我不能使用特定的方法或技術,而不是那些試圖以我需要的方式幫助我的人。他們花更多時間,解釋爲什麼我應該用這種方式,我不能用。如果我很粗魯,我很抱歉。我只是不想進入火焰戰爭......我只是想以特定的方式提供幫助。 – crosenblum 2010-10-01 17:24:58

回答

4

我建議不要嘗試以全球方式捕捉所有內容。無論您的全球保護代碼如何複雜和複雜,無可避免地會出現一些漏洞。

相反,「正確的」(爲了什麼是值得的)方法是消除所有呈現在頁面上(或電子郵件等)的內容 - 在輸出過程中 - 開始其作爲用戶輸入的生命。

這就是說,看看OWASP。他們有很好的庫來保護您免受各種攻擊,包括您提到的各種攻擊(sqli,xss,crlf)。我的一個同事最近結束了其中的一些庫到CFC,我們可以使用我們的應用,and explained how to use it on our developers blog

AntiSamy

如果您的應用程序接受用戶生成的HTML,說博客例如意見,您需要確保您清理您的輸入以防止XSS攻擊。你不希望有人能夠在你的博客評論中輸入惡意代碼,所以你需要一些方法來過濾輸入。輸入AntiSamy。 AntiSamy允許您根據其策略條款輕鬆過濾用戶生成的HTML。 AntiSamy是一個Java項目,所以我將它打包到CFC中以便從ColdFusion輕鬆使用。

使用AntiSamy的簡單方式是創建AntiSamy組件的實例(cfc.owasp.AntiSamy)並在輸入上調用getCleanHTML()方法。

<cfset antisamy = CreateObject("component","cfc.owasp.antisamy") /> 
<cfset cleanHTML = antisamy.scan(form.someInput) /> 

這將使用默認(相當寬容)策略文件運行AntiSamy並返回乾淨的HTML標記。

ESAPI編碼器

我從OWASP項目帶來了下一個庫是ESAPI Encoder。再次,這是一個Java項目,我已經包裝在CFC中以便於使用。除了ColdFusion包含的編碼器之外,編碼器還提供了幾種編碼方法。一些更有用的方法包括encodeForJavaScript(),encodeForHTMLAttribute()和encodeForCSS()。使用該組件非常簡單,只需實例化它並調用適當的方法即可。

<cfset encoder = CreateObject("component","cfc.owasp.Encoder") /> 
<cfset html = encoder.encodeForHTML("<body onload=""alert('XSS')"">Test</body>") /> 

這個庫提供的一個非常有用的方法是canonicalize方法。 documentation from the beta version of the ESAPI Encoder很好地描述了這種方法的作用。

但是,如果您堅持全球解決方案,爲什麼要重新發明輪子?爲什麼不試試FuseGuard之類的東西。價格可能低於開發時間的花費,這些開發時間將花費在拼湊,調試以及處理突破本土系統的安全問題上。

+0

他們寧願花時間在我身上,只要它比花在某些工具上的錢少。我們的預算有限。我們要麼在有限的時間/金錢裏自己做,要麼根本不做。 – crosenblum 2010-10-01 18:34:30

+0

那麼在那種情況下,我會利用OWASP庫並確定顯示任何用戶提交的內容(或類似篡改的URL變量,cookie等)並添加適當的值編碼。 – 2010-10-01 18:51:12

+0

你如何製作一個AntiSamy的cfc實例?我知道如何調用/創建cfc,但是我要下載到我的服務器以使用antisamy? – crosenblum 2010-10-04 16:02:39

0

就個人而言,我不太確定這種「全球」方法是否最好。我檢查全部收到的數據在所有模型接受外部數據,並具體針對每種情況的驗證規則。所以額外的層看起來矯枉過正。

這樣的腳本不會阻止您將字符串放入傳遞到URL中的數字ID - 您必須以任何方式檢查它。您必須以任何方式在視圖中使用HTMLEditFormat/XMLFormat,依此類推。

P.S.用於CFScript的列表循環:

for (i=1; i LTE ListLen(scopestoClean); i++) { 
    scopeName = ListGetAt(scopestoClean,i); 
    //... following code 
} 
+0

這只是我計劃使用的腳本中的一個,您會推薦哪些其他腳本或替代腳本? – crosenblum 2010-10-01 16:43:48

+1

我不能推薦任何「腳本」,因爲數據驗證必須是應用程序的組成部分,我只是將其作爲處理外部數據(表單,url屬性等)的腳本的一部分。 – Sergii 2010-10-01 19:55:42

+0

這並不過分,這是一個被稱爲縱深防禦的原則。 http://www.owasp.org/index.php/Defense_in_depth – 2010-10-05 19:44:46

相關問題