我正在重做我們公司的代碼,並且我想要有一個清晰,易於閱讀和合理安全的application.cfm。你將什麼安全腳本/代碼添加到你的application.cfm中?
不,我們沒有使用application.cfc。所以我們不要討論這個問題。
只是想知道你會爲安全性添加什麼腳本。
我使用ColdFusion 8標準版,SQL 2008
這裏是我當前使用的腳本之一,但我想從一些其他的ColdFusion程序員聽到。
謝謝你的時間。
我正在重做我們公司的代碼,並且我想要有一個清晰,易於閱讀和合理安全的application.cfm。你將什麼安全腳本/代碼添加到你的application.cfm中?
不,我們沒有使用application.cfc。所以我們不要討論這個問題。
只是想知道你會爲安全性添加什麼腳本。
我使用ColdFusion 8標準版,SQL 2008
這裏是我當前使用的腳本之一,但我想從一些其他的ColdFusion程序員聽到。
謝謝你的時間。
我建議不要嘗試以全球方式捕捉所有內容。無論您的全球保護代碼如何複雜和複雜,無可避免地會出現一些漏洞。
相反,「正確的」(爲了什麼是值得的)方法是消除所有呈現在頁面上(或電子郵件等)的內容 - 在輸出過程中 - 開始其作爲用戶輸入的生命。
這就是說,看看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之類的東西。價格可能低於開發時間的花費,這些開發時間將花費在拼湊,調試以及處理突破本土系統的安全問題上。
他們寧願花時間在我身上,只要它比花在某些工具上的錢少。我們的預算有限。我們要麼在有限的時間/金錢裏自己做,要麼根本不做。 – crosenblum 2010-10-01 18:34:30
那麼在那種情況下,我會利用OWASP庫並確定顯示任何用戶提交的內容(或類似篡改的URL變量,cookie等)並添加適當的值編碼。 – 2010-10-01 18:51:12
你如何製作一個AntiSamy的cfc實例?我知道如何調用/創建cfc,但是我要下載到我的服務器以使用antisamy? – crosenblum 2010-10-04 16:02:39
就個人而言,我不太確定這種「全球」方法是否最好。我檢查全部收到的數據在所有模型接受外部數據,並具體針對每種情況的驗證規則。所以額外的層看起來矯枉過正。
這樣的腳本不會阻止您將字符串放入傳遞到URL中的數字ID - 您必須以任何方式檢查它。您必須以任何方式在視圖中使用HTMLEditFormat/XMLFormat,依此類推。
P.S.用於CFScript的列表循環:
for (i=1; i LTE ListLen(scopestoClean); i++) {
scopeName = ListGetAt(scopestoClean,i);
//... following code
}
這只是我計劃使用的腳本中的一個,您會推薦哪些其他腳本或替代腳本? – crosenblum 2010-10-01 16:43:48
我不能推薦任何「腳本」,因爲數據驗證必須是應用程序的組成部分,我只是將其作爲處理外部數據(表單,url屬性等)的腳本的一部分。 – Sergii 2010-10-01 19:55:42
這並不過分,這是一個被稱爲縱深防禦的原則。 http://www.owasp.org/index.php/Defense_in_depth – 2010-10-05 19:44:46
我正在尋找可以防止sql注入,xss,crlf等的腳本。 – crosenblum 2010-10-01 16:44:09
您能否至少解釋爲什麼您不能或不會使用Application.cfc?在這方面你有點敵意。 – 2010-10-01 17:20:07
我不是想敵視敵人。只要我指定我不能使用特定的方法或技術,而不是那些試圖以我需要的方式幫助我的人。他們花更多時間,解釋爲什麼我應該用這種方式,我不能用。如果我很粗魯,我很抱歉。我只是不想進入火焰戰爭......我只是想以特定的方式提供幫助。 – crosenblum 2010-10-01 17:24:58