如何預(yù)防XSS和CSRF跨站攻擊

CSRF(Cross-site request forgery,跨站請(qǐng)求偽造),是通過偽造請(qǐng)求,冒充用戶在站內(nèi)進(jìn)行操作

比如,點(diǎn)擊發(fā)帖后會(huì)進(jìn)行如下GET請(qǐng)求

http://example.com/bbs/create_post.php?title=標(biāo)題&content=內(nèi)容

那么,如果我們模擬了請(qǐng)求的鏈接,那么只要有用戶點(diǎn)擊了這個(gè)鏈接,他就會(huì)在不知情的情況下發(fā)布了這一帖子,那么刪貼,發(fā)郵件等等都可以進(jìn)行偽造

http://example.com/bbs/create_post.php?title=攻擊&content=哈哈

如何防范 CSRF 攻擊

  • CSRF 攻擊之所以能夠成功:是因?yàn)楹诳涂梢酝耆珎卧煊脩舻恼?qǐng)求,該請(qǐng)求中所有的用戶驗(yàn)證信息都是存在于 cookie 中,因此黑客可以在不知道這些驗(yàn)證信息的情況下直接利用用戶自己的 cookie 來(lái)通過安全驗(yàn)證
  • 所以解決辦法是:在請(qǐng)求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中
  • 驗(yàn)證 HTTP Referer 字段
  • 關(guān)鍵操作只接受POST請(qǐng)求,因?yàn)镚ET請(qǐng)求的參數(shù)攜帶在URL中,很容易進(jìn)行模擬,而POST請(qǐng)求的參數(shù)在http body中
  • 驗(yàn)證碼,每次操作都需要用戶進(jìn)行互動(dòng),從而簡(jiǎn)單有效的防御了CSRF攻擊,但是驗(yàn)證碼太多,也會(huì)影響用戶體驗(yàn)
  • 可以在 HTTP 請(qǐng)求中以參數(shù)的形式加入一個(gè)隨機(jī)產(chǎn)生的 token,并在服務(wù)器端來(lái)驗(yàn)證這個(gè) token
  • 可以在 HTTP 頭中自定義的屬性里加入一個(gè)隨機(jī)產(chǎn)生的 token,通過XMLHttpRequest,可以給所有請(qǐng)求加上這個(gè)token,通過XMLHttpRequest 請(qǐng)求的地址不會(huì)被記錄到瀏覽器的地址欄,也不用擔(dān)心 token 會(huì)透過 Referer 泄露到其他網(wǎng)站中

注意:過濾用戶輸入的內(nèi)容不能阻擋 CSRF,我們需要做的是過濾請(qǐng)求的來(lái)源

XSS(Cross Site Scripting,跨站腳本攻擊),是注入攻擊的一種,特點(diǎn)是不對(duì)服務(wù)器端造成任何傷害,而是通過一些正常的站內(nèi)交互途徑

例如:發(fā)布評(píng)論,提交含有 JavaScript 的內(nèi)容文本,如果服務(wù)器端沒有過濾或轉(zhuǎn)義掉這些腳本,作為內(nèi)容發(fā)布到了頁(yè)面上,其他用戶訪問這個(gè)頁(yè)面的時(shí)候就會(huì)運(yùn)行這些腳本,或者是一些未授權(quán)的操作

while (true) { alert("你關(guān)不掉我~"); }

在輸入框中輸入document.cookie,可以直接獲得cookie中的內(nèi)容,所以,在重要的cookie參數(shù)中加入httpOnly屬性

XSS 是實(shí)現(xiàn) CSRF 的諸多途徑中的一條,一般習(xí)慣上把通過 XSS 來(lái)實(shí)現(xiàn)的 CSRF 稱為 XSRF

如何防御 XSS 攻擊

理論上,所有可輸入的地方?jīng)]有對(duì)輸入數(shù)據(jù)進(jìn)行處理的話,都會(huì)存在XSS漏洞,防御 XSS 攻擊最簡(jiǎn)單直接的方法,就是過濾用戶的輸入

可以直接對(duì)用戶的輸入進(jìn)行 HTML escape

<script>window.location.href=”http://www.baidu.com”;</script>

經(jīng)過 escape 之后,就不能執(zhí)行了

 <script>window.location.</script>

參考文章推薦
總結(jié) XSS 與 CSRF 兩種跨站攻擊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容