При передаче данных методом POST, казалось бы, проблема безопасности решается — данные не поподают в адресную строку, их нельзя подделать. Но проблема не решается полностью.. Проблему и ее решение читайте далее.
Рассмотрим, что это такая за уязвимость параметров при передаче данных методом POST.
Допустим, что Вы разрешили использовать глобальные переменные и применяете их для доступа к параметрам:
<form action="postparam.php" method="post"> User Name: <input name="UserName"> <input type="hidden" name="Password" value="qwerty"> </form>
<?php if ($UserName<>""){ print("<Р>Ваше имя пользователя: " ); print("$UserName"); print("<Р>Пароль: $Password"); } ?>
В этом примере из формы передаются параметры методом POST. Несмотря
на это, мы можем выполнить запрос следующего вида:
index.php?UserName=Flenov&Password=qwerty
То есть мы передаем параметры, как в методе GET, И при этом сценарий отработает верно. Почему? Проблема кроется в глобальных переменных, которые не «знают», какой метод мы используем, и не зависят от него. В этом отношении использование массивов $HTTP_POST_VARS И $HTTP_GET_VARS более безопасно, потому что они привязаны к методу. Если бы мы обрабатывали параметры с помощью массива $HTTP_POST_VARS, то попытка передать параметры методом GET завершилась бы неудачей, потому что такие параметры попадают в другой массив $HTTP_GET_VARS.
Вот, как можно получить доступ к параметрам через массивы, а также запретить передачу параметров через строку URL, т. е. методом GET. Если массив $HTTP_GET_VARS не пустой, то выполнение цикла прерывается с сообщением о неверном параметре:
<form action="arrayparam.php" method="post"> User Name: <input name="UserName"> <input type="hidden" name="Password" value="qwerty"> </form> <?php if (count($HTTP_GET_VARS)>0) { die("Неверный параметр"); } if ($HTTP_POST_VARS["UserName"]<>""){ print("<Р>Ваше имя пользователя: " ); print($HTTP_POST_VARS["UserName"]); print("<Р>Ваш пароль: " ); print($HTTP_POST_VARS["Password"]); } ?>
Comments ( 0 )