Как узнать, откуда взялась форма? - PullRequest
2 голосов
/ 16 мая 2009

Мне было интересно, есть ли способ в PHP, где можно было бы указать, куда была отправлена ​​форма, без использования скрытых полей или чего-то подобного, где пользователю нужно будет лишь слегка изменить html? Например, я пытаюсь выяснить, была ли отправленная форма на самом деле на моем веб-сайте или была ли форма сохранена в автономном режиме и отправлена ​​таким образом.

Ответы [ 5 ]

3 голосов
/ 16 мая 2009

Скрытое поле нелегко подделать, если оно содержит UID (если вы зашифруете отметку времени, вы сможете узнать, как долго пользователь находился на странице)

Конечно, пользователь может вводить в поле все, что он хочет, но если он не может сгенерировать действительный UID, он не может заставить ваш php-скрипт поверить, что он пришел откуда-то еще.

Вы также можете отслеживать посещенные страницы пользователя через $ _SESSION и использовать его вместо реферера HTTP (сохраняйте каждую посещенную страницу в массиве внутри $ _SESSION, и когда вызывается ваш скрипт, вы просто проверяете, была ли последняя страница вашей ? Вариации, которые возможны в зависимости от того, что вам нужно).

1 голос
/ 16 мая 2009

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

Без скрытого поля, содержащего уникальный идентификатор, который используется для идентификации формы для этого единственного представления, нет хорошего способа определить, подделывается ли форма или нет.

0 голосов
/ 16 мая 2009

Это дает вам то, что вы после:

$referer = ($SERVER["HTTP REFERER"] == null);

Это фактически извлекает его из заголовка HTTP, где это выглядит так:

...
Referer: http://foobar.com/page.php
...

Подделать это легко любому, но для большинства целей это разумно.

Общая информация: Referer должно быть написано referrer , что является правильным написанием, но ошибка в правописании попала в спецификацию HTTP и с тех пор застряла.

0 голосов
/ 16 мая 2009

Я могу ошибаться, но не скажет ли вам заголовок реферера?

0 голосов
/ 16 мая 2009

Ты не можешь сказать. Почему это имеет значение? Если вы пытаетесь определить, подделал ли кто-то запрос, вы не сможете.

Изменено : зеленое решение, приведенное выше, помогает некоторым проблемам, но не решает вопрос о том, пришло ли оно с вашего сайта или было ли оно изменено.

...