android 访问服务器sql_XSS 攻击、CSRF 攻击、SQL 注入、流量劫持(DNS 劫持、HTTP 劫持)—— 浏览器安全
今天看了 jsliang 大佬關(guān)于網(wǎng)絡(luò)安全的文章,為了加深一下印象,自己動(dòng)手寫一下。
主要參考文章:網(wǎng)絡(luò)安全 ——— jsliang
XSS攻擊
XSS(Cross Site Script)跨站腳本攻擊,指的是向網(wǎng)頁(yè)注入惡意代碼,并對(duì)網(wǎng)頁(yè)進(jìn)行篡改。在用戶瀏覽時(shí),從而獲取用戶隱私數(shù)據(jù)的一種攻擊方式。一般為 JavaScript 。
- 竊取 Cookie 信息,模擬用戶進(jìn)行登錄,然后進(jìn)行轉(zhuǎn)賬等操作
- 使用 addEventListener 監(jiān)聽(tīng)用戶行為,監(jiān)聽(tīng)鍵盤事件,竊取用戶的銀行卡密碼等。并發(fā)送到攻擊者的服務(wù)器
- 通過(guò)修改 DOM 偽造假的登錄窗口,欺騙用戶輸入用戶名和密碼等
- 生成浮窗廣告等
- 修改 URL 跳轉(zhuǎn)到惡意網(wǎng)站
- ....
防御 :
- 輸入檢查:對(duì)輸入內(nèi)容中的 script 和 iframe 等標(biāo)簽進(jìn)行轉(zhuǎn)義或者過(guò)濾
- 設(shè)置 httpOnly(后端): 設(shè)置此屬性可防止 JavaScript 獲取 Cookie, 只能在 HTTP請(qǐng)求過(guò)程中使用 Cookie
- 開(kāi)啟 CSP 白名單 :即開(kāi)啟白名單,可以阻止白名單意外的資源加載和運(yùn)行 (參考:web安全csp白名單的弊端、開(kāi)啟CSP網(wǎng)頁(yè)安全政策防止XSS攻擊)
CSRF攻擊
CSRF(Cross—Site Request Forgery) 跨站請(qǐng)求偽造。簡(jiǎn)單說(shuō)一下自己的理解,不對(duì)的地方請(qǐng)指正。CSRF攻擊主要是利用用戶登陸過(guò)的網(wǎng)站生成的Cookie,也就是這個(gè)用戶的憑證,操控用戶,進(jìn)行轉(zhuǎn)賬等有利于攻擊者的行為。但并不是像XSS攻擊一樣竊取Cookie,攻擊者不知道Cookie的內(nèi)容,只是利用而已。 例子: 網(wǎng)站A為用戶正常瀏覽的網(wǎng)站,網(wǎng)站B為攻擊者的惡意網(wǎng)站。假設(shè)用戶已經(jīng)登錄網(wǎng)站A獲取到了Cookie,這時(shí)候用戶打開(kāi)網(wǎng)站B,這時(shí)候網(wǎng)站B運(yùn)行惡意代碼,請(qǐng)求訪問(wèn)網(wǎng)站A或者說(shuō)網(wǎng)站A某個(gè)api(例如網(wǎng)站A的轉(zhuǎn)賬api),通常是在用戶不知情的情況下。
防御:
- 驗(yàn)證 Token:瀏覽器請(qǐng)求服務(wù)器時(shí),服務(wù)器返回一個(gè) token,之后每個(gè)請(qǐng)求都需要同時(shí)帶上 token 和 Cookie 才會(huì)被認(rèn)為是合法請(qǐng)求
- 驗(yàn)證 Referer:通過(guò)驗(yàn)證請(qǐng)求頭的 Referer 來(lái)驗(yàn)證來(lái)源站點(diǎn),但請(qǐng)求頭很容易偽造
- 設(shè)置 SameSite:設(shè)置 Cookie 的 SameSite,可以讓 Cookie 不隨跨站請(qǐng)求發(fā)出,但瀏覽器兼容不一
具體實(shí)現(xiàn)和原理參考:CSRF攻擊與防御
SQL注入
主要是通過(guò)往輸入框里面輸入 SQL語(yǔ)句,利用 SQL的語(yǔ)法識(shí)別機(jī)制,從而修改數(shù)據(jù)庫(kù)實(shí)際上運(yùn)行的SQL語(yǔ)句,以達(dá)到攻擊者的目的
例如: (假設(shè)前端沒(méi)有做用戶名和密碼的校驗(yàn)) 用戶輸入的用戶名:Kite OR '1 = 1'-- 用戶輸入的密碼:123456
預(yù)想執(zhí)行的SQL語(yǔ)句:SELECT * FROM user WHERE username='Kite' AND psw='123456'
實(shí)際執(zhí)行的SQL語(yǔ)句:SELECT * FROM user WHERE username='Kite' OR 1 = 1 --' AND psw='xxxx'
"--":是SQL的注釋代碼。也就是說(shuō) 1 = 1 后面的代碼無(wú)效。 結(jié)果就變成無(wú)論輸入的用戶名和密碼是否正確,都可以登錄。因?yàn)?1 = 1 肯定是為 true 。
防御:
- 通過(guò)正則驗(yàn)證用戶輸入的內(nèi)容是否包含引起隱患的字符
- 一般由后端來(lái)處理。
流量劫持
DNS 劫持
建過(guò)站點(diǎn)的朋友應(yīng)該都知道,需要域名解析,不然無(wú)法通過(guò)自己購(gòu)買的域名訪問(wèn)自己的服務(wù)器。域名解析,也就是通過(guò) DNS 服務(wù)器實(shí)現(xiàn)域名和服務(wù)器IP的映射,例如 http://kite1874.com 對(duì)應(yīng)的 IP 為 127.0.0.1。你訪問(wèn) http://kite1874.com 的時(shí)候,實(shí)際訪問(wèn)的是 127.0.0.1 這個(gè)IP地址對(duì)應(yīng)的服務(wù)器。實(shí)際上輸入 127.0.0.1 也可以正常訪問(wèn)站點(diǎn)。之所以需要使用域名進(jìn)行訪問(wèn),是為了方便記憶和SEO
DNS劫持,也就是通過(guò)篡改域名映射的IP,導(dǎo)致用戶訪問(wèn)的網(wǎng)站,變成攻擊者準(zhǔn)備的惡意網(wǎng)站。
例如:
- 篡改路由器 DNS 配置。
- 篡改 Hosts 文件貌似也可以做到(自己腦補(bǔ)的)
- 網(wǎng)絡(luò)供應(yīng)商可以修改,如果有意這樣做的話。
- ...
HTTP 劫持
大家都知道,HTTP 請(qǐng)求是明文的。而 HTTP 劫持主要是篡改請(qǐng)求的內(nèi)容。例如:你打開(kāi)一個(gè)網(wǎng)頁(yè),請(qǐng)求返回一個(gè)HTML文件,然后有意者修改這個(gè)HTML,往里面插了個(gè)小廣告,然后再返回給你。廣告還算小事,要是返回一個(gè)表單讓你輸入賬號(hào)密碼呢?你全然不知,還以為這是原來(lái)網(wǎng)站上的表單呢
防御:
- HTTP 傳輸是明文,所以需要給它加密。也就是 HTTPS 協(xié)議。需要申請(qǐng) SSL 證書。
來(lái)自阿怪自己的博客 —— XSS攻擊、CSRF攻擊、SQL注入、流量劫持(DNS劫持、HTTP劫持)—— 瀏覽器安全 - 阿怪的小破站
總結(jié)
以上是生活随笔為你收集整理的android 访问服务器sql_XSS 攻击、CSRF 攻击、SQL 注入、流量劫持(DNS 劫持、HTTP 劫持)—— 浏览器安全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python 获取文件列表_Python
- 下一篇: elementui table渲染不出来