Я не вижу никаких проблем с этой практикой. Все, что вы ... ошибаетесь ... получаете от $_GET
, является строкой. Он не будет представлять никакой угрозы безопасности, если вы не позвоните на него eval()
. Любая строка может быть использована в качестве ключа массива PHP, и она не будет иметь никаких негативных последствий (хотя, если вы используете действительно длинную строку, очевидно, это повлияет на использование памяти).
Это не похоже на SQL, где вы создаете исполняемый код ed позже - ваш PHP-код уже собран и исполняется ing , и единственный способ изменить его способ его выполнения во время выполнения заключается в вызове eval()
или include()
/ require()
.
EDIT
Думая об этом, есть пара других способов, кроме eval()
и include()
, что этот ввод может повлиять на работу скрипта, и это использовать предоставленную строку для динамически вызывать функцию / метод, создавать объект или переменные переменные / свойства. Так, например:
$userdata = $_GET['userdata'];
$userdata();
// ...or...
$obj->$userdata();
// ...or...
$obj = new $userdata();
// ...or...
$someval = ${'a_var_called_'.$userdata};
// ...or...
$someval = $obj->$userdata;
... было бы очень плохой идеей, если бы вы делали это сначала с помощью дезинфекции $userdata
.
Однако за то, что вы делаете, вам не нужно об этом беспокоиться.