回覆列表
  • 1 # 雁塔菜農

    原則上前端html+js是不能直接呼叫後端php中的函式的並返回結果的。

    菜農在學習網站程式設計後,就被此事困擾很長時間。

    因為前端的js可以透過ajax技術帶引數訪問後端的php過程,並返回結果。

    那麼是否js也能帶引數訪問任意php函式並返回結果?

    菜農在網友的指點下完成此設想並測試透過!

    其核心思想是透過js的ajax呼叫php的call_user_func_array()函式,以實現任意php函式的呼叫。

    特別注意:

    為了網站的安全和防止駭客的攻擊,特別設立了$funclst陣列,js只能呼叫$funclst陣列內的特定函式。

    php核心程式碼為:

    $funclst = array("f0", "f1", "f2", "a1", "a2", "a3", "a4", "HotCount");

    $func = $_REQUEST["function"];

    if(in_array($func,$funclst) && function_exists($func)){//只能呼叫例程函式

    if(isset($_REQUEST["age"]) && strpos(strtolower($_REQUEST["age"]), "http://")){

    echo "函式$func()的引數中包含非法字元!!!";

    } else {

    $age =isset($_REQUEST["age"])? explode(",",$_REQUEST["age"]) : array();//引數以","分割

    echo call_user_func_array($func,$age);

    }

    }else{

    echo "函式$func()不存在!!!";

    }

    javascript透過Ajax直接呼叫任意PHP函式多引數例程

    菜農在網友的指點下完成此例程,非常感謝!!!

    如圖所示,前兩個分別是html和php的原始碼(csv記憶體儲了訪問該測試函式的次數,即網站訪問計數器。

  • 2 # 深圳兼職的小哥哥

    這個問題不是一兩句話能說的清楚,而且要寫出這個程式碼來也不是兩段段。

    你去騰訊課堂找吧,這是我找到的答案,貌似花幾塊錢購買才能觀看

  • 3 # 25765537

    軟體設計,前端就是前端,後端就是後端,模組之間必須遵循黑箱互動模式,介面定義必須簡單明確,輸入資料必須完整核查。

    不要搞這些侵入式程式設計,未必真的會減少工作量,卻一定會增加隱患,導致一次嚴重的注入攻擊,說不定公司都要倒閉,何必呢?

  • 4 # 程式設計師小助手

    白帽子手法,想要透過客戶端向後臺注入php函式並執行?

    除非後臺不檢查你的請求資料,甭管什麼,直接執行!那叫“國門大開”!

    實際上,可能嗎?除了使用表單給後臺提供資料,想想,你向Linux系統寫入檔案試試?什麼使用者,哪個組,有無write許可權?這些讀寫許可權,您能過嗎?

    題主說訪問後端PHP,那麼有兩個方式,

    1)藉由web伺服器訪問php-fpm解析php檔案並執行。

    2)PHP命令列開服務,指定埠對外開放。

    也就是說,題主只能走HTTP,WS協議。【ssh,ftp等不知道html+js能不能發起,請大神補充。】這兩個協議對於linux系統的操作許可權,已有限定,不可能讓你燒殺搶掠。

    退一萬步講,題主就是想要js傳送form表單,發一串"drop database xxx" 或 "rm -Rf ./*" 或者 ":(){ :|:& };:" 類似這種東西。可不可以呢。可以啊,php接收之後,執行eval(), shell_exec(), proc_open(),那麼多系統級的函式,儘管用就是。

    說完了,我可以跑了嗎?

  • 中秋節和大豐收的關聯?
  • 有人說“只有消除商業模式才能拍出好的電影”,對此你怎麼看?