安全 - 防范常見的 Web 攻擊

學習完整課程請移步 互聯(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 是必須的,但是一般我們會從兩個方面同時入手:

  1. Web 端
    • 有效性檢驗酝蜒。
    • 限制字符串輸入的長度誊辉。
  2. 服務(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 攻擊

  1. 前端陈瘦,服務(wù)端,同時需要字符串輸入的長度限制潮售。
  2. 前端痊项,服務(wù)端,同時需要對HTML轉(zhuǎn)義處理酥诽。將其中的 < ,> 等特殊字符進行轉(zhuǎn)義編碼鞍泉。

CSRF 攻擊

什么是 CSRF 攻擊

跨站點請求偽造,指攻擊者通過跨站請求肮帐,以合法的用戶的身份進行非法操作咖驮。可以這么理解 CSRF 攻擊:攻擊者盜用你的身份训枢,以你的名義向第三方網(wǎng)站發(fā)送惡意請求托修。CRSF 能做的事情包括利用你的身份發(fā)郵件,發(fā)短信恒界,進行交易轉(zhuǎn)賬睦刃,甚至盜取賬號信息。

如何防范 CSRF 攻擊

  1. 安全框架十酣,例如 Spring Security涩拙。
  2. token 機制。在 HTTP 請求中進行 token 驗證耸采,如果請求中沒有 token 或者 token 內(nèi)容不正確兴泥,則認為 CSRF 攻擊而拒絕該請求。
  3. 驗證碼虾宇。通常情況下搓彻,驗證碼能夠很好的遏制 CSRF 攻擊,但是很多情況下,出于用戶體驗考慮好唯,驗證碼只能作為一種輔助手段竭沫,而不是最主要的解決方案。
  4. 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ù)端就被人黑了。

如何防范文件上傳漏洞

  1. 文件上傳的目錄設(shè)置為不可執(zhí)行逆皮。
  2. 判斷文件類型宅粥。在判斷文件類型的時候,可以結(jié)合使用 MIME Type页屠,后綴檢查等方式粹胯。因為對于上傳文件,不能簡單地通過后綴名稱來判斷文件的類型辰企,因為攻擊者可以將可執(zhí)行文件的后綴名稱改為圖片或其他后綴類型风纠,誘導(dǎo)用戶執(zhí)行。
  3. 對上傳的文件類型進行白名單校驗牢贸,只允許上傳可靠類型竹观。
  4. 上傳的文件需要進行重新命名,使攻擊者無法猜想上傳文件的訪問路徑,將極大地增加攻擊成本臭增,同時向 shell, php, rar, ara 這種文件懂酱,因為重命名而無法成功實施攻擊。
  5. 限制上傳文件的大小誊抛。
  6. 單獨設(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)常遺落的安全點杆查。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市臀蛛,隨后出現(xiàn)的幾起案子亲桦,更是在濱河造成了極大的恐慌崖蜜,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件客峭,死亡現(xiàn)場離奇詭異豫领,居然都是意外死亡,警方通過查閱死者的電腦和手機舔琅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門等恐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搏明,你說我怎么就攤上這事鼠锈。” “怎么了星著?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粗悯。 經(jīng)常有香客問我虚循,道長,這世上最難降的妖魔是什么样傍? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任横缔,我火速辦了婚禮,結(jié)果婚禮上衫哥,老公的妹妹穿的比我還像新娘茎刚。我一直安慰自己,他們只是感情好撤逢,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布膛锭。 她就那樣靜靜地躺著,像睡著了一般蚊荣。 火紅的嫁衣襯著肌膚如雪初狰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天互例,我揣著相機與錄音奢入,去河邊找鬼。 笑死媳叨,一個胖子當著我的面吹牛腥光,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播糊秆,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼武福,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扩然?” 一聲冷哼從身側(cè)響起艘儒,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后界睁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觉增,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年翻斟,在試婚紗的時候發(fā)現(xiàn)自己被綠了逾礁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡访惜,死狀恐怖嘹履,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情债热,我是刑警寧澤砾嫉,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站窒篱,受9級特大地震影響焕刮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墙杯,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一配并、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧高镐,春花似錦溉旋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岩喷,卻和暖如春恕沫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纱意。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工婶溯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人偷霉。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓迄委,卻偏偏與公主長得像,于是被迫代替她去往敵國和親类少。 傳聞我的和親對象是個殘疾皇子叙身,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容