Я переписываю свой API для своего приложения на PHP и использую структуру запроса
http://example.com/controller/function
, и мой API разбивает request_uri на:
array(
0 => "controller",
1 => "function"
);
и выполняет запрошенныйработать через следующий код.
//Build the file name
$fileName = ('../controllers/' . $endpoint[0] . '.php');
//Look for the file that is being requested
if(!file_exists($fileName)){
echo json_encode( StatusCodes["no_endpoint"] );
die();
} else {
include_once($fileName);
}
//Does the function exist?
if(!function_exists($endpoint[1])){
echo json_encode( StatusCodes["no_function"] );
die();
}
//Import the API settings to get all the keys necessary
include_once('../includes/ApiSettings.php');
//Include the common functions. Done here so the user can't bypass function_exists checks
include_once('../includes/CommonFunctions.php');
//Finally, execute the requested function
echo json_encode($endpoint[1]());
, как мне сказал один из моих коллег, выполнение с помощью echo json_encode($endpoint[1]());
может привести к тому, что люди выйдут из каталога webroot или, например, отобразят системную информацию обратно., если они достигли конечной точки http://example.com/controller/phpinfo
.Что является серьезной проблемой безопасности.
Какой метод я должен использовать вместо этого или как я могу помешать людям выполнять удаленное выполнение кода и вызывать всевозможные проблемы.