看板 PHP 關於我們 聯絡資訊
函式本來就是要被執行的 只是不想被'直接'執行 這種願望和不想被人從中間盜連網站一樣 要嘛你從大門口進來,那就歡迎 從中間 link 盜連,感覺好像別人網站很強大 像圖形網站被偷圖,音樂網站被偷歌一樣 你指這個吧.. 方法之一是利用 session 從大門口進來的才設定變數 沒設的就趕出去 ※ 引述《grassboy2 (活力花俏草兒仔政﹞O花俏)》之銘言: : 借標題問一下… : 其實我也有類似的問題… : 如果…我某一個php檔下有一個函數fnc1 : 那…使用者有沒有辦法直接呼叫fnc1? : 也就是不論我的php檔下面有沒有呼叫fnc1的敘述 : 使用者都可以直接執行降子… : 例如:http://grassboy.twbbs.org/crack.php 的原始碼如下… : <? if ( !isset($logined) ) //這變數還得設在 session 裏, exit; //google 'php session login' 有詳細介紹原理 : function fnc1() : { : echo "我是測試的函數"; : } : ?> : 你有辦法呼叫fnc1嗎? : 有辦法直接呼叫fnc1嗎? : 先感謝回答了m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.179.152
grassboy2 :耶逗…所以別人真的可以直接呼叫我php裡的fnc1()嗎? 02/07 00:22
grassboy2 :我不是怕人盜連…而是怕有安全性漏洞… 02/07 00:23
grassboy2 :有強者可以示範一下嗎@@a 呼叫crack.php裡的fnc1() 02/07 00:25
xam :雞同鴨講啊... 02/07 00:35
j87b0003 :....哈哈......目標不一樣 02/07 01:36
yanli2 :你自己程式裡面有動作會呼叫他的話 就可能辦到 02/07 01:52
HuangJC :如果程式很短,你能檢查完,就不會被盜連;但程式都愈寫 02/07 03:13
HuangJC :愈大,可能被另一個含入口的程式 include 到.. 02/07 03:13
HuangJC :不過像 PHP 這種超彈性,我覺得真是防不甚防.. 02/07 03:14
HuangJC :我自己的程式就是這樣呼叫的,因為我用了framework 02/07 03:15
HuangJC :有一堆自己不熟的東西在抓我的程式.. 02/07 03:15
ckmarkhsu :我還滿想知道要怎麼直接執行 crack.php 裡面的 fun1 02/07 03:57
應該說..怎麼被呼叫的點很難查 當我寫 C 時,我用搜尋;找函式名就可以糾出所有進入點 但當我寫 PHP 時,卻怎麼找都找不到;而函式還是被呼叫了 因為它是超彈性的 Parser 語法 (後來學了 Trace 工具,有改善一點了) 比如 $a='fun'; $b='f1'; $c= $a . $b; // 'funf1' $c; //忘了語法,好像這樣就可以執行 funf1,但用搜尋器找不到 funf1 出現在哪裏 因為實在太難找出所有進入點了 所以你如果告訴我'怕被執行' 我就會去防..以防萬一 之前我剛進這板時就是在請教大家如何 Trace PHP 程式,找尋 function caller 上面的例子在我用的 framework,或網路上抓來現成可用的模組裏都有出現 其實要怎麼找呢? function funf1() { //反正誰 call 我,就會進來嘛 show_stack(); //忘了指令,反正都進來了, //那我要求 show function call stack 就好,就全都會顯示出來 } ※ 編輯: HuangJC 來自: 61.59.179.152 (02/07 05:00)
HuangJC :再補充一點,有類似 onerr 的萬用函式,當找不到函式就 02/07 05:08
HuangJC :執行它,然後才開始組合函式名稱;CakePHP 有用這招 02/07 05:08
HuangJC :所以它才可以組合出那麼多 function name 來.. 02/07 05:09
grassboy2 :感謝!有增廣見聞到… 02/07 10:41
weiyucsie :那就用private member function XD 02/07 14:44
HuangJC :private 是封裝,就是為了保護而生 :P ,但在PHP我不會 02/07 16:11
weiyucsie :用法差不多啦 相關寫法可以搜尋php oop5 02/07 21:29
HuangJC :class 內我會;我想要有 file static,一樣嗎? 02/07 23:20
weiyucsie :你說C的那種喔 XD 這我就沒什麼概念了 02/08 02:15
想到了,也許可以 unset (我的語法都不精準..都是虛擬碼) class C1 { private: $a; } $I=new C1; $I->a; // 不允許存取,這種封裝是禁止外界直接穿透 class 但如果是檔案,也有這種需求 file1.php function f1() { } f1(); //執行 f1 file2.php require "file1.php" //我希望含入 file1.php,當然也希望執行到 f1 f1(); //但是我希望 f1 功成身退,不要被外面有權限執行 同檔案內可見到 f1,但希望別的檔案無法見到 f1 沒記錯的話,這叫做 file static 不過這和變數一樣 php 的函式簡直就像變數(的生命週期) 我想,它也有對應的 unset 也許要求一下,它就在外面看不到了 XD 對於我在意的一些東西,會特別仔細的控制它的生命週期 這樣應該蠻好用的 ※ 編輯: HuangJC 來自: 61.59.179.152 (02/08 03:58)
weiyucsie :不曉得函數可不可以 不過你寫到unset 02/08 15:11
weiyucsie :也許可以用create_function+heredoc來寫函數的定義XD 02/08 15:11
weiyucsie :php 5.3(目前應該沒正式release)有closure可以玩 02/08 15:14
weiyucsie :http://en.wikipedia.org/wiki/Php 02/08 15:14