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