安全:什么是Web安全

背景

說來慚愧,6 年的 web 編程生涯,一直沒有真正系統(tǒng)的學(xué)習(xí) web 安全知識(shí)(認(rèn)證和授權(quán)除外),這個(gè)月看了一本《Web 安全設(shè)計(jì)之道》,書中的內(nèi)容多是從微軟官方文檔翻譯而來,這本書的含金量不高,不過也不能說沒有收獲,本文簡單記錄一下我學(xué)習(xí) Web 安全方面的筆記。

本文不涉及 IIS、Windows 和 SqlServer 的安全管理與配置,盡量只談編程相關(guān)的安全問題。

最簡單的 Web 物理架構(gòu)

您必須了解 HTTP 協(xié)議,可以閱讀這篇文章:HTTP 協(xié)議詳解,簡單總結(jié)如下:

瀏覽器和服務(wù)器的通信采用無狀態(tài)的 HTTP 協(xié)議。

通過控制 HTTP 的請(qǐng)求頭,可以控制:客戶端緩存、Cookie、請(qǐng)求編碼、相應(yīng)編碼等。

請(qǐng)求內(nèi)容向服務(wù)器提交數(shù)據(jù)(POST 和 GET),響應(yīng)內(nèi)容向?yàn)g覽器發(fā)送數(shù)據(jù)。

Cookie 包含在每個(gè)請(qǐng)求和響應(yīng)中,因此客戶端和服務(wù)器都可以訪問到。

一般使用 Cookie 來維護(hù)一個(gè)瀏覽器會(huì)話(也有其他方式)。

攻擊方式總覽

這里有一個(gè)一般性的介紹:網(wǎng)站安全。

Web 軟件安全攻擊防護(hù)

瀏覽器安全攻擊

Cookie 假冒

定義

非期望的修改 Cookie 的值。

場(chǎng)景

服務(wù)器將用戶的授權(quán)信息存儲(chǔ)在 Cookie 中,然后客戶端用這些 Cookie 決定導(dǎo)航的顯示與否。如果有程序惡意的修改了Cookie,會(huì)導(dǎo)致權(quán)限提升。

攻擊方式

注入的 Javascript 代碼。

使用瀏覽器調(diào)試工具。

本機(jī)病毒等。

防護(hù)措施

盡量將 Cookie 設(shè)置為 HttpOnly,瀏覽器偽造不了這種 Cookie。

防止 Javascript 注入。

隱藏變量修改

定義

非期望的修改隱藏變量。

場(chǎng)景

訂單的折扣計(jì)算完全依賴客戶端的某個(gè)變量,這個(gè)變量是從服務(wù)器生成的,所有邏輯都在客戶端計(jì)算,服務(wù)器只是接受最后的計(jì)算結(jié)果。如果有程序惡意的修改了變量,會(huì)繞過某些業(yè)務(wù)邏輯。

攻擊方式

注入的 Javascript 代碼。

使用瀏覽器調(diào)試工具。

保護(hù)措施

防止 Javascript 注入。

關(guān)鍵的功能不要依靠客戶端控制,要采用服務(wù)器控制。

跨站腳本攻擊

定義

惡意的提交 Javascript 代碼。

場(chǎng)景

在博客的評(píng)論功能中,如果用戶惡意的提交 Javascript 代碼,假如這些 Javascript 沒有被過濾,極端的情況下,這些代碼會(huì)劫持所有訪問此頁面用戶的會(huì)話,訪問和修改任意數(shù)據(jù)。

攻擊方式

注入的 Javascript 代碼。

使用瀏覽器調(diào)試工具。

保護(hù)措施

在服務(wù)器端驗(yàn)證和過濾惡意輸入。

開啟?ValidateRequest="true"。

對(duì)輸出使用?this.Server.HtmlEncode。

服務(wù)器安全攻擊

緩沖區(qū)溢出

定義

某些可能輸入會(huì)導(dǎo)致服務(wù)器堆棧溢出,這直接致使服務(wù)器不可用。

場(chǎng)景

程序提供了某項(xiàng)計(jì)算密集型的功能,此功能沒有限制用戶輸入,用戶在有意或無意之間輸入了一個(gè)非法的值,導(dǎo)致了緩沖區(qū)溢出。

攻擊方式

非法輸入。

保護(hù)措施

在服務(wù)器端驗(yàn)證和過濾惡意輸入。

采用防偽式編程。

認(rèn)證逃避

定義

