Потенциальные проблемы безопасности с переменными переменными
Я часто использую следующие строки для упрощения обработки ввода формы.
foreach($_POST as $key => $value){
$$key = $value;
}
Это действительно удобно, потому что вам нужны только строки, и вы получаете все, что вы представляли как переменные, но каждый раз, когда я использую это, я думаю, что что-то упускаю. Есть небольшая опасность, если случайно назвать несколько переменных одинаковыми, но меня больше беспокоит безопасность. Есть ли какой-то способ, чтобы это было уязвимостью в этом отношении? т.е. пользователь фабрикует какую-то форму ввода со злонамеренным именем?
1 ответ
Прежде всего, вы можете сделать это с extract
, цикл не требуется:
extract($_POST);
Что касается безопасности, конечно, есть проблемы безопасности каждый раз, когда вы используете данные, предоставленные пользователем. Вы хотите дезинфицировать любой пользовательский ввод. Это верно независимо от того, extract
вход в локальные переменные или просто использовать $_POST
массив.
Некоторые утверждают, что при извлечении в локальные переменные легче забыть о дезинфекции, так как в вашем коде менее ясно, какие переменные передаются пользователем.
Перенос пользовательских данных в локальные переменные упрощает перезапись ранее существующей локальной переменной, которую вы настроили (если вы не используете EXTR_SKIP
флаг).
Я бы посоветовал против практики.