php代碼審計思路,php代碼審計思路有哪些

本文目錄一覽:

如何用grep對PHP進行代碼審計

解決樓主的問題的方法就是,分開寫代碼,即:

$filearr = split(“.”,$filename);

$filetype = end($filearr);

split 函數用來分割字符串的時候,基本等同於函數 preg_grep,分割表達式可以是一個正則表達式,也可以是一個普通字符串,所以本身的執行效率很低,這一點你要記得……

所以,實現你現在的這個需求的話,最好用explode函數,使用普通字符作為分割表達式……

但是也的確如樓上所說,split 函數(PHP里)已經棄用,你可以使用 preg_match、preg_match_all 、preg_grep 等使用正則表達式作為分割的函數來替代。

就整個你的需求而言,你的思路還不很好,當一個文件名是【a.b.c.d.e.f.g.php】的時候,程序要浪費多餘的資源來分割其實你不用的a、b、c……,

所以要簡單滿足你取後綴名的需求的代碼應該是:

$filetype=substr(strrchr($filename,’.’),1);

此外還有:$path_info = pathinfo($filename); $filetype = $path_info[‘extension’]; 其實不是很推薦。

下面比較一下它們各自的執行效率:

設文件名是:aaa.bb.php、循環執行10000次;執行10次取平均值:

split + end :0.067644s

explode + end :0.016251s

pathinfo + [‘extension’] :0.018983s

strrchr + substr :0.008611s

【以上文字現場版純手敲,2012-2-25 10:41,謝謝】

php漏洞與代碼審計過程中需要注意的幾點

1.xss + sql注入

其中佔大頭的自然是XSS與SQL注入,對於框架類型或者有公共文件的,建議在公共文件中統一做一次XSS和SQL注入的過濾。寫個過濾函數,可由如下所示:

$_REQUEST = filter_xss($_REQUEST);

$_GET = filter_xss($_GET);

$_POST = filter_xss($_POST);

$_COOKIE = filter_xss($_COOKIE);

$_POST = filter_sql($_POST);

$_GET = filter_sql($_GET);

$_COOKIE = filter_sql($_COOKIE);

$_REQUEST = filter_sql($_REQUEST);

這裡有一點需要說明,$_REQUEST雖然等於$_GET+$_POST,但他們是獨立的數組,也就是說假設改變了$_GET的值,但$_REQUEST的值還是原來的值,所以過濾時都不能落下,至於其他的如$_FILE之類的就可忽略了。

最簡單的filter_xss函數是htmlspecialchars()

最簡單的filter_sql函數是mysql_real_escape_string()

當然,誰都知道這種過濾filter_sql只能過濾字符型和搜索型的注入,對於數字型是沒有辦法的,但也說明做了這層過濾後,只需在後面注意數字型的SQL語句就可以了,遇到了加intval過濾就可以了,這就變得容易多了。

2. 命令執行

對於命令執行,可以從關鍵字入手,總共可分為3類

(1) php代碼執行 :eval等

(2)shell命令執行:exec、passthru、system、shell_exec等

(3) 文件處理:fwrite、fopen、mkdir等

對於這幾類需要注意其參數是否用戶可控。

3.上傳漏洞

對於上傳漏洞,也是重點關注的地方,要仔細分析它的處理流程,針對上傳的繞過方式是很多的,最保險的方式:在保存文件是採用文件名隨機命名和後綴白名單方式。其次要注意的一點是上傳文件的地方可能不止一處,不要有遺漏,可能會碰到這樣的情況,突然在某個目錄裡面包含了一個第三方的編輯器在裡面。

文件包含漏洞涉及的函數如include() 、include_once()、require()、require_once()、file_get_contents()等

最常見的還是出在下載文件功能函數,例如download.php?file=///etc/passwd 這種類型中。

4. 權限繞過

權限繞過可分為兩類吧

(1)後台文件的未授權訪問。後台的文件沒有包含對session的驗證,就容易出現這樣的問題

(2)未作用戶隔離,例如mail.php?id=23顯示了你的信件,那麼換個ID, mail.php?id=24就查看到了別人的信件,編寫代碼是方便,把信件都存在一個數據表裡,id統一編號,前端展現時只需按id取出即可,但未作用戶隔離,判定歸屬,容易造成越權訪問。

這樣的例子是很常見的,給某銀行做評估是就經常發現這種漏洞。

5. 信息泄露

信息泄露算是比較低危的漏洞了,比如列目錄這種就屬於部署問題,而與代碼審計無關了,而像暴路徑、暴源碼這種是需要防止的。曾經遇到這樣的代碼

?php if(empty($_GET[‘a’])) {…} ?

表面上似乎沒問題,可是當請求變為 xx.php?a[]=1時,即參數變為數組的時候,就會發生錯誤以致路徑泄露,而用isset判斷則不會,當然一個個防太麻煩,建議在配置文件中關閉錯誤提示,或者在公共文件中加入如下代碼以關閉錯誤顯示功能:

?php error_reporting(0);?

請問誰知道PHP代碼審計怎麼學習呢

1、工具什麼的沒用過,不好回答。

2、跟蹤函數?應該是指對一些容易被利用的函數的前後代碼流程進行審計吧。這種方式應該是較為常用的,需要你平時多積累危險函數的『字典』,但隨着 PHP 應用程序安全性的整體提升,常用的危險函數引起的漏洞越來越少了,也越來越難找了。『安全性敏感』這個,需要自己多學習多積累多思考,多讀代碼,多分析代碼,多看漏洞分析,看不懂別人的漏洞分析,就多利用google搜索、查閱手冊等手段努力把分析看明白。然後可以找一些不太知名的小程序來練練手,一點一點積累,循序漸進,慢慢應該會形成一定的『安全性敏感』吧。比如說你在看一個程序前,對應這種類型的應用程序,哪些流程容易出現漏洞,哪些功能容易出現漏洞,哪些危險函數會較多用到,應該先從哪入手看源碼等等,在自己的頭腦里有一個較為清晰的思路,不知道這個是不是你所說的『安全敏感性』。

3、國內這方面的資料挺多的,多上 wooyun、80vul、wolvez 等這些網站上看看。還有就是多看 PHP 手冊,如果有能力的話可以看看 PHP 內核源碼,推薦去 github 上看 PHP 內核源碼,快捷方便,各個分支的源碼都有,方便查閱對比。

原創文章,作者:YFWP,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/132081.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YFWP的頭像YFWP
上一篇 2024-10-03 23:49
下一篇 2024-10-03 23:49

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python通配符有哪些

    Python通配符是一種表示字符串中模糊匹配的有效工具,用於匹配與具有特定模式匹配的字符串。Python中主要的通配符有:*,?,[]和{}。 一、星號通配符 * 在Python中…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29

發表回復

登錄後才能評論