學習完整課程請移步 互聯(lián)網(wǎng) Java 全棧工程師
SQL 注入攻擊
SQL 注入攻擊朗兵,這個是最常聊到的話題,使用過 Java 的開發(fā)人員晃洒,第一個反應(yīng)就是一定要使用預(yù)編譯的 PrepareStatement
什么是 SQL 注入攻擊
攻擊者在 HTTP 請求中注入惡意的 SQL 代碼佑吝,服務(wù)器使用參數(shù)構(gòu)建數(shù)據(jù)庫 SQL 命令時围段,惡意 SQL 被一起構(gòu)造,并在數(shù)據(jù)庫中執(zhí)行台腥。
用戶登錄宏赘,輸入用戶名 Lusifer,密碼 'or '1' = '1'
黎侈,如果此時使用參數(shù)構(gòu)造的方式察署,就會出現(xiàn)
select * from user where name = 'Lusifer' and password = '' or '1'='1'
不管用戶名和密碼是什么內(nèi)容,使查詢出來的用戶列表不為空峻汉。
現(xiàn)在還會存在 SQL 注入攻擊么
這個問題在使用了預(yù)編譯的 PrepareStatement 后贴汪,安全性得到了很大的提高,但是真實情況下休吠,很多同學并不重視扳埂,還是會留下漏洞的。舉個例子瘤礁,看看阳懂,大家的代碼中對 sql 中 in 操作,使用了預(yù)編譯蔚携,還是仍然還是通過字符串拼接呢希太?
如何防范 SQL 注入攻擊
使用預(yù)編譯的 PrepareStatement 是必須的,但是一般我們會從兩個方面同時入手:
- Web 端
- 有效性檢驗酝蜒。
- 限制字符串輸入的長度誊辉。
- 服務(wù)端
- 不用拼接 SQL 字符串。
- 使用預(yù)編譯的 PrepareStatement亡脑。
- 有效性檢驗堕澄。(為什么服務(wù)端還要做有效性檢驗?第一準則霉咨,外部都是不可信的蛙紫,防止攻擊者繞過 Web 端請求)
- 過濾 SQL 需要的參數(shù)中的特殊字符。比如單引號途戒、雙引號坑傅。
XSS 攻擊
什么是 XSS 攻擊
跨站點腳本攻擊,指攻擊者通過篡改網(wǎng)頁喷斋,嵌入惡意腳本程序唁毒,在用戶瀏覽網(wǎng)頁時蒜茴,控制用戶瀏覽器進行惡意操作的一種攻擊方式。
假設(shè)頁面上有一個表單
<input type="text" name="name" value="Lusifer"/>
如果浆西,用戶輸入的不是一個正常的字符串粉私,而是
"/><script>alert("haha")</script><!-
此時,頁面變成下面的內(nèi)容近零,在輸入框 input 的后面帶上了一段腳本代碼诺核。
<input type="text" name="name" value="Lusifer"/><script>alert("haha")</script><!-"/>
這端腳本程序只是彈出一個消息框,并不會造成什么危害久信,攻擊的威力取決于用戶輸入了什么樣的腳本窖杀,只要稍微修改,便可使攻擊極具攻擊性入篮。
如何防范 XSS 攻擊
- 前端陈瘦,服務(wù)端,同時需要字符串輸入的長度限制潮售。
- 前端痊项,服務(wù)端,同時需要對HTML轉(zhuǎn)義處理酥诽。將其中的
<
,>
等特殊字符進行轉(zhuǎn)義編碼鞍泉。
CSRF 攻擊
什么是 CSRF 攻擊
跨站點請求偽造,指攻擊者通過跨站請求肮帐,以合法的用戶的身份進行非法操作咖驮。可以這么理解 CSRF 攻擊:攻擊者盜用你的身份训枢,以你的名義向第三方網(wǎng)站發(fā)送惡意請求托修。CRSF 能做的事情包括利用你的身份發(fā)郵件,發(fā)短信恒界,進行交易轉(zhuǎn)賬睦刃,甚至盜取賬號信息。
如何防范 CSRF 攻擊
- 安全框架十酣,例如 Spring Security涩拙。
- token 機制。在 HTTP 請求中進行 token 驗證耸采,如果請求中沒有 token 或者 token 內(nèi)容不正確兴泥,則認為 CSRF 攻擊而拒絕該請求。
- 驗證碼虾宇。通常情況下搓彻,驗證碼能夠很好的遏制 CSRF 攻擊,但是很多情況下,出于用戶體驗考慮好唯,驗證碼只能作為一種輔助手段竭沫,而不是最主要的解決方案。
- referer 識別骑篙。在 HTTP Header 中有一個字段 Referer,它記錄了 HTTP 請求的來源地址森书。如果 Referer 是其他網(wǎng)站靶端,就有可能是 CSRF 攻擊,則拒絕該請求凛膏。但是杨名,服務(wù)器并非都能取到 Referer。很多用戶出于隱私保護的考慮猖毫,限制了 Referer 的發(fā)送台谍。在某些情況下,瀏覽器也不會發(fā)送 Referer吁断,例如 HTTPS 跳轉(zhuǎn)到 HTTP趁蕊。
文件上傳漏洞
什么是文件上傳漏洞
文件上傳漏洞,指的是用戶上傳一個可執(zhí)行的腳本文件仔役,并通過此腳本文件獲得了執(zhí)行服務(wù)端命令的能力掷伙。
許多第三方框架、服務(wù)又兵,都曾經(jīng)被爆出文件上傳漏洞任柜,比如很早之前的 Struts2,以及富文本編輯器等等沛厨,可能被一旦被攻擊者上傳惡意代碼宙地,有可能服務(wù)端就被人黑了。
如何防范文件上傳漏洞
- 文件上傳的目錄設(shè)置為不可執(zhí)行逆皮。
- 判斷文件類型宅粥。在判斷文件類型的時候,可以結(jié)合使用
MIME Type
页屠,后綴檢查等方式粹胯。因為對于上傳文件,不能簡單地通過后綴名稱來判斷文件的類型辰企,因為攻擊者可以將可執(zhí)行文件的后綴名稱改為圖片或其他后綴類型风纠,誘導(dǎo)用戶執(zhí)行。 - 對上傳的文件類型進行白名單校驗牢贸,只允許上傳可靠類型竹观。
- 上傳的文件需要進行重新命名,使攻擊者無法猜想上傳文件的訪問路徑,將極大地增加攻擊成本臭增,同時向
shell
,php
,rar
,ara
這種文件懂酱,因為重命名而無法成功實施攻擊。 - 限制上傳文件的大小誊抛。
- 單獨設(shè)置文件服務(wù)器的域名列牺。
訪問控制
一般來說,“基于 URL 的訪問控制”是最常見的拗窃。
垂直權(quán)限管理
訪問控制實際上是建立用戶與權(quán)限之間的對應(yīng)關(guān)系瞎领,即“基于角色的訪問控制”,RBAC随夸。不同角色的權(quán)限有高低之分九默。高權(quán)限角色訪問低權(quán)限角色的資源往往是被允許的,而低權(quán)限角色訪問高權(quán)限的資源往往被禁止的宾毒。在配置權(quán)限時驼修,應(yīng)當使用“最小權(quán)限原則”,并使用“默認拒絕”的策略诈铛,只對有需要的主體單獨配置”允許”的策略乙各,這在很多時候能夠避免發(fā)生“越權(quán)訪問”。
例如癌瘾,Spring Security觅丰, Apache Shiro 都可以建立垂直權(quán)限管理。
水平權(quán)限管理
水平權(quán)限問題在同一個角色上妨退,系統(tǒng)只驗證了訪問數(shù)據(jù)的角色妇萄,沒有對角色內(nèi)的用戶做細分,由于水平權(quán)限管理是系統(tǒng)缺乏一個數(shù)據(jù)級的訪問控制所造成的咬荷,因此水平權(quán)限管理又可以稱之為“基于數(shù)據(jù)的訪問控制”冠句。
舉個理解,比如我們之前的一個助手產(chǎn)品幸乒,客戶端用戶刪除評論功能懦底,如果沒有做水平權(quán)限管理,即設(shè)置只有本人才可以刪除自己的評論罕扎,那么用戶通過修改評論id就可以刪除別人的評論這個就存在危險的越權(quán)操作聚唐。
這個層面,基本需要我們業(yè)務(wù)層面去處理腔召,但是這個也是最為經(jīng)常遺落的安全點杆查。