Потенциальные проблемы безопасности с переменными переменными

Я часто использую следующие строки для упрощения обработки ввода формы.

foreach($_POST as $key => $value){
    $$key = $value;
}

Это действительно удобно, потому что вам нужны только строки, и вы получаете все, что вы представляли как переменные, но каждый раз, когда я использую это, я думаю, что что-то упускаю. Есть небольшая опасность, если случайно назвать несколько переменных одинаковыми, но меня больше беспокоит безопасность. Есть ли какой-то способ, чтобы это было уязвимостью в этом отношении? т.е. пользователь фабрикует какую-то форму ввода со злонамеренным именем?

1 ответ

Прежде всего, вы можете сделать это с extract, цикл не требуется:

extract($_POST);

Что касается безопасности, конечно, есть проблемы безопасности каждый раз, когда вы используете данные, предоставленные пользователем. Вы хотите дезинфицировать любой пользовательский ввод. Это верно независимо от того, extract вход в локальные переменные или просто использовать $_POST массив.

Некоторые утверждают, что при извлечении в локальные переменные легче забыть о дезинфекции, так как в вашем коде менее ясно, какие переменные передаются пользователем.

Перенос пользовательских данных в локальные переменные упрощает перезапись ранее существующей локальной переменной, которую вы настроили (если вы не используете EXTR_SKIP флаг).

Я бы посоветовал против практики.

Другие вопросы по тегам