1. 程式人生 > >Web開發框架安全問題及防範規範|之CSRF跨站請求偽造

Web開發框架安全問題及防範規範|之CSRF跨站請求偽造

Web站點為什麼會遭受攻擊?是為了惡作劇?損害企業名譽?免費瀏覽收費內容?盜竊使用者隱私資訊?獲取使用者賬號謀取私利?總之攻擊方式層出不窮,作為Web開發框架來說,幫助開發者做好解決安全問題也是刻不容緩的,本篇文章來告訴大家怎麼禁止CSRF跨站請求偽造。

WEb開發框架適用範圍

Web網站

攻擊原理

如果B/S開發框架中不做防範,完成一次CSRF跨站請求偽造,受害者必須依次完成兩個步驟:

1.登入受信任網站A,並在本地生成Cookie。

2.在不登出A的情況下,訪問危險網站B。

看到這裡,你也許會說:“如果我不滿足以上兩個條件中的一個,我就不會受到CSRF的攻擊”。是的,確實如此,但你不能保證以下情況不會發生:

1.你不能保證你登入了一個網站後,不再開啟一個tab頁面並訪問另外的網站。

2.你不能保證你關閉瀏覽器了後,你本地的Cookie立刻過期,你上次的會話已經結束。(事實上,關閉瀏覽器不能結束一個會話,但大多數人都會錯誤的認為關閉瀏覽器就等於退出登入/結束會話了......)

3.CSRF攻擊是源於WEB的隱式身份驗證機制!WEB的身份驗證機制雖然可以保證一個請求是來自於某個使用者的瀏覽器,但卻無法保證該請求是使用者批准傳送的。

 

解決方案

應用程式處理

 

1、驗證 HTTP Referer 欄位;根據HTTP協議,在HTTP頭中有一個欄位叫Referer,它記錄了該HTTP請求的來源地址。提交請求是來自網站自己的請求,是合法的。如果Referer是其他網站的話,就有可能是CSRF攻擊,則拒絕該請求。

2、在請求地址中新增 token 並驗證;CSRF攻擊之所以能夠成功,是因為攻擊者可以偽造使用者的請求,該請求中所有的使用者驗證資訊都存在於Cookie中,因此攻擊者可以在不知道這些驗證資訊的情況下直接利用使用者自己的Cookie來通過安全驗證。鑑於此,系統開發者可以在HTTP請求中以引數的形式加入一個隨機產生的token,並在伺服器端建立一個攔截器來驗證這個token,如果請求中沒有token或者token內容不正確,則認為可能是CSRF攻擊而拒絕該請求。

3、雲微開發平臺在 HTTP 頭中自定義屬性並驗證。自定義屬性的方法也是使用token並進行驗證,和前一種方法不同的是,這裡並不是把token以引數的形式置於HTTP請求之中,而是把它放到HTTP 頭中自定義的屬性裡。通過XMLHttpRequest這個類,可以一次性給所有該類請求加上csrftoken這個HTTP頭屬性,並把token值放 入其中。這樣解決了前一種方法在請求中加入token的不便,同時,通過這個類請求的地址不會被記錄到瀏覽器的位址列,也不用擔心token會通過 Referer洩露到其他網站。

4、使用ASP.NET環境的Anti CSRF模組-AntiCSRF。

 

管理處理

 

適用於web開發框架ASP.NET環境的Anti CSRF模組-AntiCSRF。

在webconfig配置檔案中新增配置

<configuration>
	<configSections>
		<sectionname="csrfSettings"type="Idunno.AntiCsrf.Configuration.CsrfSettings, Idunno.AntiCsrf" />
	</configSections>
	<csrfSettingscookieName="__CSRFCOOKIE"formFieldName="__CSRFTOKEN"detectionResult="RaiseException"errorPage="404.aspx" />
	<system.webServer>
		<modules>
			<addname="AntiCSRF"type="Idunno.AntiCsrf.AntiCsrfModule, Idunno.AntiCsrf" />
		</modules>
	</system.webServer>
</configuration>

物理處理

 

Web站點為什麼會遭受攻擊?是為了惡作劇?損害企業名譽?免費瀏覽收費內容?盜竊使用者隱私資訊?獲取使用者賬號謀取私利?總之攻擊方式層出不窮,作為B/S開發框架來說,幫助開發者做好解決安全問題也是刻不容緩的,本篇文章來告訴大家怎麼禁止CSRF跨站請求偽造。