首頁 後端開發 php教程 PHP 安全編碼:不要讓程式碼鬆動

PHP 安全編碼:不要讓程式碼鬆動

Aug 17, 2024 pm 06:36 PM

前幾天,我和一位朋友閒聊,他是一家成功新創公司的技術主管,當我們觀看女子水球奧運決賽時,我們開始談論我在野外發現的 PHP 失敗問題? 。他是一名技術主管,而我是一名中期開發人員,我以為他已經在日常工作中解決了這個失敗問題,但是……聽起來令人驚訝,但他沒有。
我所說的“失敗”,你可能已經猜到了,無非是 PHP 的鬆散比較。現在,公平地說,我不會真正稱其為失敗,而是一個功能,但它的使用可能非常危險,從這個意義上說,它是一個失敗!讓我們的書呆子加油吧!

PHP Secure Coding: Don

目錄

  • PHP 鬆散比較
  • 脆弱場景
    • 不安全的登入系統
    • 不安全的授權方式
  • 緩解鬆比較錯誤
  • 結論
  • 表達愛@Sudorealm

PHP 鬆散比較

PHP 中的鬆散比較是指使用 == 運算子比較兩個值,它不會檢查所比較變數的資料類型。 PHP 在比較之前會嘗試將值轉換為通用類型。

if ('string' == true){
 echo 'Weedle I choose you';
}
else{
 echo 'Charizard I choose you';
}

不管你信不信,我們即將派出一隻 3 級的獨角獸在這裡戰鬥,而我們的噴火龍卻尚未使用。 為什麼? 那麼,在上面的範例中,PHP 將字串 'string' 轉換為 true,然後將其與 true 進行比較,導致真正的比較? 。這種行為雖然有時有用,但如果沒有正確理解和控制,可能會很危險。

查看 PHP 文件中的鬆散比較表以獲取更多資訊

一開始可能看起來沒那麼嚴重,但相信我,在訓練有素的開發人員眼中,這種突然出現的技巧可能會讓他們不寒而栗,並讓他們陷入生產程式碼重構熱潮。

脆弱場景

在本文的這一部分中,我將嘗試給出一些代碼塊,當在野外發現這些代碼塊時,它們可以為您帶來豐厚的錯誤賞金獎勵,而且如果您發現任何與您的代碼庫遠程相似的內容...更改它?

不安全的登入系統

在下面的程式碼片段中,您可以看到一個非常基本的登入系統邏輯。

$username = $_POST['username'];
$password = $_POST['password'];

if ($username == 'admin' && $password == '12345') {
    // Grant access
}

假設一個狡猾的駭客篡改了發送的資料並使其: $_POST['username'] = true 和 $_POST['password'] = true ,這將導致:

$username = $_POST['username'];
$password = $_POST['password'];

if (true == 'admin' && true == '12345') {
    // Grant access
}

# Now that hacker has been granted access to our App... Good for him, not for us

如果您想知道駭客如何篡改我們的數據,我有兩個答案給您:

  1. 使用curl 自訂請求。
  2. 打嗝套件

繼續前進。

不安全的授權與扭曲

這裡我展示了一個可能會讓您震驚的 PHP 問題。

$user_role = $_POST['user_role']; // Example: 'admin', 'editor', 'viewer'

// Authorization check using a switch statement
switch ($user_role) {
    case 'crazyDifficultAdminRoleNooneWouldEverGuess':
        // Admin privileges
        echo "Access granted: Super Admin level";
        break;

    case 'editor':
        // Editor privileges
        echo "Access granted: Editor level";
        break;

    case 'viewer':
        // Viewer privileges
        echo "Access granted: Viewer level";
        break;

    default:
        // No access
        echo "Access denied: Invalid role";
        break;
}

此程式碼已經容易受到資料篡改,因為駭客可以猜測角色並更改其角色以存取不同級別的授權。
不過我們可能會感到有點安全,因為他們永遠無法猜出我們的超級管理員角色名稱。

但是如果他們根本不需要猜測怎麼辦? ☠️

你知道Switch Case 使用鬆散比較嗎? 哈!你現在可能會感到震驚!
這意味著如果駭客加入 $_POST['user_role'] = true 那麼他們將存取 switch 語句中的第一個案例,無論值是什麼。這不是心底的痛嗎?閱讀文檔。

緩解鬆散比較錯誤

緩解鬆散比較錯誤對於確保 PHP 應用程式的安全性和可靠性至關重要。在 PHP 8.0+ 版本中,嚴格比較 === 和匹配表達式的使用在此過程中起著至關重要的作用。與鬆散的比較運算子 == 不同,嚴格的比較可以確保變數的值和類型都得到檢查,而鬆散的比較運算子 == 可能會因 PHP 的類型雜亂而導致意外且潛在危險的結果。這消除了諸如意外類型強制之類的漏洞,這些漏洞可能被用來繞過安全檢查。

