BACK
Featured image of post NodeJS 防止 xss 攻擊

NodeJS 防止 xss 攻擊

XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使使用者載入並執行攻擊者惡意製造的網頁程式。這些惡意網頁程式通常是JavaScript,但實際上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻擊成功後,攻擊者可能得到更高的權限(如執行一些操作)、私密網頁內容、對談和cookie等各種內容。

參考網站


簡介

xss 是常見的攻擊方式之一,不管是前端還是後端都要對此有所防範才行。
本文主要講解使用 NodeJS 開發的後端程序應該如何防範 xss 攻擊。


xss演示

xss 攻擊方式主要是在在頁面展示內容中摻雜 js代碼,以獲取網頁信息。

常見的攻擊地方有:

  • 電商產品評價區:某用戶提交的評價帶有可執行的js代碼,其他用戶查看該評論時就會執行那段js代碼
  • 博客網站:某用戶在博客的標題或者內容中帶有可執行的js代碼,其他用戶查看該博客時那段 js代碼 就會被執行。

比如在輸入框輸入

1
<script>alert(1234)</script>

別的用戶在自己頁面要展示上面這段內容個,頁面有可能會彈出一個彈窗。

這個例子只是彈出一個對話框,如果人家有惡意,獲取cookie 等信息,然後傳給自己的服務器,那後果真的很嚴重。


xss防禦

預防措施:轉義特殊字符

特殊符號轉換

1
2
3
4
5
6
& -> &amp;
< -> &lt;
> -> &gt;
" -> &quot;
' -> &#x27;
/ -> &#x2F;

上面我羅列了幾個常見的特殊字符。從上面的例子可以看出,輸入了 <script> 標籤後,裡面的內容有可能會被執行。
如果我們把 <script> 改成 &lt;script&gt; 那麼瀏覽器就不把這段內容看成是可執行代碼。

在日常開發中,我們不需要自己編寫轉義功能的代碼,只需要下載 xss 的依賴包就行。

安裝 xss 依賴包

1
npm install xss --save

使用 xssxss 其實是一個方法,只需要把要轉義的內容傳入 xss 方法即可。

1
2
3
4
const xss = require('xss')

const content = xss('<script>alert(1234)</script>')
console.log(content)

最後輸出

1
&lt;script&gt;alert(1234)&lt;/script&gt;

以上就是 xss攻擊 在後端的防禦方法。

如果嚴謹一點的話,在前端也可以把文本域的內容裡的特殊字符轉義一遍再傳給後端。

後端傳給前端的內容有可能會在頁面展示成 &lt;script&gt;alert(1234)&lt;/script&gt;,這部分需要前端自己去處理。

插則花邊新聞

之前看到有則新聞說 Vue 不安全,某些ZF項目中使用 Vue 受到了 xss 攻擊。後端甩鍋給前端,前端甩鍋給了 Vue

後來聽說是前端胡亂使用 v-html 渲染內容導致的,而 v-html 這東西官方文檔也提示了有可能受到 xss 攻擊。

尤雨溪:很多人就是不看文檔


comments powered by Disqus