SQL 注入是最流行的黑客技術之一。它涉及為惡意意圖注入 SQL 代碼,例如破壞數據庫或獲取私人信息。例如,黑客可以將 SQL 代碼注入網站表單,以從數據庫中檢索用戶名和密碼列表。這種攻擊可能會威脅到您用戶的敏感個人信息——想象一下黑客可以獲得的所有數據!這是最簡單的 SQL 注入形式之一:用戶輸入。
幸運的是,SQL 注入并不難預防。這種黑客技術并不復雜,可以很容易地避免實施不同的代碼解決方案。這只是另一種很容易被遺忘的安全措施。
即使是流行的游戲Fortnite 也存在一個漏洞,該漏洞可能導致 SQL 注入攻擊,從而使黑客能夠接管游戲帳戶。Synopsys 的技術布道師 Tim Mackey 表示:“SQL 注入和 XSS 是 OWASP 前 10 名中的常年項目”。你的代碼是防 SQL 注入的嗎?您是否遭受過 SQL 注入安全攻擊?繼續閱讀以找到解決方案!
保護數據庫免受 MySQL 注入的 3 大方法
1. 使用 MySQLi 轉義字符
此方法允許數據庫將 SQL 注入視為文本,而不是代碼。這將避免黑客代碼的任何惡意行為。這個想法是使數據庫對文本進行轉義并將其轉換為字符。以下示例適用于簡單的網站表單。此解決方案由Multimedia Tutorials?YouTube 頻道提供:
首先設置變量等于實際數據。有關名字字段,請參見下面的示例:
$first = $_POST['first'];
然后,插入以下 PHP 函數:
mysqli_real_escape_string ()
在該括號內,您將添加兩個不同的參數:與數據庫的數據庫連接和用戶在表單中傳遞的數據。代碼將與此類似:
$first = mysqli_real_escape_string ($conn, $_POST['first']);
其中 $conn 是您與數據庫的數據庫連接。然后,對其余字段執行相同的步驟。您可以輕松復制和粘貼 mysqli_real_escape_string ($conn),以加快該過程。
2- 使用 Web 應用程序防火墻
Web 應用程序防火墻 (WAF) 通過檢測來自您的網站流量的可疑活動,作為附加的安全層。根據一組特定的規則過濾掉非法流量。從技術上講,它會檢查進入您網站的 HTTPS 請求。由于它位于 DNS 級別,因此如果它檢測到任何惡意活動,它不會讓它進入數據庫。
如果 Web 應用程序防火墻檢測到可疑行為,您可以選擇如何繼續。例如,您可以要求用戶提交驗證碼,或自動阻止可疑 IP 地址。實施 Web 應用程序防火墻還將幫助您防止跨站點腳本 (XSS) 和跨站點偽造 (CSRF)。這聽起來像是完美的解決方案,但請記住,這不是 100% 防故障的方法。仍然有一些方法可以繞過 WAF。即便如此,我還是強烈推薦它。
3. 使用預處理語句保護數據庫免受 MySQL 注入
此方法使用占位符而不是實際變量,這些變量被發送到數據庫、被解析并最終在 SQL 語句中被替換。請注意,數據庫也不會將代碼視為代碼,而是將其視為字符。
此過程涉及 3 個步驟:創建模板、創建準備好的語句和準備準備好的語句。請參閱以下所有這些步驟的詳細信息:
創建模板
首先從數據庫中選擇數據。為此,請使用用戶 ID 等于占位符名稱的 select 語句。
創建準備好的語句
在括號內插入準備好的語句,包括與數據庫的連接。
準備一份準備好的聲明
為準備好的語句插入一個 MySQLi 函數,并通過對模板進行測試來檢查該語句是否可以工作。您可以通過插入 IF 語句來做到這一點,第一個條件是準備好的語句,以 $stmt 作為參數,第二個參數是 SQL 模板。記住要檢查失敗而不是成功。您可以通過在語句前插入感嘆號并回顯該語句已失敗來執行此操作。
然后,通過將綁定參數添加到占位符來插入 ELSE 語句。在括號內添加三個參數:后跟逗號的準備語句、模板中占位符的指示符以及要插入而不是占位符的實際數據。您可以在多媒體教程中看到完整的解決方案。