目錄
1、防止SQL注入攻擊
2、防止使用者操縱變數
3、緩衝區溢位攻擊
4、跨站點腳本攻擊
5、瀏覽器內的資料操縱
6、遠端表單提交
PHP網站開發安全性總結:
首頁 後端開發 php教程 解決php網站開發常見的幾種攻擊方法

解決php網站開發常見的幾種攻擊方法

Mar 08, 2018 pm 01:12 PM
php 攻擊 網站開發

本文主要和大家分享解決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攻擊

如何防止web攻擊- -php初學者需要了解的安全性問題

在Linux下如何批量屏蔽惡意IP位址防攻擊的案例分析

以上是解決php網站開發常見的幾種攻擊方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1421
52
Laravel 教程
1315
25
PHP教程
1266
29
C# 教程
1239
24
在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

說明匹配表達式(PHP 8)及其與開關的不同。 說明匹配表達式(PHP 8)及其與開關的不同。 Apr 06, 2025 am 12:03 AM

在PHP8 中,match表達式是一種新的控制結構,用於根據表達式的值返回不同的結果。 1)它類似於switch語句,但返回值而非執行語句塊。 2)match表達式使用嚴格比較(===),提升了安全性。 3)它避免了switch語句中可能的break遺漏問題,增強了代碼的簡潔性和可讀性。

See all articles