一文讀懂 Web 安全 【轉(zhuǎn)】
原文:https://mp.weixin.qq.com/s/4nva3aPShUlwd9CRsarCxA
我太喜歡這個(gè)作者的文章了祸挪,真的讓我對(duì)安全領(lǐng)域充滿了好奇,愛(ài)了愛(ài)了谱醇,推薦各位去閱讀原文O局佟!副渴!
Web 安全是互聯(lián)網(wǎng)中不可或缺的一個(gè)領(lǐng)域熔吗,這個(gè)領(lǐng)域中誕生了大量的黑帽子與白帽子,他們都是安全領(lǐng)域的王者佳晶,在平時(shí)里桅狠,他們都利用各種巧妙的技術(shù)互相博弈,時(shí)不時(shí)就會(huì)掀起一場(chǎng) Web 安全浪潮,真可謂神仙打架中跌,各顯神通咨堤。
本文從一個(gè)吃瓜群眾的角度,聊一聊 Web 安全的一些有趣故事漩符。
- 安全世界觀
- 安全攻防案例
- 總結(jié)與思考
安全世界觀
在互聯(lián)網(wǎng)發(fā)展之初一喘,IE 瀏覽器壟斷的時(shí)期,大家上網(wǎng)的目的都很單純嗜暴,主要通過(guò)瀏覽器分享信息凸克,獲取新聞。但隨著互聯(lián)網(wǎng)的不斷發(fā)展發(fā)展闷沥,一個(gè)網(wǎng)頁(yè)能做的事情越來(lái)越多萎战,除了看新聞,我們還可以看視頻舆逃,玩游戲蚂维,購(gòu)物,聊天等路狮。這些功能都大大豐富了我們的生活虫啥。
隨著網(wǎng)頁(yè)功能的逐漸增多,就開(kāi)始出現(xiàn)了一些黑帽子奄妨,他們視圖通過(guò)一些技術(shù)手段來(lái)牟取利益涂籽。在我小的時(shí)候,印象最深的就是木馬病毒砸抛,它可以監(jiān)控你的鍵盤评雌,將你在鍵盤上敲打的內(nèi)容發(fā)送到黑客的機(jī)器上,黑客通過(guò)分析這些內(nèi)容锰悼,很容易就能得到你的游戲賬號(hào)和密碼柳骄。
在這之后,就誕生了一些殺毒軟件箕般,致力于解決網(wǎng)絡(luò)上的各種病毒耐薯,隨著不斷地發(fā)展,殺毒軟件已經(jīng)成為一臺(tái)電腦必不可少的軟件丝里。
為什么會(huì)出現(xiàn)在這樣的安全問(wèn)題?
安全歸根到底是信任的問(wèn)題曲初,如果所有人都按照正常的流程去上網(wǎng),不去謀取私利杯聚,也就沒(méi)有安全問(wèn)題可談了臼婆。
安全的根本在于新人,但要讓所有人互相信任談何容易幌绍。在當(dāng)前階段颁褂,我們可以做到:持續(xù)做好安全防護(hù)故响,讓漏洞越來(lái)越少,非法攻擊越來(lái)越困難颁独,這樣就能逐漸減少黑帽子的數(shù)量彩届,讓病毒制造者越來(lái)越少
如何做好安全
要做好安全,首先得理解安全問(wèn)題的屬性誓酒,前人通過(guò)無(wú)數(shù)實(shí)踐樟蠕,最后將安全的屬性總結(jié)為安全三要素,分別為 機(jī)密性靠柑,完整性寨辩,可用性
- 機(jī)密性
保護(hù)數(shù)據(jù)內(nèi)容不被泄露
通常使用加密的方式
- 完整性
保護(hù)數(shù)據(jù)內(nèi)容是完整的,沒(méi)有被篡改
通常使用數(shù)字簽名的方法歼冰。
- 可用性
數(shù)據(jù)隨時(shí)都能夠使用
通常是在防御 DOS
有了安全3要素之后靡狞,我們就可以對(duì)安全問(wèn)題進(jìn)行評(píng)估了。
- 資產(chǎn)等級(jí)劃分
找出最重要的數(shù)據(jù)停巷。
找出最重要數(shù)據(jù)的宿主空間耍攘,如: 在數(shù)據(jù)庫(kù)里榕栏,那么數(shù)據(jù)庫(kù)就得重點(diǎn)防御
找出數(shù)據(jù)庫(kù)的宿主空間畔勤, 如: 在一臺(tái)服務(wù)器上,那么這臺(tái)服務(wù)器就得做次等防御
找出服務(wù)器的宿主空間扒磁,如: 在OSI網(wǎng)絡(luò)層級(jí)上庆揪,那么在網(wǎng)絡(luò)層面就得做一般防御。
- 威脅分析
找出威脅(可能造成危害的來(lái)源)
找出風(fēng)險(xiǎn)(可能出現(xiàn)的損失叫做風(fēng)險(xiǎn))
- 風(fēng)險(xiǎn)分析
采取多標(biāo)準(zhǔn)決策分析妨托,即:風(fēng)險(xiǎn) = 威脅等級(jí) * 威脅可行性
計(jì)算所有的威脅缸榛,將最終的風(fēng)險(xiǎn)進(jìn)行排序,優(yōu)先解決風(fēng)險(xiǎn)大的問(wèn)題
- 確認(rèn)解決方案
找出不安全的實(shí)現(xiàn)方式兰伤,并確定解決方案
解決方案不要改變商業(yè)需求的初衷
解決方案需要對(duì)用戶透明内颗,不要改變用戶的習(xí)慣
做好安全評(píng)估之后,我們就有了一份安全解決方案敦腔,后續(xù)的安全工作只需要按照這個(gè)方案去做均澳,就沒(méi)有任何問(wèn)題。
安全的原則
有了安全解決方案后符衔,我們還可以制定一些安全原則找前,遵守原則做事,可以讓我們事半功倍判族。
- 黑名單躺盛,白名單原則
白名單方案指的是給安全的資源授權(quán)
黑名單方案指的是禁用不安全的資源
我們應(yīng)該優(yōu)先使用白名單方案,因?yàn)楹诿麊瓮ǔ=y(tǒng)計(jì)不完所有的不安全資源
如: XSS攻擊的方式非常多形帮,可以通過(guò) script槽惫,css周叮,image 標(biāo)簽等。盡管你將這些標(biāo)簽都加入黑名單界斜,也不能保證其他標(biāo)簽都沒(méi)有 XSS 的攻擊隱患
- 最小權(quán)限原則
只授權(quán)必要的權(quán)限则吟,不要過(guò)度授權(quán),減少出錯(cuò)機(jī)會(huì)
如: 普通權(quán)限的 Linux 用戶只能操作~
文件下的目錄锄蹂,如果有人想刪數(shù)據(jù)庫(kù)跑路氓仲,在執(zhí)行rm -rf /
時(shí),就會(huì)提示無(wú)權(quán)限
- 縱深防御原則
這條原則類似
木桶理論
得糜,安全水平往往取決于最短的那塊板
即: 不要留下短板敬扛,黑帽子們往往可以利用短板作為突破口,挖掘更大的漏洞
- 數(shù)據(jù)與代碼分離原則
當(dāng)用戶的數(shù)據(jù)被當(dāng)成代碼執(zhí)行時(shí)朝抖,混肴了數(shù)據(jù)和代碼的邊界啥箭,從而導(dǎo)致安全問(wèn)題
如: XSS 就是利用這一點(diǎn)去攻擊的。
- 不可預(yù)測(cè)性原則
這條原則就是為了提高攻擊門檻治宣,有效防止基于篡改急侥,偽造的攻擊
如: 數(shù)據(jù)庫(kù)中使用 uuid 代替 number 型的自增主鍵,可以避免id 被攻擊者猜到侮邀,從而進(jìn)行批量操作
token 也是利用不可預(yù)測(cè)性坏怪,攻擊者無(wú)法構(gòu)造 token 也就無(wú)法進(jìn)行攻擊
有了這些安全原則,我們就可以開(kāi)干了绊茧,接下來(lái)介紹幾個(gè)常見(jiàn)的攻擊案例铝宵。
安全攻防案例
安全攻防的案例非常多,這里主要介紹幾個(gè)出鏡率比較高的安全問(wèn)題华畏。
客戶端攻擊
- XSS 攻擊
- CSRF 攻擊
- 點(diǎn)擊劫持
XSS 攻擊
XSS 攻擊的本質(zhì)是將用戶數(shù)據(jù)當(dāng)成了 HTML 代碼一部分來(lái)執(zhí)行鹏秋,從而混肴原本的語(yǔ)義,產(chǎn)生新的語(yǔ)義亡笑。
如圖所示侣夷,我們注冊(cè)了一個(gè) <script>alert(document.cookie)</script>
的用戶名,所有能看到此用戶名字的頁(yè)面仑乌,都會(huì)彈出當(dāng)前瀏覽器的 Cookie百拓,如果代碼的邏輯是將 Cookie 發(fā)送到攻擊者的網(wǎng)站,攻擊者就能冒充當(dāng)前用戶進(jìn)行登陸了绝骚。
XSS 攻擊方式有很多耐版,所有和用戶交互的地方,都有可能存在 XSS 攻擊压汪。
例如:
- 所有 input 框
- window.location
- window.name
- document.referrer
- document.cookie
- localStorage
- ..
由于頁(yè)面中與用戶交互的地方非常多粪牲,肯定還有一些XSS的攻擊方式?jīng)]有被發(fā)現(xiàn),而一旦被黑帽子發(fā)現(xiàn)止剖,就可能造成嚴(yán)重的影響腺阳,所以我們務(wù)必引起重視落君。
xss攻擊影響
被xss攻擊成功后,攻擊者就可以獲取大量的用戶信息亭引,例如:
識(shí)別用戶 UA
識(shí)別用戶瀏覽器擴(kuò)展
識(shí)別用戶瀏覽過(guò)的網(wǎng)站
通過(guò) CSS的 Visited 屬性
- 獲取用戶真實(shí)的IP
通過(guò) WebRTC 等
- 盜取 Cookie
偽造用戶登錄绎速,竊取用戶資料
- XSS釣魚
向頁(yè)面注入一個(gè)登陸彈窗,讓用戶認(rèn)為是網(wǎng)站內(nèi)的登陸彈窗(其實(shí)是釣魚網(wǎng)站的)焙蚓,一旦用戶登陸纹冤,賬號(hào)密碼就泄露給了釣魚網(wǎng)站
XSS 攻擊防御
目前來(lái)說(shuō),XSS已經(jīng)得到了互聯(lián)網(wǎng)行業(yè)的重視购公,許多開(kāi)發(fā)框架都內(nèi)置了安全的 HTML 渲染方法萌京。
我們也可以自定義進(jìn)行一些安全配置
- 配置 HTTP 中的 http-only 頭,讓前端js不能操作 Cookie
- 輸入檢查宏浩,在用戶提交數(shù)據(jù)時(shí)知残,使用 XSSFilter 過(guò)濾掉不安全的數(shù)據(jù)
- 輸出檢查,在頁(yè)面渲染的時(shí)候比庄,過(guò)濾掉危險(xiǎn)的數(shù)據(jù)
CSRF 攻擊
CSRF 跨站請(qǐng)求偽造求妹,是一種利用用戶身份,執(zhí)行一些用戶非本意的操作
如圖所示:
- 用戶先登錄了服務(wù)器B佳窑,然后去訪問(wèn)服務(wù)器C
- 服務(wù)器C通過(guò)惡意腳本制恍,冒充A去調(diào)用服務(wù)器B上的某個(gè)功能
- 對(duì)于服務(wù)器B來(lái)說(shuō),還以為這是A發(fā)起的請(qǐng)求华嘹,就當(dāng)作正常請(qǐng)求處理了
試想一下吧趣,如果C冒充A進(jìn)行了一次轉(zhuǎn)賬法竞,必定會(huì)造成大量的經(jīng)濟(jì)損失耙厚。
CSRF 防御方式
防御CSRF 主要有以下幾種方式:
- 驗(yàn)證碼
每一次請(qǐng)求都要求用戶驗(yàn)證,以確保請(qǐng)求真實(shí)可靠岔霸。
即:利用惡意腳本不能識(shí)別復(fù)雜的驗(yàn)證碼的特點(diǎn)薛躬,保證每次請(qǐng)求都是合法的
- Referer 檢查
檢查發(fā)起請(qǐng)求的服務(wù)器,是否為目標(biāo)服務(wù)器
即:HTTP 請(qǐng)求中的 Referer 頭傳遞了當(dāng)前請(qǐng)求的域名呆细,如果此域名是非法服務(wù)器的域名型宝,則需要禁止訪問(wèn)
- Token
利用不可預(yù)測(cè)性原則,每一請(qǐng)求必須帶上一段隨機(jī)碼絮爷,這段隨機(jī)碼由正常用戶保存趴酣,黑帽子不知道隨機(jī)碼,也就無(wú)法冒充用戶進(jìn)行請(qǐng)求了坑夯。
點(diǎn)擊劫持
點(diǎn)擊劫持是一種視覺(jué)欺騙的攻擊手段岖寞。攻擊者將需要攻擊的網(wǎng)站通過(guò) iframe 嵌套的方式嵌入自己的網(wǎng)頁(yè)中,并將 iframe 設(shè)置為透明柜蜈,在頁(yè)面中透出一個(gè)按鈕誘導(dǎo)用戶點(diǎn)擊仗谆。
就像一張圖片上面鋪了一層透明的紙一樣指巡,你看到的是攻擊者的頁(yè)面,但是其實(shí)這個(gè)頁(yè)面只是在底部隶垮,而你真正點(diǎn)擊的是被攻擊者透明化的另一個(gè)網(wǎng)頁(yè)藻雪。
如圖所示,當(dāng)你點(diǎn)擊了頁(yè)面上的按鈕之后狸吞,本以為會(huì).. 勉耀,而真正執(zhí)行的操作是關(guān)注了某人的博客。
點(diǎn)擊劫持防御
由于點(diǎn)擊劫持主要通過(guò) iframe蹋偏,所以在防御時(shí)瑰排,主要基于 iframe 去做
- 方案一: frame busting
if(self !== top) {
// 跳回原頁(yè)面
top.location = self.location
}
正常網(wǎng)站使用 js腳本判斷是否被惡意網(wǎng)站嵌入,如:博客網(wǎng)站監(jiān)測(cè)到被一個(gè) iframe 打開(kāi)暖侨,自動(dòng)跳轉(zhuǎn)到正常的頁(yè)面即可
- 方案二:使用 HTTP 中的 x-frame-options 頭椭住,控制 iframe 的加載,它有3個(gè)值可選:
DENY,表示頁(yè)面不允許通過(guò) iframe 的方式展示
SAMEORIGIN, 表示頁(yè)面可以在相同域名下通過(guò) iframe 的方式展示
ALLOW-FROM, 表示頁(yè)面可以在指定來(lái)源的 iframe 中展示字逗。
- 配置 iframe 的 sandbox 屬性
sandbox = "allow-same-origin" 則只能加載與主站同域的資源京郑。
服務(wù)器端攻擊
服務(wù)器端的攻擊方式也非常多,這里列舉幾個(gè)常見(jiàn)的
- SQL 注入攻擊
- 文件上傳漏洞
- 登錄認(rèn)證攻擊
- 應(yīng)用層拒絕服務(wù)器攻擊 (葫掉?
- webServer 配置安全 (些举?
SQL注入攻擊
SQL 注入和 XSS 一樣,都是違背了數(shù)據(jù)和代碼分離原則導(dǎo)致的攻擊方式
如圖所示俭厚,我們利用 SQL 注入户魏,就能在不需要密碼的情況下,直接登陸管理員的賬號(hào)挪挤。
攻擊的前提是叼丑,后端只用了簡(jiǎn)單的拼接 SQL 的方式去查詢數(shù)據(jù)。
/* 拼接出來(lái)的 sql 如下 */
select * from user where username = 'admin' or 1 = 1 and password = 'xxx'
/* 無(wú)論密碼輸入什么扛门,這條sql 預(yù)計(jì)都能查詢到管理員的信息 */
除此以外鸠信,SQL 注入還有以下幾種方式:
- 使用 SQL 探測(cè),猜數(shù)據(jù)庫(kù)表名论寨,列名:
通過(guò) MySQL 內(nèi)置的 benchmark 探測(cè)數(shù)據(jù)庫(kù)字段
如:一段偽造代碼MySQL select database as current if current[0] === 'a', benchmark(10000, '猜對(duì)了')
- 使用存儲(chǔ)過(guò)程執(zhí)行系統(tǒng)命令
通過(guò)內(nèi)置的方法或存儲(chǔ)過(guò)程執(zhí)行 shell 腳本
如: xp_cmdshell, sys_eval, sys_exec
- 字符串截取
如: MySQL 在處理超長(zhǎng)的字符串時(shí)星立,會(huì)顯示警告,但會(huì)執(zhí)行成功
注冊(cè)一個(gè) admin + 50 個(gè)空格的用戶葬凳,會(huì)觸發(fā)截?cái)啻麓梗罱K新增一個(gè)admin 用戶,這樣就能擁有管理員權(quán)限了火焰。
SQL 注入防御
防止 SQL 注入的最好的辦法就是劲装,不要手動(dòng)拼接 SQL 語(yǔ)句
- 最佳方案,使用預(yù)編譯語(yǔ)句綁定變量
通常是指框架提供的拼接 SQL 變量的方法
這樣的語(yǔ)義不會(huì)發(fā)生改變荐健,變量始終被當(dāng)成變量
- 嚴(yán)格限制數(shù)據(jù)類型酱畅,如果注入了其他類型的數(shù)據(jù)琳袄,直接報(bào)錯(cuò),不允許執(zhí)行
- 使用安全的存儲(chǔ)過(guò)程和系統(tǒng)函數(shù)
CRLF 注入
在注入攻擊中纺酸,換行符注入也是非常常見(jiàn)的一種攻擊方式
如果在 HTTP 請(qǐng)求頭中注入了2 個(gè)換行符窖逗,會(huì)導(dǎo)致?lián)Q行符后面的所有內(nèi)容都被解析成請(qǐng)求實(shí)體部分
攻擊中通常在 Set-Cookie 時(shí),注入換行符餐蔬,控制請(qǐng)求傳遞的內(nèi)容碎紊。
文件上傳漏洞
上傳文件時(shí)網(wǎng)頁(yè)開(kāi)發(fā)中的一個(gè)常見(jiàn)功能,如果不加處理樊诺,很容易就會(huì)造成攻擊仗考。
如圖所示,攻擊者上傳了一個(gè)木馬文件词爬,并且通過(guò)返回的URL進(jìn)行訪問(wèn)秃嗜,就能控制服務(wù)器。
通常我們會(huì)控制上傳文件的后綴名顿膨,但也不能完全解決問(wèn)題锅锨,攻擊者還可以通過(guò)以下方式進(jìn)行攻擊:
- 偽造正常文件
將木馬文件偽造成正常的后綴名進(jìn)行上傳
如果要避免這個(gè)問(wèn)題,我們可以繼續(xù)判斷上傳文件的文件頭前10個(gè)字節(jié)
- Apache 解析方式是從后往前解析恋沃,直到找到一個(gè)認(rèn)識(shí)的后綴名為止
如:上傳一個(gè)
abc.php.rar.rar.rar.rar
能繞過(guò)后綴名檢查必搞,但在執(zhí)行時(shí),被當(dāng)成一個(gè)php文件進(jìn)行執(zhí)行囊咏。
- IIS 會(huì)截?cái)喾痔?hào)進(jìn)行解析
如:
abc.asp;xx.png
能繞過(guò)后綴名檢查恕洲,但在執(zhí)行時(shí),被當(dāng)成一個(gè) asp 文件進(jìn)行執(zhí)行梅割。
- HTTP PUT 方法允許將文件上傳到指定位置
通過(guò) HTTP MOVE 方法霜第,還能修改上傳的文件名
通過(guò)二者配合,就能先上傳一個(gè)正常的后綴名炮捧,然后改為一個(gè)惡意的后綴名庶诡。
- PHP CGI 路徑問(wèn)題
執(zhí)行
http://abc.com/test.png/xxx.php
時(shí),會(huì)把 test.png 當(dāng)作 php 文件去解析咆课。
如果用戶正好是一段惡意的php腳本當(dāng)作一張圖片進(jìn)行上傳,就會(huì)觸發(fā)這個(gè)攻擊扯俱。
文件上傳漏洞防御
防御文件上傳漏洞书蚪,可以從以下幾點(diǎn)考慮:
將文件上傳的目錄設(shè)置為不可執(zhí)行
判斷文件類型
檢查 MIME Type,配置白名單
檢查后綴名迅栅,配置白名單殊校。
- 使用隨機(jī)數(shù)改寫文件名和文件路徑
上傳文件后,隨機(jī)修改文件名读存,讓攻擊者無(wú)法執(zhí)行攻擊
- 單獨(dú)設(shè)置文件服務(wù)器的域名
單獨(dú)做一個(gè)文件服務(wù)器为流,并使用單獨(dú)的域名呕屎,利用同源策略,規(guī)避客戶端攻擊
通常做法是將靜態(tài)資源資源放在 CDN 上
登錄認(rèn)證攻擊
登錄認(rèn)證攻擊可以理解為一種破解登錄的方法敬察。攻擊者通常采用以下幾種方式進(jìn)行破解:
- 彩虹表
攻擊者通過(guò)收集大量明文和 MD5 的對(duì)應(yīng)關(guān)系秀睛,用于破解 MD5 密文找出原文
對(duì)于彩虹表中的 MD5 密碼,我們可以加鹽莲祸,進(jìn)行二次加密蹂安,避免被破解
- Session Fixation 攻擊
利用應(yīng)用系統(tǒng)在服務(wù)器的 SessionID 固定不變機(jī)制,借助他人用相同的 SessionID 獲取認(rèn)證和授權(quán)
攻擊者登錄失敗后锐帜,后端返回了 SessionID田盈,攻擊者將 SessionID 交給正常用戶去登錄,登錄成功后缴阎,攻擊者就能使用這個(gè) SessionID 冒充正常用戶登錄了允瞧。
如果瀏覽器每一次登錄都刷新 SessionID 可以避免這個(gè)問(wèn)題。
- Session 保持攻擊
有些時(shí)候蛮拔,后端處于用戶體驗(yàn)考慮瓷式,只要這個(gè)用戶還活著,就不會(huì)讓這個(gè)用戶的Session失效
攻擊者可以通過(guò)不停發(fā)起請(qǐng)求语泽,可以讓這個(gè) session 一直活下去贸典。
登錄認(rèn)證防御方式
- 多因素認(rèn)證
密碼作為第一道防御,但在密碼驗(yàn)證成功后踱卵,我們還可以繼續(xù)驗(yàn)證: 動(dòng)態(tài)口令廊驼,數(shù)字證書,短信驗(yàn)證碼等惋砂,以保證用戶安全
由于短信和網(wǎng)頁(yè)完全是2套獨(dú)立的系統(tǒng)妒挎,攻擊者很難獲取到短信驗(yàn)證碼,也就無(wú)法進(jìn)行攻擊西饵。
除此之外酝掩,前端登錄認(rèn)證還有多種方式,如果你感興趣眷柔,可以去閱讀《前端登錄期虾,這一篇就夠了》。
應(yīng)用層拒絕服務(wù)攻擊
應(yīng)用層拒絕服務(wù)攻擊驯嘱,又叫 DDOS 攻擊镶苞,它指的是利用大量的請(qǐng)求造成資源過(guò)載,導(dǎo)致服務(wù)器不可用
通常有以下幾種 DDOS 攻擊方式:
- SYN Flood 洪水攻擊
利用 HTTP 3次握手機(jī)制鞠评,消耗服務(wù)器連接資源
如:攻擊者發(fā)起大量的 HTTP 請(qǐng)求茂蚓,但并不完成3次握手,而是之握手2次,這時(shí)服務(wù)器端會(huì)繼續(xù)等待直到超時(shí)聋涨。這時(shí)的服務(wù)器會(huì)一直忙于處理大量的垃圾請(qǐng)求晾浴,而無(wú)暇顧及正常請(qǐng)求。
- Slowloris攻擊
以非常低的速度發(fā)送 HTTP請(qǐng)求頭牍白,消耗服務(wù)器連接資源
如:攻擊者發(fā)送大量 HTTP 請(qǐng)求脊凰,但每個(gè)請(qǐng)求頭都發(fā)的很慢,每隔 10s 發(fā)送一個(gè)字符淹朋,服務(wù)器為了等待數(shù)據(jù)笙各,不得始終保持連接,這樣一來(lái)础芍,服務(wù)器連接數(shù)很快就被占光了杈抢。
- HTTP POST DOS
發(fā)送 HTTP 時(shí),指定一個(gè)非常大的 Content-Length 然后以很長(zhǎng)的時(shí)間間隔發(fā)送仑性,消耗服務(wù)器連接資源惶楼。
- CC攻擊
針對(duì)一些非常消耗資源的頁(yè)面,不斷發(fā)起請(qǐng)求诊杆。
如: 頁(yè)面中的某些頁(yè)面歼捐,需要后端做大量的運(yùn)算,或者需要做非常耗時(shí)的數(shù)據(jù)庫(kù)查詢晨汹。在大量的請(qǐng)求下豹储,服務(wù)器的 CPU 內(nèi)存等資源可能就被占光了。
- Server Limit DOS
通過(guò) XSS 注入一段超長(zhǎng)的 Cookie淘这,導(dǎo)致超出 Web 服務(wù)器所能承受的 Request Header 長(zhǎng)度剥扣,服務(wù)器就會(huì)拒絕此服務(wù)。
- ReDOS
針對(duì)一些缺陷的正則表達(dá)式铝穷,發(fā)起大量請(qǐng)求钠怯,耗光系統(tǒng)資源
應(yīng)用層拒絕服務(wù)攻擊防御
對(duì)于應(yīng)用層拒絕服務(wù)攻擊,目前也沒(méi)有特別完美的解決方案曙聂,不過(guò)我們還是可以進(jìn)行一些優(yōu)化
- 應(yīng)用代碼做好性能優(yōu)化
合理使用 Redis晦炊,Memcache 等緩存方案,減少 CPU 資源使用率
- 網(wǎng)絡(luò)架構(gòu)上做好優(yōu)化
后端搭建負(fù)載均衡
靜態(tài)資源使用 CDN 進(jìn)行管理
- 限制請(qǐng)求頻率
服務(wù)器計(jì)算所有 IP 地址的請(qǐng)求頻率宁脊,篩選出異常的IP 進(jìn)行禁用断国。
可以使用 LRU 算法,緩存前 1000 條請(qǐng)求的 IP朦佩,如果有IP請(qǐng)求頻率過(guò)高并思,就進(jìn)行禁用
其實(shí),處理 DDOS 核心思路就是禁用不可信任的用戶语稠,確保資源都是被正常的用戶所使用。
WebServer 配置安全
我們?cè)诓渴?Web 應(yīng)用的時(shí)候,經(jīng)常會(huì)用到 Nginx仙畦,Apache输涕,IIS,Tomcat慨畸,Jboss等 Web 服務(wù)器莱坎,這些服務(wù)器本身也存在一些安全隱患,如果配置不當(dāng)寸士,很容易受到攻擊
在配置 Web 服務(wù)器時(shí)檐什,可以參考以下幾點(diǎn):
- 以用戶權(quán)限運(yùn)行 Web 服務(wù)器
遵守最小權(quán)限原則,以最小權(quán)限身份運(yùn)行 Web 服務(wù)器弱卡,限制被入侵后的權(quán)限乃正。
- 刪除可視化后臺(tái)
運(yùn)行Tomcat,Jboss等 Web 服務(wù)器時(shí)婶博,默認(rèn)會(huì)開(kāi)啟一個(gè)可視化的運(yùn)營(yíng)后臺(tái)瓮具,運(yùn)行在8080端口,并且第一次訪問(wèn)是沒(méi)有認(rèn)證的凡人。
攻擊者可以利用可視化后臺(tái)名党,遠(yuǎn)程加載一段 war包 或者上傳木馬文件,進(jìn)行控制挠轴。
- 及時(shí)更新版本
主流的Web服務(wù)器传睹,每隔一段時(shí)間就會(huì)修復(fù)一些漏洞,所以記得及時(shí)更新版本
總結(jié)
本文介紹了 Web 安全的基本概念岸晦,以及大量的攻防技巧欧啤,其實(shí)這只是 Web 安全中的冰山一角,如果你對(duì)此感興趣委煤,不妨在安全領(lǐng)域繼續(xù)深耕學(xué)習(xí)堂油,一定能看到更廣闊一片天。
對(duì)于一個(gè)開(kāi)發(fā)者來(lái)說(shuō)碧绞,我們應(yīng)該在寫代碼時(shí)就將安全考慮其中府框,形成自己的一套安全開(kāi)發(fā)體系,做到心中有安全讥邻,時(shí)時(shí)考慮安全迫靖,就能無(wú)形之中化解不法分子的攻擊。
以上