某些 URL 沒有出現(xiàn)在主頁導(dǎo)航界面,系統(tǒng)只對(duì)導(dǎo)航頁面進(jìn)行了認(rèn)證和授權(quán)管理,這些沒有出現(xiàn)在導(dǎo)航中的 URL 可能被惡意用戶給分析出來,直接進(jìn)行訪問。

場(chǎng)景

用戶管理分為三個(gè)頁面:List.aspx、New.aspx,程序只對(duì) List.aspx 進(jìn)行認(rèn)證和授權(quán)了,某些用戶直接訪問 New.aspx 執(zhí)行添加操作。

攻擊方式

直接地址訪問。

保護(hù)措施

梳理網(wǎng)站的整體結(jié)構(gòu),對(duì)所有頁面進(jìn)行認(rèn)證和授權(quán)管理。

非法輸入

定義

病從口入,禍從口出。很多攻擊方式都是因?yàn)榉欠ㄝ斎雽?dǎo)致的。

場(chǎng)景

程序只在客戶端對(duì)輸入進(jìn)行了驗(yàn)證,服務(wù)器未做任何驗(yàn)證,惡意的程序可以繞過客戶端邏輯直接向服務(wù)器提交非法輸入,這很容易導(dǎo)致各種安全問題。

攻擊方式

注入的 Javascript 代碼。

使用瀏覽器調(diào)試工具。

保護(hù)措施

在服務(wù)器端驗(yàn)證和過濾惡意輸入。

防止 Javascript 注入。

授權(quán)逃避

定義

某些 URL 沒有出現(xiàn)在主頁導(dǎo)航界面,系統(tǒng)只對(duì)導(dǎo)航頁面進(jìn)行了認(rèn)證和授權(quán)管理,這些沒有出現(xiàn)在導(dǎo)航中的 URL 可能被惡意用戶給分析出來,直接進(jìn)行訪問。還有一種可能是:系統(tǒng)只在客戶端進(jìn)行了授權(quán)管理,服務(wù)器代碼并沒有進(jìn)行授權(quán)驗(yàn)證,惡意用戶很容易就可以逃避授權(quán)。

場(chǎng)景

當(dāng)用戶沒有 Create 權(quán)限的時(shí)候,系統(tǒng)只是禁用了瀏覽器按鈕,并沒有做服務(wù)器授權(quán),然后用戶使用瀏覽器調(diào)試工具啟用了按鈕,就可以執(zhí)行 Create 了。

攻擊方式

直接地址訪問。

修改客戶端代碼。

保護(hù)措施

梳理網(wǎng)站的整體結(jié)構(gòu),對(duì)所有頁面進(jìn)行認(rèn)證和授權(quán)管理。

在服務(wù)器進(jìn)行授權(quán)管理。

SQL 注入

定義

對(duì)于和后臺(tái)數(shù)據(jù)庫產(chǎn)生交互的網(wǎng)頁,如果沒有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行全面的判斷,就會(huì)使應(yīng)用程序存在安全隱患。用戶可以在可以提交正常數(shù)據(jù)的URL或者表單輸入框中提交一段精心構(gòu)造的數(shù)據(jù)庫查詢代碼,使后臺(tái)應(yīng)用執(zhí)行攻擊著的SQL代碼,攻擊者根據(jù)程序返回的結(jié)果,獲得某些他想得知的敏感數(shù)據(jù),如管理員密碼,保密商業(yè)資料等。

場(chǎng)景

服務(wù)器程序使用字符串拼接的方式來構(gòu)造 SQL 語句,這就會(huì)導(dǎo)致 SQL 注入攻擊的可能。

攻擊方式

惡意的提交 SQL 片段。

保護(hù)措施

在服務(wù)器端驗(yàn)證和過濾惡意輸入。

不要拼湊 SQL 參數(shù),采用 DbParameter 設(shè)置參數(shù)。

最小化 SQL Server 訪問賬戶的權(quán)限。

異常敏感信息泄露

定義

未處理異常直接顯示到瀏覽器,這會(huì)導(dǎo)致敏感信息被泄露,對(duì)最終用戶來說,也會(huì)讓他們感覺系統(tǒng)不夠安全和易用。

場(chǎng)景

因?yàn)殚_發(fā)原因,在某些場(chǎng)景下瀏覽器將后端的異常直接顯示給瀏覽器了,如:NullReferenceException等。

攻擊方式

在調(diào)用的最上層,為處理掉全部異常。

在調(diào)用的下層,為封裝合適的異常信息。

保護(hù)措施

定義合理的異常處理策略。

異常一定不能跨越邊界直接顯示到瀏覽器。

上傳攻擊

定義

用戶惡意的上傳外掛、木馬和其它程序等。

場(chǎng)景

你做了一個(gè)上傳功能,結(jié)果對(duì)上傳的文件沒有做好足夠的控制,比如:某些惡意的用戶會(huì)上傳一些惡意的腳本,然后執(zhí)行這些腳本。

攻擊方式

上傳惡意文件。

保護(hù)措施

在服務(wù)器端驗(yàn)證和過濾惡意輸入,如:后綴名限制。

對(duì)上傳后的文件進(jìn)行掃描和殺毒。

抵賴

定義

某些用戶由于某些原因,不愿意承認(rèn)自己執(zhí)行過某些操作,當(dāng)然,某些操作可能是他們沒有意識(shí)的情況下執(zhí)行的。

場(chǎng)景

用戶一不小心執(zhí)行的刪除操作,然后立即發(fā)現(xiàn)自己操作錯(cuò)誤了,然后他打電話給售后,說系統(tǒng)有問題。

攻擊方式

界面引導(dǎo)不夠友好,容易導(dǎo)致誤操作,為了推卸責(zé)任,進(jìn)行抵賴。

用戶惡意的執(zhí)行操作,然后抵賴。

保護(hù)措施

提高界面的易用性。

關(guān)鍵操作的提醒要足夠明顯。

所有操作要留下操作日志。

數(shù)據(jù)庫安全攻擊

連接字符串暴漏

定義

數(shù)據(jù)庫連接字符串中包含用戶名和密碼,這些信息以明文的形式存儲(chǔ)在配置文件中,運(yùn)維和開發(fā)人員都能看得到,隨著團(tuán)隊(duì)人員的流動(dòng),這些敏感信息也會(huì)暴漏。

場(chǎng)景

直接將連接字符串配置在 Web.Config 中,而這個(gè)文件沒有被加密。

攻擊方式

未加密連接字符串。

未加密配置文件。

保護(hù)措施

加密連接字符串。

加密配置文件。

存儲(chǔ)數(shù)據(jù)泄露和篡改

定義

某些敏感信息最終需要被存儲(chǔ)在數(shù)據(jù)庫中,如果這些信息被存儲(chǔ)為明文,會(huì)有很多人員可以看到這些信息,極端情況下,某些黑客攻陷了服務(wù)器,也可以看到這些數(shù)據(jù)。

場(chǎng)景

為加密密碼、關(guān)鍵財(cái)務(wù)信息,稅務(wù)局來查賬了。

攻擊方式

未加密敏感數(shù)據(jù)。

加密方法過于簡單。

保護(hù)措施

加密敏感數(shù)據(jù)。

對(duì)某些數(shù)據(jù)采用不可逆加密,如:密碼。

對(duì)某些數(shù)據(jù)采用可逆加密,如:財(cái)務(wù)數(shù)據(jù)。

網(wǎng)絡(luò)安全攻擊

拒絕服務(wù)攻擊

定義

惡意用戶試圖攻擊服務(wù)器、網(wǎng)絡(luò)和系統(tǒng),最終的目的是讓系統(tǒng)不可用,停止對(duì)外服務(wù)。

場(chǎng)景

惡意用戶在嘗試并發(fā)的無限制的向服務(wù)器發(fā)送請(qǐng)求,試圖讓服務(wù)器的負(fù)載達(dá)到最大,最終讓系統(tǒng)停止對(duì)外服務(wù)。

攻擊方式

攻擊網(wǎng)絡(luò)。

攻擊服務(wù)器。

攻擊系統(tǒng)。

保護(hù)措施

在程序級(jí)別,識(shí)別并攔截惡意的請(qǐng)求。

購買第三方安全軟件。

傳輸數(shù)組泄露、篡改

定義

惡意的代理服務(wù)器或路由器攔截用戶的請(qǐng)求,讀取或修改敏感數(shù)據(jù)。

場(chǎng)景

您在咖啡館發(fā)現(xiàn)了一個(gè)免費(fèi)的 WIFI,然后偷偷的接入了,您還暗自高興,當(dāng)您使用這個(gè)免費(fèi)的 WIFI 進(jìn)行網(wǎng)上沖浪的時(shí)候,您的各種信息都會(huì)被 WIFI 給攔截,如果是惡意的用戶,結(jié)果可想而知。

攻擊方式

綁架路由器。

免費(fèi) WIFI 騙局。

為加密的傳輸協(xié)議。

未加密的傳輸數(shù)據(jù)。

保護(hù)措施

加強(qiáng)客戶端路由的安全管理。

慎重的選擇代理服務(wù)器。

使用安全的傳輸協(xié)議,如:SSL。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容