$_REQUEST против $_GET / $_POST

Luerssen

Новичок
$_REQUEST против $_GET / $_POST

Здравствуйте.

И так, на работе спорю с одним из программистов по поводу рационального использования $_REQUEST. Хотелось бы послушать форумчан, и ихние мнения. Извините если не там создал тему. И так проекция:

Есть форма
PHP:
<form method="POST" action="me.php">
    <input type="text" name="field1" value="dodo" />
</form>
При создании этой формы, чётко известно, что данные будут приходить методом POST. Программист утверждает что неважно как они приходят. Обязательно нужно использовать $_REQUEST.

Я считаю что если форма передаёт методом POST, то и получать должны через $_POST. Как минимум это исключит брут руками noob-хакеров через Query String.

Каково Ваше мнение?
 

phpdev2007

Новичок
Данные нужно отличать, так как в $_REQUEST записываются данные не только массивов, post, и get! а значит рано или поздно будет накладка, при чем без всякого хакерства, а какие данные туда еще записываются читаем ман php
 

Luerssen

Новичок
phpdev2007, это знаем, просто опустил эту часть. Кстати это один из моих аргументов =)
 

HraKK

Мудак
Команда форума
Luerssen
Не встревай в спор если не можешь сам аргументировать.
 

WP

^_^
Я юзаю _REQUEST, но есть одна проблема. Для того чтобы не положили на чужом сайте яваскрипт который постит форму на целевой сайт и там делает авторизованные действия, нужно проверять реферер. При посте это можно сделать if ($_SERVER['REQUEST_METHOD'] == 'POST'), а при _REQUEST приходится вставлять вызов функции проверки в каждый контроллер.
 

phpdev2007

Новичок
WP
я думаю это не одна проблема, и надо учитывать что в данный массив записываются данные из COOKIE
Да по идеи использовать данный массив можно если вас не волнуют такие проблемы как расширяемость приложения в дальнейшем.
Плюс данные масив зависит от настроек php, и также он изменил свои свойства в определённых версиях php. Также может изменить их и в дальнейшем.
 

Духовность™

Продвинутый новичок
пример когда нужен REQUEST:

Допустим некий сценарий содержит вышеприведенную форму. Форма - редактирование элемента базы - записи.
У записи есть ID. ID приходит в сценарий и как _POST[id] и как _GET[id].

Вот тут как раз и нужен REQUEST - в начале скрипта мы пишем:
PHP:
if (!empty($_REQUEST['id']) && $id = intval($_REQUEST['id']))
{
	// Проверка на наличие в базе записи с таким id.
}
Данная проверка дает гарантию, что при любом методе мы всегда сможем проверить наличие записи перед работой.

-~{}~ 26.11.07 10:32:

При создании этой формы, чётко известно, что данные будут приходить методом POST. Программист утверждает что неважно как они приходят. Обязательно нужно использовать $_REQUEST.
Не обязательно, но и разницы принципиальной нет.
 

kruglov

Новичок
WP
Есть мнение, что на referer можно полагаться только при защите статистического порядка (к примеру, антилич). А сделать "форму на чужом сайте", чтобы она выдавала вам и метод, и реферер, и юзер-агент какой угодно - это ж элементарно. Ну да, форма будет уже не javascript, ну и что?
 

Андрейка

Senior pomidor developer
kruglov
ужасы какие-то рассказываете.. а показать такую чудоформу сможете?
 

kruglov

Новичок
Андрейка
А, я понял, это о проблеме <a href="http://www.mail.ru?delete=all">Жми сюда</a>
 

Фанат

oncle terrible
Команда форума
kruglov
мне кажется, что нет.
а о проблеме "я верю, что надо проверять реферер при отправке формы"

-~{}~ 26.11.07 13:02:

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

dark-demon

d(^-^)b
лучше использовать $_GET+$_POST, чтобы можно было использовать наиболее удобный в зависимости от ситуации метод. а вот $_REQUEST лучше не использовать, ибо в куках находятся не данные запроса, а долгоживущая, относительно запроса, информация.
 

Фанат

oncle terrible
Команда форума
тем, что могут перезаписать данные поста, а что?

вообще ламеры что-то больно разговорились в последнее время.
пора опять начинать гонять, что ли?
 

nerezus

Вселенский отказник
На заметку: взломщики часто используют именно POST: оно не оставляет гадостей в логах.
 

Андрейка

Senior pomidor developer
kruglov
Вы умудрились не только неправильно понять простой вопрос, но и не ответили даже на неправильно понятый)

PHP:
<?php
if (!empty($_REQUEST['delete']) && $_SERVER['HTTP_REFERER']=='http://'.$_SERVER['HTTP_HOST'].'/delete.php') {
	if (!empty($_COOKIE['user'])) {
		deleteSomething($_COOKIE['user']);
	}
	header('Location: http://'.$_SERVER['HTTP_HOST'].'/delete.php?complete=yes');
	exit;
}
?>
от вас бы любой код(java(unsigned),flash, js,vb etc.) , не использующий уязвимости браузеров, который помог бы залогиненому на сайте юзеру выполнить deleteSomething помимо его воли.
 

Духовность™

Продвинутый новичок
тем, что могут перезаписать данные поста, а что?
Роман, это не проблема массива REQUEST, это проблема разработчиков. Я тоже на это наткнулся, когда куки пост перекрывали. Изменил имена кук.

пора опять начинать гонять, что ли?
Ваистину! Шагает Гулаг в стране советцкой!! :)
 

dark-demon

d(^-^)b
triumvirat, вот поставь на один сервер несколько веб-приложений и меняй потом у них имена кук в случае конфликта, а я как-нибудь без лишнего геморроя обойдусь :)
 

Breeze

goshogun
Команда форума
Партнер клуба
Андрейка

telnet принимается ко вниманию?
 
Сверху