2021-11-12補充說明
注意:在PHP8.0中each()函數已被棄用,如您使用PHP8.0開發模組請參考以下工作心得
php8.0使用foreach批次大量接收變數的方法$var=isset($_REQUEST['var'])?$_REQUEST['var']:"";
然後$var就是接收變數值
因此檔頭通常會會寫一大串的接收變數COED
變數越多,擋頭接收變數區就越長,因為當初老師就是這樣教的所以我就這樣寫習慣了....
最近發現可以用更簡單的方法來批次接收變數,不用寫落落長的變數接收CODE了!方法如下!
使用each來接收變數再用while解出變數key跟value值,再用$$var直接吧變數的key值變成變數名稱
//接收變數區
while (list($var, $value) = each($_REQUEST)) {
$$var=trim(isset($value)?$value:"");
}
這樣就能批次接收全部變數,上面那一排落落長的code可以清除了,精簡程式結構增加開發效能,有需要的朋友參考看看!
2019-9-27補充說明
上面的方法是可以吧任何post過來的值參都自動變成新變數,但這樣反而會有讓駭客有攻擊癱瘓系統的機會,因為不管傳什麼$$var都會形成一個新變數。
例如駭客故意在網址GET傳送
www.testweb.com/index.php?test=123456789
那在PHP中就會自動產生一個$test的變數值為123456789
如果惡意插入512KB位元組的文字就會導致1MB 的記憶體被消耗,那像中國網軍群控系統一台電腦可以群控100多個作業系統,每個作業系統再開10個視窗用機器人腳本不斷送變數進網站,伺服器記憶體很快就會被消耗殆盡。
解決方法就是吧需要用的變數設為白名單,吧允許傳送的變數name預先用陣列建構起來,在於while迴圈中判斷這些變數是否為合法變數,如果是才產生變數,這樣就不會被駭客攻擊漏洞了!
//允許傳送變數
$allowvar =array("of_sortid","centerid","enable","arrange","search","type","useruid","post");
//接收變數區
while (list($var, $value) = each($_REQUEST)) {
if(in_array($var,$allowvar)){
$$var=trim(isset($value)?$value:"");
}
}
參考資料來源:https://www.w3school.com.cn/php/func_array_each.asp
教學撰寫:徐嘉裕 Neil hsu
留言
張貼留言