xss
XSS (Cross-Site Scripting),跨站指令碼攻擊,因為縮寫和 CSS重疊,所以只能叫 XSS。
「跨站指令碼攻擊」
是指透過存在安全漏洞的Web⽹站註冊⽤戶的瀏覽器內運⾏⾮法的HTML標籤或JavaScript 進⾏的⼀種攻擊。
跨站指令碼攻擊有可能造成以下影響:
利⽤虛假輸⼊表單騙取⽤戶個⼈資訊。
利⽤指令碼竊取⽤戶的Cookie值,被害者在不知情的情況下,幫助攻擊者傳送惡意請求。
顯示偽造的⽂章或圖⽚。
xss攻擊分類
反射型 - url引數直接注⼊
// 普通http://localhost:3000/?from=china// alert嘗試http://localhost:3000/?from=// 獲取Cookiehttp://localhost:3000/?from=// 短域名偽造 https://dwz。cn/// 偽造cookie⼊入侵 chromedocument。cookie=“kaikeba:sess=eyJ1c2VybmFtZSI6Imxhb3dhbmciLCJfZXhwaXJlIjoxNTUzNTY1MDAxODYxLCJfbWF4QWdlIjo4NjQwMDAwMH0=
儲存型 - 儲存到DB後讀取時注⼊
// 評論// 跨站指令碼注⼊入我來了了XSS攻擊的危害 - Scripting能⼲啥就能⼲啥
XSS攻擊的危害 - Scripting能⼲啥就能⼲啥
獲取⻚⾯資料
獲取Cookies
劫持前端邏輯
傳送請求
偷取⽹站的任意資料
偷取⽤戶的資料
偷取⽤戶的秘密和登入態
欺騙⽤戶
防範⼿段
ejs轉義⼩知識
<% code %>⽤用於執行其中javascript程式碼;<%= code %>會對code進行html轉義;<%- code %>將不會行轉義
HEAD
ctx。set(‘X-XSS-Protection’, 0) // 禁止XSS過濾// http://localhost:3000/?from= 可以攔截 但偽一下就不行了
0代表禁⽌XSS過濾。
啟⽤XSS過濾(通常瀏覽器是預設的)。 如果檢測到跨站指令碼攻擊,瀏覽器將清除⻚⾯(刪除 不安全的部分)。
mode=block 啟⽤XSS過濾。 如果檢測到攻擊,瀏覽器將不會清除⻚⾯,⽽是阻⽌⻚⾯載入。
report= (Chromium only)
啟⽤XSS過濾。 如果檢測到跨站指令碼攻擊,瀏覽器將清除⻚⾯並使⽤CSP report-uri 指令的 功能傳送違規報告。
CSP
「內容安全策略」
(CSP, Content Security Policy) 是⼀個附加的安全層,⽤於幫助檢測和緩解 某些型別的攻擊,包括跨站指令碼 (XSS) 和資料注⼊等攻擊。 這些攻擊可⽤於實現從資料竊 取到⽹站破壞或作為惡意軟體分發版本等⽤途。
CSP 本質上就是建⽴⽩名單,開發者明確告訴瀏覽器哪些外部資源可以載入和執⾏。我們 只需要配置規則,如何攔截是由瀏覽器⾃⼰實現的。我們可以透過這種⽅式來儘量減少 XSS 攻擊。
跳脫字元
⿊名單
⽤戶的輸⼊永遠不可信任的,最普遍的做法就是轉義輸⼊輸出的內容,對於引號、尖括號、斜 槓進⾏轉義,對於富⽂本來說,顯然不能透過上⾯的辦法來轉義所有字元,因為這樣會把需要的格式也過濾掉。 對於這種情況,通常採⽤⽩名單過濾的辦法,當然也可以透過⿊名單過濾,但是考慮到需要過 濾的標籤和標籤屬性實在太多,更加推薦使⽤⽩名單的⽅式。
⽩名單
HttpOnly Cookie
這是預防XSS攻擊竊取⽤戶cookie最有效的防禦⼿段。Web應 ⽤程式在設定cookie時,將 其屬性設為HttpOnly,就可以避免該⽹⻚的cookie被客戶端惡意JavaScript竊取,保護⽤ 戶cookie資訊。
response。addHeader(”Set-Cookie“, ”uid=112; Path=/; HttpOnly“)
CSRF
CSRF(Cross Site Request Forgery),即跨站請求偽造,是⼀種常⻅的Web攻擊,它利⽤⽤戶已 登入的身份,在⽤戶毫不知情的情況下,以⽤戶的名義完成⾮法操作。
⽤戶已經登入了站點 A,並在本地記錄了 cookie
在⽤戶沒有登出站點 A 的情況下(也就是 cookie ⽣效的情況下),訪問了惡意攻擊者提供的引 誘危險站點 B (B 站點要求訪問站點A)。
站點 A 沒有做任何 CSRF 防禦
登入 http://localhost:4000/csrf。html
CSRF攻擊危害
利⽤⽤戶登入態
⽤戶不知情
完成業務請求
盜取⽤戶資⾦(轉賬,消費)
冒充⽤戶發帖背鍋
損害⽹站聲譽
防禦
禁⽌第三⽅⽹站帶Cookie - 有相容性問題
Referer Check - Https不傳送referer
驗證碼
點選劫持 - clickjacking
點選劫持是⼀種視覺欺騙的攻擊⼿段。攻擊者將需要攻擊的⽹站透過 iframe 巢狀的⽅式嵌⼊⾃ ⼰的⽹⻚中,並將 iframe 設定為透明,在⻚⾯中透出⼀個按鈕誘導⽤戶點選。
// 登入http://localhost:4000/clickjacking。html
防禦
X-FRAME-OPTIONS
X-FRAME-OPTIONS 是⼀個 HTTP 響應頭,在現代瀏覽器有⼀個很好的⽀持。這個 HTTP 響應頭 就是為了防禦⽤ iframe 巢狀的點選劫持攻擊。
該響應頭有三個值可選,分別是
DENY,表示⻚⾯不允許透過 iframe 的⽅式展示
SAMEORIGIN,表示⻚⾯可以在相同域名下透過 iframe 的⽅式展示
ALLOW-FROM,表示⻚⾯可以在指定來源的 iframe 中展示
ctx。set(‘X-FRAME-OPTIONS’, ‘DENY’)
JS⽅式
以上程式碼的作⽤就是當透過 iframe 的⽅式載入⻚⾯時,攻擊者的⽹⻚直接不顯示所有內容了。
SQL注⼊
// 填⼊入特殊密碼1‘or’1‘=’1// 拼接後的SQLSELECT *FROM test。userWHERE username = ‘laowang’AND password = ‘1’or‘1’=‘1’
防禦
所有的查詢語句建議使⽤資料庫提供的引數化查詢接⼝**,引數化的語句使⽤引數⽽不是將⽤戶 輸⼊變數嵌⼊到 SQL 語句中,即不要直接拼接 SQL 語句。例如 Node。js 中的 mysqljs 庫的 query ⽅法中的 ? 佔位引數。
嚴格限制Web應⽤的資料庫的操作許可權**,給此⽤戶提供僅僅能夠滿⾜其⼯作的最低許可權,從⽽ 最⼤限度的減少注⼊攻擊對資料庫的危害
後端程式碼檢查輸⼊的資料是否符合預期**,嚴格限制變數的型別,例如使⽤正則表示式進⾏⼀些 匹配處理。
對進⼊資料庫的特殊字元(‘,”,\,<,>,&,*,; 等)進⾏轉義處理,或編碼轉換**。基本上 所有的後端語⾔都有對字串進⾏轉義處理的⽅法,⽐如 lodash 的 lodash。_escapehtmlchar 庫。
OS命令注⼊
// 以 Node。js 為例,假如在介面中需要從 github 下載使用者指定的 repoconst exec = require(’mz/child_process‘)。exec;let params = {/* ⽤使用者輸入的引數 */};exec(`git clone ${params。repo} /some/path`);
// 以 Node。js 為例,假如在介面中需要從 github 下載使用者指定的 repoconst exec = require(’mz/child_process‘)。exec;let params = {/* ⽤使用者輸入的引數 */};exec(`git clone ${params。repo} /some/path`);
如果傳⼊的引數是會怎樣
https://github。com/xx/xx。git && rm -rf /* &&
請求劫持
DNS劫持
顧名思義,DNS伺服器(DNS解析各個步驟)被篡改,修改了域名解析的結果,使得訪問到的不是預期 的ip
HTTP劫持 運營商劫持,此時⼤概只能升級HTTPS了
DDOS
http://www。ruanyifeng。com/blog/2018/06/ddos。html 阮⼀峰
DDOS (distributed denial of service)不是⼀種攻擊,⽽是⼀⼤類攻擊的總稱。它有⼏⼗種類型,新的攻擊⽅法還在不斷髮明出來。 ⽹站運⾏的各個環節,都可以是攻擊⽬標。只要把⼀個環節攻破,使得整個流程跑不起來,就達到了 癱瘓服務的⽬的。
其中,⽐較常⻅的⼀種攻擊是 cc 攻擊。它就是簡單粗暴地送來⼤量正常的請求,超出伺服器的最⼤承 受量,導致宕機。我遭遇的就是 cc 攻擊,最多的時候全世界⼤概20多個 IP 地址輪流發出請求,每個 地址的請求量在每秒200次~300次。我看訪問⽇志的時候,就覺得那些請求像洪⽔⼀樣湧來,⼀眨眼 就是⼀⼤堆,⼏分鐘的時間,⽇志⽂件的體積就⼤了100MB。說實話,這隻能算⼩攻擊,但是我的個 ⼈⽹站沒有任何防護,伺服器還是跟其他⼈共享的,這種流量⼀來⽴刻就下線了。
防禦⼿段
- 備份⽹站 備份⽹站不⼀定是全功能的,如果能做到全靜態瀏覽,就能滿⾜需求。最低限度應該可以顯示公告,告訴⽤戶,⽹站出了問題,正在全⼒搶修。 - HTTP 請求的攔截 硬體 伺服器 防⽕牆 - 頻寬擴容 + CDN 提⾼犯罪成本