Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   С родного ли хоста пришли данные... (https://forum.antichat.xyz/showthread.php?t=54146)

.:EnoT:. 22.11.2007 15:08

С родного ли хоста пришли данные...
 
В общем нужно чтобы при входе на страницу проверялось с родного ли хоста пришёл посетитель на эту страницу.
Использую strstr(), но работает некоректно:

PHP код:

<?php
#Адрес сайта
$servname "http://site.ru/";
#Получаю реферер
$ref "getenv('HTTP_REFERER')";
if(
strstr($servname'$ref'))
{echo
"Всё ок";}
else
{echo
"Данные пришли с другого сайта";}
?>

Может это из-за http:// или www?..... полночи сидел пытался сделать проверку используя и strstr() и strpos() и substr() ничего не получается....намучился, решил обратиться к вам :)

И ещё один вопрос
Нужно ли фильтровать get-запросы, например:
PHP код:

<?php
if($_GET['do'] == null or empty($_GET['do']))
{echo
"Это страница test.php";}
elseif(
$_GET['do'] == 'preved')
{echo
"Это страница test.php?do=preved";}
elseif(
$_GET['do'] == 'krevedko')
{echo
"Это страница test.php?do=krevedko";}
?>

ну и т.д.....так вот нужно фильтровать эти геты? потому что смотрел несколько движков, нигде не фильтруют их..

GreenBear 22.11.2007 15:20

Цитата:

Может это из-за http:// или www?.
из-за ковычек.
Цитата:

ак вот нужно фильтровать эти геты?
нет

groundhog 22.11.2007 15:33

.:ENOT:., лучше поиск в реферере осуществлять по $_SERVER["HTTP_HOST"], но будь готов что реферер подделывается в два пинка...

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

.:EnoT:. 22.11.2007 16:15

Цитата:

.:ENOT:., лучше поиск в реферере осуществлять по $_SERVER["HTTP_HOST"], но будь готов что реферер подделывается в два пинка...
Тогда как лучше осуществить проверку?
Короче вот в чём суть, пишу я движок (свой первый в жизни движок:)). Есть там форма входа, которая находится на нескольких страницах, скрипт входа соответственно login.php так вот мне нужно сделать проверку, действительно ли данные пришли с родного хоста или нет.
Можно было бы конечно создать какой-нить файл типо login_form.php и инклудить его в те места где должна быть форма, но эт тоже не выход....или можно было создать форму входа прям в самом login.php но так не получится в данном случае, да и переделывать код не очень хочется.
Вариант со скрытым полем в форме тоже не подходит

С гетами всё понятно, спасибо, всем по плюсегам))

groundhog 22.11.2007 16:38

В общем проверку на реферер делай так (проверка по хосту):

PHP код:

if (strstr($_SERVER["HTTP_REFERER"], $_SERVER["HTTP_HOST"]) === FALSE) die("Креведко?"); 

или так (проверка включая страницу):

PHP код:

if (strstr($_SERVER["HTTP_REFERER"], "somehost.somedomain/somedir/somepage.php") === FALSE) die("Креведко?"); 

Но я ещё раз повторяюсь - это не панацея...

.:EnoT:. 22.11.2007 16:57

[x26]VOLAND
Вот за это огромное спасибо, буду пользоваться :)
groundhog
Спасибо, буим значит так проверять....

Жалко что плюсеги не могу ещё раз поставить, но обещаю))

Цитата:

А зачем тебе вообще это?
Просто хотел реализовать чтобы данные приходили с родного хоста, а если заголовки подделаны или с другого хоста пришли, чтобы не авторизовывал. Хотя может я уж слишком преувеличиваю, просто начитался книжек по безопасному php-кодингу и теперь фильтрую всё, даже то что в общем-то не надо фильтровать, поэтому и подумал что надо бы реализовать проверку входных данных. Движок делаю под свои нужны. поэтому не хочется чтоб дырявый как сито был, а всё фильтровалось и проверялось. да и по большей мере самому себе лучше будет в дальнейшем написании безопасных скриптов:)

groundhog 22.11.2007 17:07

.:enot:., золотое правило в веб-разработке - никаким данным, приходящим от пользователя доверять нельзя. Всё нужно перепроверять...

[Raz0r] 22.11.2007 22:50

PHP код:

if (strstr($_SERVER["HTTP_REFERER"], $_SERVER["HTTP_HOST"]) === FALSE) die("Креведко?"); 

Я бы сделал так:
PHP код:

if (strpos($_SERVER["HTTP_REFERER"], $_SERVER["HTTP_HOST"]) === FALSE) die("Креведко?"); 

В документации сказано, что strpos работает быстрее strstr, поэтому его использование предпочтительней


Время: 13:14