《白帽子講WEB安全》學習筆記之第12章WEB框架安全

科技小能手發表於2017-11-12

第12章 WEB框架安全

12.1 MVC框架安全

Spring框架中可以使用spring security來增加系統的安全性。

12.2 模板引擎與XSS防禦

 

12.3 WEB框架與CSRF防禦

MVC中防禦CSRF

q  Session中繫結token。如果不能儲存到資料庫中的Session,則使用Cookie.

q  form表單中自動填寫token欄位

q  Ajax請求中封裝token

q  在伺服器端對比POST提交的tokenSession繫結的Tiken是否一致。

q  儘量使用POST

12.4 Http Headers管理

MVC框架中對響應的HTTP頭做好防禦和返回

因此對抗CRLF的方案只需要在“value”中編碼所有的
即可。這裡沒有提到在“key”中編碼
,是因為讓使用者能夠控制“key”是極其危險的事情,在任何情況下都不應該使其發生。

對於框架來說,管理好跳轉目的地址是很有必要的。一般來說,可以在兩個地方做這件事情:

q  如果Web框架提供統一的跳轉函式,則可以在跳轉函式內部實現一個白名單,指定跳轉地址只能在白名單中;

q  另一種解決方式是控制HTTPLocation欄位,限制Location的值只能是哪些地址,也能起到同樣的效果,其本質還是白名單。

 

有很多與安全相關的Headers,也可以統一在Web框架中配置。比如用來對抗ClickJackingX-Frame-Options,需要在頁面的HTTP Response中新增:

X-Frame-Options: SAMEORIGIN

Web框架可以封裝此功能,並提供頁面配置。該HTTP頭有三個可選的值:SAMEORIGINDENYALLOW-FROM origin,適用於各種不同的場景。

並不是所有的Web伺服器、Web容器、指令碼語言提供的API都支援設定HttpOnly Cookie,所以很多時候需要由框架實現一個功能:對所有的Cookie預設新增HttpOnly,不需要此功能的Cookie則單獨在配置檔案中列出。

這將是非常有用的一項安全措施,在框架中實現的好處就是不用擔心會有遺漏。就HttpOnly Cookie來說,它要求在所有伺服器端設定該Cookie的地方都必須加上,這可能意味著很多不同的業務和頁面,只要一個地方有遺漏,就會成為短板。當網站的業務複雜時,登入入口可能就有數十個,兼顧所有Set-Cookie頁面會非常麻煩,因此在框架中解決將成為最好的方案。

一般來說,框架會提供一個統一的設定Cookie函式,HttpOnly的功能可以在此函式中實現;如果沒有這樣的函式,則需要統一在HTTP返回頭中配置實現。

12.5 資料持久層與SQL注入

對於ibaits引數引用可以使用#$兩種寫法,其中#寫法會採用預編譯方式,將轉義交給了資料庫,不會出現注入問題;如果採用$寫法,則相當於拼接字串,會出現注入問題。

例如,如果屬性值為“` or`1`=`1 ”,採用#寫法沒有問題,採用$寫法就會有問題。

q  對於like語句,難免要使用$寫法:

q  對於Oracle可以通過`%`||`#param#`||`%`避免;

q  對於MySQL可以通過CONCAT(`%`,#param#,`%`)避免;

q  MSSQL中通過`%`+#param#+`%

mysql: select * from t_user where name like concat(`%`,#name #,`%`)

oracle: select * from t_user where name like `%`||#name #||`%`

SQL Server:select * from t_user where name like `%`+#name #+`%

注:儘量避免使用如下程式碼:

1
2
3
4
<![CDATA[
  INSERTINTO `tab_user_one`
values( )                                                                                         
   ]]>

12.6 還能想到什麼

在設計Web框架安全解決方案時,還需要儲存好安全檢查的日誌。在設計安全邏輯時也需要考慮到日誌的記錄,比如發生XSS攻擊時,可以記錄下攻擊者的IP、時間、UserAgent、目標URL、使用者名稱等資訊。這些日誌,對於後期建立攻擊事件分析、入侵分析都是有積極意義的。當然,開啟日誌也會造成一定的效能損失,因此在設計時,需要考慮日誌記錄行為的頻繁程度,並儘可能避免誤報。

在設計Web框架安全時,還需要與時俱進。當新的威脅出現時,應當及時完成對應的防禦方案,如此一個Web框架才具有生命力。而一些0day漏洞,也有可能通過虛擬補丁的方式在框架層面解決,因為Web框架就像是一層外衣,為Web應用提供了足夠的保護和控制力。

 

12.7 Web框架自身安全

Web框架本身也可能會出現漏洞,只要是程式,就可能出現bug。但是開發框架由於其本身的特殊性,一般網站出於穩定的考慮不會對這個基礎設施頻繁升級,因此開發框架的漏洞可能不會得到及時的修補,但由此引發的後果卻會很嚴重。



本文轉自 夢朝思夕 51CTO部落格,原文連結:http://blog.51cto.com/qiangmzsx/1859560


相關文章