Получить POST через атрибут действия формы - PullRequest
0 голосов
/ 09 июня 2011

Не помню, где я читал это: передача данных через атрибут действия формы безопаснее, чем передача через атрибут href. Безопаснее с точки зрения проверки сегмента, потому что это $ _POST, и вы можете сравнивать токены для защиты csrf, когда форма отправляется в отличие от прямой ссылки. Это правда?

Если предположить, что у меня есть следующее действие в форме,

<form method="post" action="/edit/pictures/delete/2235/">

Можно ли получить сегмент URI 2235 через $ _POST?

Изменить: Пожалуйста, предположите, что есть переписать URL. 2235 является значением переменной. Я не спрашиваю, как получить 2235, просто если я могу получить его через $_POST

Ответы [ 3 ]

3 голосов
/ 09 июня 2011

На вашей странице действий взорвитесь $_SERVER['REQUEST_URI'].

$parts = explode('/', $_SERVER['REQUEST_URI']);

foreach($parts as $slug)
{
    echo htmlspecialchars($slug);
}

Вы сможете извлечь этот идентификатор.

Другой подход - просто поместить его в качестве скрытого поля HTML:

<input type="hidden" name="id" value="2235" />
2 голосов
/ 09 июня 2011

Когда вы отправляете форму в конечную точку php, $ _POST заполняется только данными из элементов ввода.Путь запроса доступен в $_SERVER['REQUEST_URI'].Чтобы получить идентификатор из пути запроса, вы, вероятно, захотите использовать регулярное выражение вроде этого:

preg_match('/\/\d+\/?$/', $_SERVER['REQUEST_URI'], $matches);
$matches[0] // Contains '2235'

Что касается вашего вопроса о безопасности - ответ POST абсолютно не безопаснее, чем GET,Это разные HTTP-глаголы, и они переносят данные немного по-другому, но в любом случае данные, которые получает ваше приложение, нельзя доверять.Подделать запрос POST (например, форму) так же просто, как подделать запрос GET (например, ссылку привязки).

2 голосов
/ 09 июня 2011

Если вы используете такие URL-адреса, у вас, вероятно, будет какой-то .htaccess, который преобразует его в параметры запроса, доступ к которым осуществляется из $ _GET - попробуйте что-то вроде этого [пишет по-моему, нужно проверить]:

RewriteRule ^/edit/pictures/delete/(.+)$ ?module=pictures&action=delete&id=$1

Если нет, вы всегда можете получить доступ к $_SERVER['REQUEST_URI'] и извлечь из него необходимую информацию.

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