SQL 注入,通常是經過把 SQL 命令插入到 Web 表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的 SQL 命令。前端
在登陸界面,後端會根據用戶輸入的用戶(username)和密碼(password),到 MySQL 數據庫中去驗證用戶的身份。mysql
用戶輸入用戶名【cedric】 , 密碼【123456】,在後端處理時,會進行以下 sql 語句拼接,當驗證用戶名和密碼成功後,即成功登陸。web
// 用戶名爲 cedric , 密碼爲 123456 select username from users where username='cedric' and password='123456';
可是,若是用戶在輸入框惡意輸入用戶名【cedric' -- 】(注意最後面有個空格)和隨意一個錯誤的密碼【111】,在後端處理時,會進行以下 sql 語句拼接,也會成功登陸。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';
Node 環境下,使用 mysql 的 escape 函數處理輸入內容,就能將參數中的特殊字符進行轉義。npm
在全部輸入 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 查詢 ··· }
XSS 是一種在web應用中的計算機安全漏洞,它容許惡意web用戶將代碼(代碼包括HTML代碼和客戶端腳本)植入到提供給其它用戶使用的頁面中。安全
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 了。
對用戶輸入的數據進行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>
, 就會被轉換爲下面的語句並存入數據庫:
<script> alert(1) </script>
,已達到沒法執行 <script>
的目的。