作者:Dino Esposito
Wintellect
2005 年 1 月
適用於:
Microsoft ASP.NET 1.x
Microsoft ASP.NET 2.0
摘要: Dino 重點說明最常見的 Web 攻擊類型,並解說 Web 開發人員應如何使用 ASP.NET 內建功能來加強安全性。
(本文含有連至英文網站的連結,列印共 13 頁)
ASP.NET 開發人員守則 威脅成因
ViewStateUserKey
Cookie 與驗證
工作階段劫奪
EnableViewStateMac
ValidateRequest
透視資料庫
隱藏欄位
E-mails 與垃圾郵件
總結
相關資源
既然您已在閱讀本文,也就不必他人的叮嚀,告訴您日趨重要的 Web 應用程式安全性。您可能想要知道一些實用的技巧,來運用在 ASP.NET 應用程式的安全性。不幸的是,沒有一個開發平台在你使用之後,能保證讓您撰寫百分之百安全的程式碼,包括 ASP.NET 在內,若有人說可以,那純屬虛構。但我有個好消息,單就 ASP.NET 而言,它的 1.1 版還有即將推出的 2.0 版都整合了許多內建防禦機制供您使用。
單單應用這些功能是無法保護 Web 應用程式,對抗可能或可預測的攻擊,不過,若與其他的防禦技術與安全性策略一起搭用,ASP.NET 內建功能即可造就一個有力的工具包,進而確保應用程式能在安全的環境下運作。
Web 安全性的成因有很多,它會受到各種策略的影響,不僅僅是單一應用程式,資料庫管理、網路設定以及科技強迫推銷與網路詐騙等等也會所有影響。
本文目的是在解說 ASP.NET 開發人員所應遵守的事宜,以採用適度的安全防護標準,畢竟安全性就是需要高警覺性,不能有任何鬆懈,不讓駭客有可趁之機。
現在就讓我們來看看,ASP.NET 的功能如何能簡化這個工作。
我整理出 [表 1],重點說明常見的 Web 攻擊類型與其利用的應用程式弱點。
| 攻擊類別 | 手法 |
| 跨站台的指令碼處理 (XSS) 攻擊 | 回應至網頁的不受信任使用者輸入 |
| SQL 資料隱碼攻擊 | 以使用者輸入串連形成 SQL 命令碼 |
| 工作階段劫奪 | 工作階段識別碼推測與工作階段識別碼 Cookie 竊取 |
| 滑鼠點擊攻擊 | 以指令碼傳送的不明 HTTP 張貼 |
| Hidden field tampering | 未檢查 (和受信任的) 隱藏欄位內具有敏感性資料 |
[表 1] 常見的 Web 攻擊
上述清單裡,主要的事實是什麼?我個人認為可歸類成下類三點:
有趣的是,上面所提到的三點是 Web 安全性截然不同三個領域,但唯有搭用這些技巧,方能建立穩固的防護,使應用程式不受侵犯。Web 安全性的主控方法有三:
如前所述,開發人員、架構者與管理員要攜手合作,才有安全的應用程式,千萬不要認為您一人就可以包辦。
在撰寫 ASP.NET 應用程式時,您不是孤零零一個人,只憑自己的大腦、技巧和輸入程式碼的雙手來奮戰駭客軍團。ASP.NET 1.1 和更新的版本能提供您一些新的功能,自動就上述某些威脅形成一面護牆。現在就讓我們看看吧。
ViewStateUserKey 是 ASP.NET 1.1 引進的,它是 Page 類別的一個字串屬性,不過真正懂得這個屬性的開發人員少之又少。原因為何?我們來看一下相關文件的內容就知道。
Assigns an identifier to an individual user in the view state variable associated with the current page (將識項指派到與目前頁面相關之檢視狀態變數裡的單一使用者)
除了又臭又長的敘述風格之外,語句還算清楚,可是,這句話真的解釋了該屬性的目的為何嗎?要想瞭解 ViewStateUserKey 的真面目,必須繼續往下讀,直到 Remarks (附註) 那一段才會真相大白。
這個屬性可用來防止滑鼠點擊式攻擊,提供它種輸入,建立能防禦檢視狀態免受侵入的雜湊值。也就是說,駭客若使用用戶端檢視狀態來進行惡意張貼,使用 ViewStateUserKey 可大幅提高網站的防禦能力。此屬性可指派至任一非空白字串,但最好是工作階段識別碼或使用者識別碼。接下來,我們來談談滑鼠點擊式攻擊,藉此瞭解這個屬性的重要性。
滑鼠點擊式攻擊是在網站上張貼惡意 HTTP 表單,它之所以稱為「滑鼠點擊式」,是因為這種攻擊要不知情的受害者按下電子郵件裡或熱門討論區裡的引誘連結,才會發生攻擊。按下連結後,使用者不知不覺地觸發一個遠端程序,將惡意的
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30193/viewspace-521171/ ,如需转载,请注明出处,否则将追究法律责任。