回覆列表
-
1 # 雁塔菜農
-
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(),那麼多系統級的函式,儘管用就是。
說完了,我可以跑了嗎?
原則上前端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記憶體儲了訪問該測試函式的次數,即網站訪問計數器。