這是使用匹配表達式解決不安全授權錯誤的解決方案:

$user_role = $_POST['role'];

$response = match ($user_role) {
    'crazyDifficultAdminRoleNooneWouldEverGuess' => "Access granted: Super Admin level",
    'editor' => "Access granted: Editor level",
    'viewer' => "Access granted: Viewer level",
    default => "Access denied: Invalid role",
};

echo $response; # This outputs: 'Access denied: Invalid role' when role is set to true

結論

您知道 PHP 中鬆散比較和類型雜耍的危險嗎?如果你沒有,現在你可以了。讓這篇簡單的文章提醒您始終閱讀文件並對程式設計時使用的所有內容有一個紮實的理解。當您努力在所做的事情上做到最好時,好奇心是關鍵!

透過遵守 === 的嚴格規則和匹配的精確度,您可以嚴格控制您的 PHP 程式碼,確保其行為完全符合您的預期。請記住,現在稍微嚴格一點可以讓您以後避免很多麻煩。讓這成為一個有趣的推動力,無論您處於編碼之旅的哪個階段,總是有新的東西需要學習。所以,請睜大眼睛,保持好奇心,不要讓那些鬆散的比較漏網! ?

關於我

您可以在我的個人部落格空間sudorealm.com找到更多關於我的資訊。

如果您喜歡我的寫作風格和內容,請毫不猶豫地點擊追蹤按鈕,神奇的事情就會發生! ??

以上是PHP 安全編碼:不要讓程式碼鬆動的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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)

熱門話題

Laravel 教程
1604
29
PHP教程
1510
276
PHP變量範圍解釋了 PHP變量範圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數內部無法訪問全局變量,需使用global關鍵字或參數傳入;2.靜態變量用static聲明,只初始化一次並在多次調用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數需通過use關鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規則有助於避免錯誤並提升代碼穩定性。

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP註釋的關鍵在於明確目的與規範,註釋應解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡單。 1.使用統一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強調邏輯背後的原因,如說明為何需手動輸出JS跳轉;3.在復雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標記待辦事項與問題,便於後續追踪與協作。好的註釋能降低溝通成本,提升代碼維護效率。

在PHP中評論代碼 在PHP中評論代碼 Jul 18, 2025 am 04:57 AM

PHP註釋代碼常用方法有三種:1.單行註釋用//或#屏蔽一行代碼,推薦使用//;2.多行註釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧註釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時需注意閉合符號和避免嵌套。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

學習PHP:初學者指南 學習PHP:初學者指南 Jul 18, 2025 am 04:54 AM

易於效率,啟動啟動tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

PHP調用AI智能語音助手 PHP語音交互系統搭建 PHP調用AI智能語音助手 PHP語音交互系統搭建 Jul 25, 2025 pm 08:45 PM

用戶語音輸入通過前端JavaScript的MediaRecorderAPI捕獲並發送至PHP後端;2.PHP將音頻保存為臨時文件後調用STTAPI(如Google或百度語音識別)轉換為文本;3.PHP將文本發送至AI服務(如OpenAIGPT)獲取智能回复;4.PHP再調用TTSAPI(如百度或Google語音合成)將回復轉為語音文件;5.PHP將語音文件流式返回前端播放,完成交互。整個流程由PHP主導數據流轉與錯誤處理,確保各環節無縫銜接。

如何用PHP搭建社交分享功能 PHP分享接口集成實戰 如何用PHP搭建社交分享功能 PHP分享接口集成實戰 Jul 25, 2025 pm 08:51 PM

在PHP中搭建社交分享功能的核心方法是通過動態生成符合各平台要求的分享鏈接。 1.首先獲取當前頁面或指定的URL及文章信息;2.使用urlencode對參數進行編碼;3.根據各平台協議拼接生成分享鏈接;4.在前端展示鏈接供用戶點擊分享;5.動態生成頁面OG標籤優化分享內容展示;6.務必對用戶輸入進行轉義以防止XSS攻擊。該方法無需複雜認證,維護成本低,適用於大多數內容分享需求。

如何用PHP結合AI實現文本糾錯 PHP語法檢測與優化 如何用PHP結合AI實現文本糾錯 PHP語法檢測與優化 Jul 25, 2025 pm 08:57 PM

要實現PHP結合AI進行文本糾錯與語法優化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開源NLP庫;2.通過PHP的curl或Guzzle調用API並處理返回結果;3.在應用中展示糾錯信息並允許用戶選擇是否採納;4.使用php-l和PHP_CodeSniffer進行語法檢測與代碼優化;5.持續收集反饋並更新模型或規則以提升效果。選擇AIAPI時應重點評估準確率、響應速度、價格及對PHP的支持。代碼優化應遵循PSR規範、合理使用緩存、避免循環查詢、定期審查代碼,並藉助X

See all articles