本文主要和大家分享解決php網站開發常見的幾種攻擊方法,PHP網站建置中常見的安全性威脅包括:SQL 注入、操縱GET 和POST 變數、緩衝區溢位攻擊、跨站點腳本攻擊、瀏覽器內的資料操縱和遠端表單提交。
1、防止SQL注入攻擊
在 SQL 注入攻擊 中,使用者透過操縱表單或 GET 查詢字串,將資訊加入資料庫查詢。
例如,假設有一個簡單的登入資料庫。這個資料庫中的每個記錄都有一個使用者名字段和一個密碼欄位。建立一個登入表單,讓使用者能夠登入。
解決這個問題的方法是,將 PHP 內建的 mysql_real_escape_string() 函數用作任何使用者輸入的包裝器。
這個函數對字串中的字元進行轉義,使字串不可能傳遞撇號等特殊字元並讓 MySQL 根據特殊字元進行操作。清單 7 展示了帶有轉義處理的程式碼。
2、防止使用者操縱變數
使用者擁有有效的密碼,並不代表他將按照規則行事 —— 他有很多機會可以造成損害。例如,應用程式可能允許用戶查看特殊的內容。
例如 template.php?pid=33 或 template.php?pid=321。 URL 中問號後面的部分稱為查詢字串。因為查詢字串直接放在 URL 中,所以也稱為 GET 查詢字串。
這裡有什麼錯嗎?
首先,這裡隱含地相信來自瀏覽器的 GET 變數 pid 是安全的。
這會怎麼樣呢?
大多數使用者沒那麼聰明,無法建構出語意攻擊。但是,如果他們注意到瀏覽器的 URL 位置域中的 pid=33,就可能開始搗亂。
如果他們輸入另一個數字,那麼可能沒問題;但是如果輸入別的東西,例如輸入SQL 命令或某個檔案的名稱(例如/etc/passwd),或者搞別的惡作劇,例如輸入長達3,000 個字元的數值,那麼會發生什麼事呢?
在這種情況下,要記住基本規則,不要信任使用者輸入。
應用程式開發人員知道 template.php 接受的個人識別碼(PID)應該是數字,所以可以使用 PHP 的 is_numeric() 函數來確保不接受非數字的 PID。
需要做的只是使用 strlen() 檢查變數的長度是否非零;如果是,就使用一個全數字正規表示式來確保資料元素是有效的。如果 PID 包含字母、斜線、點號或任何與十六進位相似的內容,那麼這個例程會擷取它並將頁面從使用者活動中封鎖。
3、緩衝區溢位攻擊
緩衝區溢位攻擊試圖讓PHP 應用程式中(或更精確地說,在 Apache 或底層作業系統中)的記憶體分配緩衝區發生溢位。
請記住,您可能是使用 PHP 這樣的高階語言來編寫 Web 應用程序,但最終還是要呼叫 C(在 Apache 的情況下)。與大多數低階語言一樣,C 對於記憶體分配有嚴格的規則。
緩衝區溢位攻擊會向緩衝區發送大量數據,使部分資料溢位到相鄰的記憶體緩衝區,從而破壞緩衝區或重寫邏輯。這樣就能夠造成拒絕服務、破壞資料或在遠端伺服器上執行惡意程式碼。
防止緩衝區溢位攻擊的惟一方法是檢查所有使用者輸入的長度。
注意,緩衝區溢位攻擊不限於長的數字字串或字母字串。也可能會看到長的十六進位字串(往往看起來像 \xA3 或 \xFF)。
記住,任何緩衝區溢位攻擊的目的都是淹沒特定的緩衝區,並將惡意程式碼或指令放到下一個緩衝區中,從而破壞資料或執行惡意程式碼。
對付十六進位緩衝區溢位最簡單的方法也是不允許輸入超過特定的長度。
如果您處理的是允許在資料庫中輸入較長條目的表單文字區,那麼無法在客戶端輕鬆地限制資料的長度。在資料到達 PHP 之後,可以使用正規表示式清除任何像十六進位的字串。
4、跨站點腳本攻擊
在跨站點腳本(XSS)攻擊中,往往有一個惡意用戶在表單中(或透過其他用戶輸入方式)輸入訊息,這些輸入將惡意的客戶端標記插入過程或資料庫中。
例如,假設網站上有一個簡單的來客登記簿程序,讓訪客能夠留下姓名、電子郵件地址和簡短的訊息。
惡意使用者可以利用這個機會插入簡短訊息之外的東西,例如對於其他使用者不合適的圖片或將使用者重定向到另一個網站的 JavaScript,或竊取 cookie 資訊。
幸運的是,PHP 提供了 strip_tags() 函數,這個函數可以清除任何包圍在 HTML 標記中的內容。 strip_tags() 函數也允許提供允許標記的清單。
從安全的角度來看,對公共使用者輸入使用 strip_tags() 是必要的。如果表單在受保護區域(例如內容管理系統)中,而且您相信使用者會正確地執行他們的任務(例如為Web 網站建立HTML 內容),那麼使用strip_tags() 可能是不必要的,會影響工作效率。
還有一個問題:如果要接受使用者輸入,例如對貼文的評論或來客登記項,並需要將這個輸入向其他使用者顯示,那麼一定要將回應放在PHP 的htmlspecialchars()函數中。
這個函數會與符號、 符號轉換為 HTML 實體。例如,與符號(&)變成 &。這樣的話,即使惡意內容躲開了前端 strip_tags() 的處理,也會在後端被 htmlspecialchars() 處理掉。
5、瀏覽器內的資料操縱
有一類瀏覽器外掛程式允許使用者竄改頁面上的頭部元素和表單元素。使用 Tamper Data(一個 Mozilla 外掛程式),可以輕鬆操縱包含許多隱藏文字欄位的簡單表單,從而向 PHP 和 MySQL 發送指令。
使用者在點擊表單上的 Submit 之前,他可以啟動 Tamper Data。在提交表單時,他會看到表單資料欄位的清單。
Tamper Data 允許使用者篡改這些數據,然後瀏覽器完成表單提交。
要防禦這種工具,最簡單的方法是假設任何使用者都可能使用 Tamper Data(或類似的工具)。
只提供系統處理表單所需的最少量的信息,並把表單提交給一些專用的邏輯。例如,註冊表單應該只提交給註冊邏輯。
如果已經建立了一個通用表單處理函數,有許多頁面都使用這個通用邏輯,那該怎麼辦?
如果使用隱藏變數來控制流向,那該怎麼辦?
例如,可能在隱藏表單變數中指定要寫哪個資料庫表或使用哪個檔案儲存庫。有 4 種選擇:
不改變任何東西,暗自祈禱系統上沒有任何惡意使用者。
重寫功能,使用更安全的專用表單處理函數,避免使用隱藏表單變數。
使用 md5() 或其他加密機制對隱藏表單變數中的表名或其他敏感資訊進行加密。在 PHP 端不要忘記對它們進行解密。
透過使用縮寫或暱稱讓值的意義模糊,在 PHP 表單處理函數中再對這些值進行轉換。例如,如果要引用 users 表,可以用 u 或任意字串(例如 u8y90×0jkL)來引用它。
後兩個選項並不完美,但是與讓使用者輕鬆猜出中間件邏輯或資料模型相比,它們要好得多了。
6、遠端表單提交
Web 的好處是可以分享資訊和服務。壞處也是可以分享資訊和服務,因為有些人做事毫無顧忌。
以表單為例。任何人都能夠存取一個 Web 站點,並使用瀏覽器上的 File > Save As 建立表單的本機副本。然後,他可以修改action 參數來指向一個完全限定的URL(不指向formHandler.php,而是指向http://www.yoursite.com/formHandler.php,因為表單在這個網站上),做他希望的任何修改,點選Submit,伺服器會把這個表單資料當作合法通訊流接收。
首先可能考慮檢查 $_SERVER['HTTP_REFERER'],從而判斷請求是否來自自己的伺服器,這種方法可以擋住大多數惡意用戶,但是擋不住最高明的駭客。這些人足夠聰明,能夠篡改頭部中的引用者信息,使表單的遠端副本看起來像是從您的伺服器提交的。
處理遠端表單提交更好的方式是,根據一個惟一的字串或時間戳記產生一個令牌,並將這個令牌放在會話變數和表單中。提交表單之後,檢查兩個令牌是否符合。如果不匹配,就知道有人試圖從表單的遠端副本發送資料。
PHP網站開發安全性總結:
使用 mysql_real_escape_string() 防止 SQL 注入問題。
使用正規表示式和 strlen() 來確保 GET 資料未被竄改。
使用正規表示式和 strlen() 來確保使用者提交的資料不會使記憶體緩衝區溢位。
使用 strip_tags() 和 htmlspecialchars() 防止使用者提交可能有害的 HTML 標記。
避免系統被 Tamper Data 這樣的工具突破。
使用惟一的令牌防止使用者向伺服器遠端提交表單。
相關推薦:
php如何實現表單提交資料驗證功能以及防SQL注入和XSS攻擊
以上是解決php網站開發常見的幾種攻擊方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

HTTP緩存頭的關鍵玩家包括Cache-Control、ETag和Last-Modified。 1.Cache-Control用於控制緩存策略,示例:Cache-Control:max-age=3600,public。 2.ETag通過唯一標識符驗證資源變化,示例:ETag:"686897696a7c876b7e"。 3.Last-Modified指示資源最後修改時間,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Linux新版
SublimeText3 Linux最新版

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器