を処理するために、変数のメソッドを呼び出すと、私は$ _POSTパラメータaction
とmodule
は、Ajaxリクエスト
if (isset($_POST["action"])) {
$action = strtolower($_POST["action"]);
if ($action === "get_notification") {
// return session notification messages
//...
} elseif (isset($_POST["module"])) {
require_once("libraries/class.module.php");
$module = new Module;
$moduleName = strtolower($_POST["module"]);
// check if module-name is valid
if ($module->verify($moduleName)) {
// load $modulename class
require_once("libraries/class.".$moduleName.".php");
// factory used to create instance of $moduleName
require_once("libraries/class.factory.php");
// note: moduleName class extends Module class
$module = $Factory->create($moduleName);
// verify method of $moduleName verifies action/method parameter
// using method_exists and cross-checking against a permitted methods list
if ($module->verify($action)) {
$message = $module->$action();
echo json_encode($message);
} else {
// handle invalid requests
echo json_encode(["0", "Invalid request received"]);
}
} else {
// handle invalid requests
echo json_encode(["0", "Invalid request received"]);
}
} else {
// handle invalid requests
echo json_encode(["0", "Invalid request received"]);
}
} else {
// handle invalid requests
echo json_encode(["0", "No request received"]);
}
で、AJAX要求を処理するためにcontroller.phpファイルを作ったしかし、私は、変数のメソッドを使用しないように助言するスタックオーバーフローにthis記事を読みます。それぞれ$action
をチェックし、対応するメソッドを呼び出すスイッチケースを選択する必要があります。これは、私がこの可変メソッドの解決策を選択した最初の理由であった、より多くのコードをもたらすでしょう。
Yew、__you shall__クライアント(ブラウザ)がクラスをインポートして呼び出す必要があるパラメータとして変数を送信させることは、非常に危険です。 –
あなたは本当に可能な行動をホワイトリストに載せるべきです。それはそこにあるすべてのフレームワーク(PHPかどうか)がすることです。それ以外は問題を求めています。 – ADyson
@ADyson許可されているものをホワイトリストに載せるのではなく、禁止されているアクションをブラックリストに登録する方法を教えてください:) –