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