$ _GET как параметры в функциях PHP - PullRequest
0 голосов
/ 10 октября 2011

У меня тот же вопрос, но ... Я перенаправляю пользователя в зависимости от оператора if с использованием заголовков на динамическую страницу, которая создается с помощью функции. Для правильной работы этой функции необходимы параметры, переданные в части заголовка GET.

В зависимости от того, какие ответы предоставлены, это плохая практика. Как я должен это делать?

function page($title,$msg){
    $title = $_GET['title'];
    $msg = $_GET['msg'];
    echo '<h1>'.$title.'</h1>';

    echo '<p>';
    switch($msg){
        case 1:
            echo 'dwasdwadawdwadwa';
        break;
        case 2:
            echo 'wasdadwadwdad';
        break;
        default:
            echo 'wadasdasd';
        break;
    }
    echo '</p>';
}

ps: не стесняйтесь указывать на все, что вы видите неправильно.

Я нашел это , но это мне не очень помогает.

Ответы [ 4 ]

1 голос
/ 10 октября 2011

Хотя вы не обязательно используете вход $ _ GET для чего-то, что требует соображений безопасности (в данном случае), плохой практикой является не проводить очистку значений из URL-адреса.

Мало того, что вы должны проверять вредоносный ввод (особенно если вы используете ввод для запроса к базе данных), но вы также должны проверять, что ожидаемые целочисленные значения действительно являются целыми числами, а требуемые строки не пусты.

Кроме того, ваша функция page($title, $msg) принимает $title и $msg и устанавливает их, даже если они не передаются по ссылке .

  1. Если вы хотите изменить входные параметры, передайте их по ссылке.

  2. Если вам нужно использовать входные параметры, не перезаписывайте их немедленно.

  3. Если вам не нужны входные параметры и вы используете в локальной функции только значения $_GET, объявите page() без каких-либо аргументов.

0 голосов
/ 10 октября 2011

Ответ на связанный с вами вопрос предполагает, что функции не должны полагаться на какие-либо внешние (например, глобальные) переменные.$_GET и $_POST (среди прочих) являются «суперглобальными», языковой функцией PHP, которая делает их доступными в любой области.Это означает, что они могут быть неожиданно изменены из любого места в ваших скриптах.

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

Например, вместо:

function add_user() {
  $user = $_GET['user'];
  // ...
}
add_user();

Вы бы использовали:

function add_user($user) {
  // ...
}
add_user($_GET['user']);

В вашей ситуации, чтоВы хотели бы это:

function page($title, $msg){
  echo '<h1>'.$title.'</h1>';
  echo '<p>';
  switch($msg){
    case 1:
      echo 'dwasdwadawdwadwa';
    break;
    case 2:
      echo 'wasdadwadwdad';
    break;
    default:
      echo 'wadasdasd';
    break;
  }
  echo '</p>';
}

Затем, когда вы звоните page, вы бы назвали его следующим образом:

page($_GET['title'], $_GET['msg']);
0 голосов
/ 10 октября 2011

Зачем вам нужно использовать GET ? вы можете получить доступ ко всем тем же свойствам, если используете POST, который также более безопасен

0 голосов
/ 10 октября 2011

Не уверен, что понимаю ваш вопрос, но вот код, который я использую для обработки моих вызовов ajax:

$mc = new MyClass();
echo $mc->{$_GET["operation"]}($_GET);

Это означает, что «операция» относится к имени вашего метода внутри MyClass, и мне не нужно добавлять новый оператор switch для каждого метода. Теперь я могу просто добавить функцию «addRecord ($ args)» в MyClass, и мой вызов ajax будет выглядеть так:

ajax_users.php?operation=addRecord&name=testuser&dob=1980-01-01

ваша php-функция получает аргументы в массиве, поэтому внутри функции addRecord() вы должны обращаться к переменным, таким как $args['name'] и $args['dob'], и не имеет значения, сколько параметров вы должны передать в ваш метод.

Убедитесь, что вы используете здесь подготовленные операторы или правильное экранирование для предотвращения SQL-инъекций.

...