摘要:但是,你所用的寫(xiě)法真的安全嗎面對(duì)越來(lái)越猖獗的黑客攻擊,注入防范非常重要,所以使用也要有更正確的姿勢(shì)。關(guān)于注入就是通過(guò)把命令插入到表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢(xún)字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的命令。
大多數(shù) PHP 程序員對(duì) MySQL 肯定不陌生,至于各種 MySQL 函數(shù)的用法在開(kāi)發(fā)手冊(cè)和 w3school 這類(lèi)網(wǎng)站上也有很多介紹。但是,你所用的寫(xiě)法真的安全嗎?面對(duì)越來(lái)越猖獗的黑客攻擊,SQL 注入防范非常重要,所以使用 MySQL 也要有更正確的姿勢(shì)。
關(guān)于 SQL 注入SQL Injection:就是通過(guò)把 SQL 命令插入到 Web 表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢(xún)字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的 SQL 命令。
具體來(lái)說(shuō),它是利用現(xiàn)有應(yīng)用程序,將(惡意)的 SQL 命令注入到后臺(tái)數(shù)據(jù)庫(kù)引擎執(zhí)行的能力,它可以通過(guò)在 Web 表單中輸入(惡意)SQL 語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行 SQL 語(yǔ)句。
在網(wǎng)上可以搜到一些簡(jiǎn)單例子,通過(guò)一步步有目的地調(diào)整 url 請(qǐng)求參數(shù),讓 server 返回其 MySQL 數(shù)據(jù)結(jié)構(gòu)及內(nèi)容,以達(dá)到獲取敏感數(shù)據(jù)的目的。
防注入的方法開(kāi)發(fā)者要使用合適的數(shù)據(jù)庫(kù)操作函數(shù),這一點(diǎn)也是開(kāi)發(fā)手冊(cè)和教程上很少提到的。
舉個(gè)例子,要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的查詢(xún)功能,一般會(huì)這樣寫(xiě):
這種用法相當(dāng)不安全,如果被人盯上,會(huì)很容易地進(jìn)行 sql 注入
所以有不少人推薦使用 mysql_real_escape_string,寫(xiě)法如下:
這種方法安全性比第一種更高,但對(duì)方還是可以利用編碼的漏洞來(lái)實(shí)現(xiàn)輸入任意密碼就能登錄服務(wù)器的注入攻擊。另外像一些 str_replace,addslashes 或者使用 magic_quotes_gpc 選項(xiàng)之類(lèi)的方法,不是已經(jīng)失效就是仍然有可能被破解。
然而百度一下「PHP 防注入」,仍然有很多文章在介紹上述辦法。所以我們這里要鄭重提示大家這個(gè)風(fēng)險(xiǎn),提醒所有后來(lái)者繞過(guò)這個(gè)坑。
那么,如今還能幸免于注入的方法就是 Prepared Statement 機(jī)制了。這里推薦大家使用 mysqli 方式,mysql 擴(kuò)展已經(jīng)在 php5.5 中被廢棄,在 php7 中更是直接不支持。為向高版本兼容考慮,新代碼盡量使用 mysqli
最終的查詢(xún)代碼就變成了這樣:
prepare("SELECT * FROM Person WHERE username=? AND password=?")) { $stmt->bind_param("ss",$username,$password); $stmt->execute(); } // 一些代碼 $mysqli->close(); ?>
把所有操作 MySQL 的代碼都重構(gòu)成上面這樣,那么面對(duì) SQL 注入就可以高枕無(wú)憂了。另外 pdo 也有 Prepared Statement 機(jī)制,同樣能夠保護(hù)數(shù)據(jù)庫(kù),有興趣的同學(xué)可以自己嘗試一下。
OneAPM for PHP 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理和監(jiān)控,包括代碼級(jí)別性能問(wèn)題的可見(jiàn)性、性能瓶頸的快速識(shí)別與追溯、真實(shí)用戶(hù)體驗(yàn)監(jiān)控、服務(wù)器監(jiān)控和端到端的應(yīng)用性能管理。想閱讀更多技術(shù)文章,請(qǐng)?jiān)L問(wèn) OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30297.html
摘要:前往下載,選擇版本。在目錄下新建鏈接數(shù)據(jù)庫(kù)成功鏈接數(shù)據(jù)庫(kù)失敗運(yùn)行之后輸出下面結(jié)果,說(shuō)明可以解析文件且可以鏈接數(shù)據(jù)庫(kù)。 準(zhǔn)備所需安裝包 本次所選安裝版本是:nginx1.11.5,php7.1.0,mysql5.7.16,當(dāng)然可以根據(jù)喜歡的版本下載,為了方便管理,我在D盤(pán)下新建了wnmp文件夾,里面包含文件夾有mysql,php,nginx,www,www為存放項(xiàng)目文件夾。Nginx: ...
摘要:前往下載,選擇版本。在目錄下新建鏈接數(shù)據(jù)庫(kù)成功鏈接數(shù)據(jù)庫(kù)失敗運(yùn)行之后輸出下面結(jié)果,說(shuō)明可以解析文件且可以鏈接數(shù)據(jù)庫(kù)。 準(zhǔn)備所需安裝包 本次所選安裝版本是:nginx1.11.5,php7.1.0,mysql5.7.16,當(dāng)然可以根據(jù)喜歡的版本下載,為了方便管理,我在D盤(pán)下新建了wnmp文件夾,里面包含文件夾有mysql,php,nginx,www,www為存放項(xiàng)目文件夾。Nginx: ...
閱讀 2051·2021-10-08 10:05
閱讀 1892·2021-09-22 15:31
閱讀 3013·2021-09-22 15:13
閱讀 3492·2021-09-09 09:34
閱讀 2098·2021-09-03 10:46
閱讀 3128·2019-08-30 15:56
閱讀 1709·2019-08-30 15:53
閱讀 2364·2019-08-30 15:44