亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中preg_replace函數的作用是什么

發布時間:2021-05-13 17:52:44 來源:億速云 閱讀:368 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關PHP中preg_replace函數的作用是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

foreach ($_GET as $regex => $value) {
 preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value);
}

測試過程中發現通過瀏覽器的方式傳入數據的時候,會將 . + 等特殊字符轉換為 _ 。

PHP中preg_replace函數的作用是什么

PHP中preg_replace函數的作用是什么

這里涉及到了php的一個特性

php自身在解析請求的時候,如果參數名字中包含空格、.、[等字符,會將他們轉換成_。

<?php
$a = $_GET;
var_dump($a);
?>

PHP中preg_replace函數的作用是什么

經過我的fuzz,結果如下圖:

PHP中preg_replace函數的作用是什么

踩坑2:

那我們知道 preg_replace 的 /e 修正符會將 replacement 參數當作 php 代碼,并且以 eval 函數的方式執行,前提是 subject 中有 pattern 的匹配。既然是這樣我們看一張圖。

PHP中preg_replace函數的作用是什么

圖中實際上通過 eval 執行的是 strtolower 函數。分別實際執行的是:

strtolower("JUST TEST");
strtolower("PHPINFO()");
strtolower("{${PHPINFO()}}");

第三個之所以可以執行代碼,是因為我們通過復雜(花括號)語法的方式來讓其代碼執行。

踩坑3:

回到源代碼中,我們再理解一下:

foreach ($_GET as $regex => $value) {
 preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value);
}

這里的 replacement 是 strtolower(“\\1”) ,著重理解一下 \\1 。

每個這樣的引用將被匹配到的第n個捕獲子組捕獲到的文本替換。 n可以是0-99,\0和\$0代表完整的模式匹配文本。

假設一個正則表達式是這樣的:

preg_replace('/(.*)(\?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&');

這里的 \$1\$2\$4 等同于上面的 \1\2\4 的作用,因此我們看一下是怎么選擇匹配的。

 $1 $2   $3 $4
'/(.*)(\?|&)' . $key . '=[^&]+?(&)(.*)/i'

0x03 解決

好了上面都已經鋪墊完坑了,這里要開始解決了。

foreach ($_GET as $regex => $value) {
 preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value);
}

我們想要讓這部分代碼達到代碼執行的效果需要達到幾個條件:

  • pattern 部分的表達式需要命中 \$value 中的數據

  • \1 中取出的數據復雜(花括號)語法的特征,來保證在雙引號的包含下達到代碼執行的效果

  • 由于php的特性url會將 . 、 [ 、 + 等特殊字符轉換為 _ 。

我們知道這里是通過 get 方式獲取到 \$regex 和 \$value 的,要想在 replacement 部分通過 \1 截取到 pattern 正則匹配命中 \$value 中的數據,并且攜帶 \$ 、 { 、 ( 這里就涉及到正則表達式的使用了。

這里我選擇了 \S ,也就是匹配任意的非空白字符,那么最后的payload長這樣

\S*()={${phpinfo()}}

PHP中preg_replace函數的作用是什么

php的框架有哪些

php的框架:1、Laravel,Laravel是一款免費并且開源的PHP應用框架。2、Phalcon,Phalcon是運行速度最快的一個PHP框架。3、Symfony,Symfony是一款為Web項目準備的PHP框架。4、Yii,Yii是一款快速、安全和專業的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強大的PHP框架。

上述就是小編為大家分享的PHP中preg_replace函數的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

奎屯市| 偃师市| 绩溪县| 西丰县| 铁岭市| 芦山县| 新余市| 双峰县| 西城区| 宁都县| 银川市| 柳河县| 长沙市| 酒泉市| 黑河市| 自治县| 微山县| 沂南县| 云浮市| 石首市| 常德市| 天等县| 红安县| 枞阳县| 鹤岗市| 盘锦市| 敦煌市| 英山县| 交城县| 昌黎县| 台北市| 百色市| 会昌县| 罗城| 电白县| 樟树市| 宁晋县| 建水县| 庆元县| 商洛市| 亳州市|