Предпочтительно ли назначать переменную POST фактической переменной?

Я только что заполнил свою регистрационную форму для своего сайта и для страницы действий, где происходит весь SQL. Я просто пропустил присвоение переменной POST фактическим, например...

$username = $_POST ['username'];

Вместо этого я просто использовал переменные POST на странице PHP. Существуют ли какие-либо риски или ошибки, которые могут быть достигнуты во время практики?

Кроме того, извините, если я использую неправильную терминологию...

Ответ 1

Один из рисков, с которыми вы можете столкнуться, имеет дело с необработанными пользовательскими данными, которые все еще сохраняются в исходной переменной $_POST[]. Я стараюсь сэкономить все необработанные данные, с которыми я работаю, с другими переменными, такими как вы упомянули с помощью $username = $_POST['username'], чтобы я мог более эффективно манипулировать и дезактивировать этот ввод. Вместо сохранения каких-либо корректировок, которые я делаю для глобального массива $_POST, все мои изменения сохраняются временно и в более управляемой области.

Например:

$username = mysql_real_escape_string($_POST['username']);

... лучше, чем:

$_POST['username'] = mysql_real_escape_string($_POST['username']);

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

Ответ 2

Я не вижу преимуществ или недостатков. После того, как вы начнете изменять значения, вы должны поместить их в свою собственную переменную, но если вы просто читаете их, вы можете оставить их там, где они есть. Только две точки:

  • Если это делает ваш исходный код более читаемым для использования коротких имен переменных вместо $_POST[...], это хорошая причина, чтобы поместить значения в свои собственные переменные.
  • Не обязательно выводить значения один за другим, а просто присваивать содержимое массива другому массиву:

    $values = $_POST;
    
    // not:
    
    $foo = $_POST['foo'];
    $bar = $_POST['bar'];
    ...
    

Ответ 3

Присвоение его другой переменной будет вам хорошо, когда вы решите реализовать другой метод ввода (json-encoded posts, xml-rpc, soap и т.д.). Убедившись, что вы получите то, что вам нужно от массива $_POST при начале работы, и работа с этими значениями позже упростит повторное использование кода с этими другими входами: единственное, что нужно изменить, это создание этих входов.

Кроме того, часто вы хотите немного изменить значение (по умолчанию trim() -ing и т.д.), что лучше сделать для локальной переменной, чем элемент в массиве $_POST. Разумеется, на больших проектах с десятками кодеров на мой взгляд хорошей практикой всегда держать массив $_POST в том виде, в каком он был получен, и не впадать в него, напрямую впадая в безнадежно отладочную команду...

Риски и ошибки не меняются: он по-прежнему вводит пользователя, которого вы никогда не должны доверять, и всегда принимайте наихудший сценарий. Стандартная SQL-инъекция, XSS и другие атаки не предотвращаются только с практикой.

Ответ 4

Мне лично не нравятся переменные dupe. Придерживайтесь того, что у вас есть, пока вам не понадобится радикально трансформировать его. Переменные Dupe затрудняют отслеживание и просто теряют память и время. Зачем приносить песок на пляж.

выберите * из tbl, где this = ' ". mysql_real_escape_string (trim ($ _ POST [' that ']))."