Я нашел немного идиоматического кода PHP, но я бы хотел более понятный (более понятный) способ - PullRequest
0 голосов
/ 19 сентября 2009

Я использую PHP

  1. для реализации формы HTML и
  2. для проверки данных, представленных в форме.

Есть два сценария. Чтобы второй сценарий знал о значениях, назначенных первым, я использую метод POST со следующим кодом:

foreach (${"_".$_SERVER["REQUEST_METHOD"]} as $k => $v) $$k = $v;

для извлечения каждого из (key => value) элементов ассоциативного массива POST (или GET) и создания переменных с этими именами и значениями.

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

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

У кого-нибудь есть предложения?

ВЫВОД:

Мне нравится идея extract (), и я, вероятно, буду ее использовать. Спасибо вам всем.

Я должен объяснить, возможно, почему некоторые из вопросов, поднятых в ответах ниже, не беспокоят меня:

  • Форма видна только во внутренней сети Компании. Пользователи не могут понять, какую кнопку нажать на , а тем более 'как на нее напасть?'
  • Пользователи вводят простые значения в полях формы: координаты x и y, измерения, номера партий. Проверка правильности. Если это не сработает, я на месте, они придут и спросят меня, почему.
  • Значения попадают в БД, к которой имеют доступ только мои приложения. Я не разрешаю ничего, что может представлять собой SQL-инъекцию.
  • Мне не нужно беспокоиться о других разработчиках. Я единственный разработчик , и я просто пытаюсь преодолеть корпоративную культуру использования раздутых приложений Windows для всего, что подойдут простые веб-приложения. У меня был жаркий разговор со старшим инженером на днях о том, почему я использую базу данных MySQL, когда вы можете сделать что-нибудь с Access & Excel.

Но я не должен начинать себя ...

Ответы [ 5 ]

4 голосов
/ 19 сентября 2009

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

Рассматривали ли вы просто использование $_REQUEST суперглобального?

3 голосов
/ 19 сентября 2009

извлечение переменных запроса не является лучшей практикой в ​​плане безопасности, если не сказать больше ...

Имея это в виду, вот код:

<?php    
// $req = ${"_".$_SERVER["REQUEST_METHOD"]}
if ($_SERVER["REQUEST_METHOD"] == 'GET') {
    $req = $_GET;
else {
    $req = $_POST;
}

extract($req);
?>

или просто:

<?php 
extract($_REQUEST);
?>

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

3 голосов
/ 19 сентября 2009

неправильный путь. просто используйте:

extract($_POST);
or
extract($_GET);
0 голосов
/ 19 сентября 2009

Вообще говоря, не стоит полагаться на то, что отправлено вам таким образом. О. Как предлагают другие, используйте extract (), если вы действительно хотите, но вместо этого я бы предложил:

Каждый скрипт, который является формой, должен иметь список полей, которые он принимает как:

$fields = array('name', 'age', 'city');

А затем сделайте:

$form = array();
foreach ($fields as $field) {
  $form[$field] = $_POST[$field];
}

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

0 голосов
/ 19 сентября 2009

Да, есть менее идиоматический способ сделать это. Вы можете включить параметр «register_globals» из php.ini.

Однако, прежде чем сделать это, убедитесь, что вы зашли в Google по запросу «php register_globals security», чтобы получить подсказку о том, почему это может не быть такой блестящей идеей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...