[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как разрешить запрос только с одного домена?
spartiat
Здраствуйте.Я новичок в ПХП ,помогите пожалуйста разобраться ,задача такова:
на ресурсе есть страница которая редиректит пришедшего пользователя в зависимости от того откуда он пришел,если с заданого сайта - загружает содержимое одной страницы ,если с любого другого - редиректит на главную:

<?php
$H=getenv("HTTP_REFERER");
$R=getenv("REMOTE_ADDR");
$f=fopen("mylog.log",'a');

flock ($f,2);
fwrite($f,"$H\n");
fwrite($f,"$R\n");
fclose($f);

if ($H=='site.com/')
{
require('xxxxx.php');
}
if ($H=='http://zzz.com/yyy.php')
{
require('xxxxx.php');
}
else
{
header('Location:index.php');
}

?>


Где zzz.com - мой сайт,а site.com сайт с которого нужно разрешить дступ.
Вопрос:как разрешить доступ с любой станицы домена site.com ?
Благодарю заранее за помощь!



Спустя 5 минут, 48 секунд (22.06.2010 - 13:47) qpayct написал(а):
проверяешь строковой функцией пхп, есть ли в строке site.com

Спустя 6 минут, 31 секунда (22.06.2010 - 13:54) spartiat написал(а):
Спасибо,а можно пример строковой функции для строчки

if ($H=='site.com/')


Я еще только учусь smile.gif

Спустя 2 минуты, 8 секунд (22.06.2010 - 13:56) DedMorozzz написал(а):
Мне ничего не мешает подделать запрос. Указав нужный рефер. Тут уже надобно будет создать сессию на странице с которой переходят, а на целевой - смотреть оную.
if($_SESSION['HTTP_HOST']=="тут нужный") ...

Спустя 2 минуты, 10 секунд (22.06.2010 - 13:58) Night User написал(а):
if ( parse_url($H, PHP_URL_HOST) == 'site.com' )


http://php.net/manual/en/function.parse-url.php

Спустя 11 минут, 53 секунды (22.06.2010 - 14:10) spartiat написал(а):
Огромнейшее благодарю!Все работает отлично!
И все-же подскажите пожалуйста в чем принципиальная разница
if($_SERVER['HTTP_HOST']=="тут нужный")

и
if ( parse_url($H, PHP_URL_HOST) == 'site.com' )

и как можно решить проблему при том что создать сессию на странице с которой переходят я не могу,а подделки запроса хотелось- бы избежать

Спустя 3 минуты, 16 секунд (22.06.2010 - 14:13) DedMorozzz написал(а):
Там не сервер, а сессия =) Я сперва написал полный вариант, после сделал краткий. Не то удалил.
Вобщем суть такова. На "нужном" сайте берёшь $_SERVER['HTTP_HOST'] и записываешь в сессию это значение. На сайте, где стоит ограничение на реферов - проверяешь значение сесси. Если есть - тогда всё отлично. Это вариант 1.
Вариант 2 - "с parse_url" - елиноразовая проверка реферала на конечном сайте. Реферал можно подделать не попадая на "предварительный сайт", с корого необходимо заходить.

Спустя 7 минут, 24 секунды (22.06.2010 - 14:21) spartiat написал(а):
То есть просто
if($_SERVER['HTTP_HOST']==site.com/')
{
require('
xxxxx.php');
}
if ($H=='
http://zzz.com/yyy.php')
{
require('xxxxx.php');
}
else
{
header('Location:index.php');
}

не спасет от подделки запроса?

Спустя 4 минуты, 48 секунд (22.06.2010 - 14:25) Night User написал(а):
А сессии разве кросс-доменные?

spartiat, не $_SERVER там

Спустя 8 минут, 9 секунд (22.06.2010 - 14:34) spartiat написал(а):
И как будет выглядеть запись сессии с данным кодом и через
if($_SESSION['HTTP_HOST']==site.com/')
?
(если можно пример,новичок все-таки!)
Спасибо.

Спустя 2 минуты, 49 секунд (22.06.2010 - 14:36) spartiat написал(а):
Цитата (Night User @ 22.06.2010 - 11:25)
А сессии разве кросс-доменные?

spartiat, не $_SERVER там

Буду очень благодарен за маленький пример что поменять в коде,что б все-таки решить проблему!

Спустя 9 минут, 33 секунды (22.06.2010 - 14:46) DedMorozzz написал(а):
Цитата (Night User @ 22.06.2010 - 13:25)
А сессии разве кросс-доменные?

spartiat, не $_SERVER там

Передавать SESSID через GET/POST.
Цитата
Буду очень благодарен за маленький пример что поменять в коде,что б все-таки решить проблему!

$_SESSION['HTTP_HOST']=$_SERVER['HTTP_HOST'];
//передаёшь на др сайт и там код такой
if($_SESSION['HTTP_HOST']=="site.com"){
//тут код
}

Спустя 5 минут (22.06.2010 - 14:51) Night User написал(а):
Цитата
Передавать SESSID через GET/POST.

Например?

Спустя 1 минута, 41 секунда (22.06.2010 - 14:53) spartiat написал(а):
Цитата (DedMorozzz @ 22.06.2010 - 11:46)
Цитата (Night User @ 22.06.2010 - 13:25)
А сессии разве кросс-доменные?

spartiat, не $_SERVER там

Передавать SESSID через GET/POST.
Цитата
Буду очень благодарен за маленький пример что поменять в коде,что б все-таки решить проблему!

$_SESSION['HTTP_HOST']=$_SERVER['HTTP_HOST'];
//передаёшь на др сайт и там код такой
if($_SESSION['HTTP_HOST']=="site.com"){
//тут код
}

К сайту с которого должен прити пользователь ,я к сожалению,не имею почти никакого отношения,и изменять там код не могу,там только ссылка на мой,так что решить задачу должен в одностороннем порядке:(

Спустя 1 минута, 14 секунд (22.06.2010 - 14:54) DedMorozzz написал(а):
Ага, ну тогда только так, как сказал Night User. Всю инфу дал и дал ссылку, где это всё описанно

Спустя 6 минут, 58 секунд (22.06.2010 - 15:01) spartiat написал(а):
Спасибо большое за помощь!Сделаю через
if ( parse_url($H, PHP_URL_HOST) == 'site.com' )

хотя не уверен что это защитит от подделки запосов.Буду грызть мануалы дальше.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.