Node.js 項目中解決 SQL 注入和 XSS 攻擊


1.SQL 注入

SQL 注入,一般是通過把 SQL 命令插入到 Web 表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的 SQL 命令。

SQL 注入示例

在登錄界面,后端會根據用戶輸入的用戶(username)和密碼(password),到 MySQL 數據庫中去驗證用戶的身份。

用戶輸入用戶名【cedric】 , 密碼【123456】,在后端處理時,會進行如下 sql 語句拼接,當驗證用戶名和密碼成功后,即成功登錄。

// 用戶名為 cedric , 密碼為 123456
select username from users where username='cedric' and password='123456';

但是,如果用戶在輸入框惡意輸入用戶名【cedric' -- 】(注意最后面有個空格)和隨意一個錯誤的密碼【111】,在后端處理時,會進行如下 sql 語句拼接,也會成功登錄。

// 符號 ‘--’ 后面的語句相當於被注釋了
select username from users where username='cedric -- ' and password='111';

或者,如果用戶在輸入框惡意輸入用戶名【cedric';delete from users; -- 】和隨意一個錯誤的密碼【111】,在后端處理時,會進行如下 sql 語句拼接,則結果會導致數據庫中所有用戶被刪除。

// 符號 ‘--’ 后面的語句相當於被注釋了
select username from users where username='cedric';delete from users; -- ' and password='111';

SQL 注入預防

Node 環境下,使用 mysql 的 escape 函數處理輸入內容,就能將參數中的特殊字符進行轉義。

在所有輸入 sql 語句的地方,用 escape 函數處理一下即可, 例如:

const login = (username, password) => {

    // 預防 sql 注入
    username = escape(username)
    password = escape(password)

    const sql = `
        select username from users where username=${username} and password=${password};
    `

    // 然后按上面語句執行 sql 查詢
    ···
}

2. XSS 攻擊

XSS 是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼(代碼包括HTML代碼和客戶端腳本)植入到提供給其它用戶使用的頁面中。

XSS 攻擊示例

xss攻擊主要是針對表單的 input/textarea 文本框發起的,比如在文本框中輸入:

<script> alert(1) </script>

如果前端不進行過濾直接提交到后端(比如Node ),而服務端也沒有進行過濾直接寫入數據庫庫,那么在下一次(或其他用戶)進入頁面時,就會執行alert(1), 頁面彈出 1 。

竊取網頁中的cookie值

或者,文本框中惡意輸入:

<script> alert(document.cookie) </script>

就可以獲取用戶 cookie 了。

劫持流量實現惡意跳轉

文本框中惡意輸入:

<script>window.location.href="www.abc.com";</script>

導致,所訪問的網站就會自動跳轉到 www.abc.com 了。

XSS 攻擊預防

對用戶輸入的數據進行HTML Entity編碼, 也就是對<script><a>等標簽的< >進行轉換,然后再保存到后台數據庫。

Node環境下,安裝:

$ npm install xss

然后修改:

const xss = require('xss')

const inputValue = content  // 未進行 xss 防御
const inputValue = xss(content)  // 已進行 xss 防御

然后如果在 input 輸入框 惡意輸入 <script> alert(1) </script>, 就會被轉換為下面的語句並存入數據庫:

&lt;script&gt; alert(1) &lt;/script&gt;,已達到無法執行 <script> 的目的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM