Проверка на посещение главной страницы сайта

dmitry1984

Новичок
Проверка на посещение главной страницы сайта

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

У меня к Вам вот такой вопрос.

Имеется сайт хттп://ля-ля.ру на этом сайте расположена форма, которая передает данные в скрипт расположенный в хттп://ля-ля.ру/папка/ля-ля.пхп?куча всяких параметров..., этот скрипт обрабатывает полученные данные и на основе них открывает определенную страницу, например хттп://ля-ля.ру/страница.пхп , так вот, если посмотреть ХТМЛ код страницы, и взять оттуда немного подредактированную ссылку на которую отправляет данные форма, т.е. хттп://ля-ля.ру/папка/ля-ля.пхп?куча всяких параметров..., то скрипт все нормально обработает и выдаст страницу хттп://ля-ля.ру/страница.пхп .... нужна проверка на то, что данные были получены не методом вставки готовой ссылки, а например что клик по кнопке или ссылке был произведен именно с главной страницы хттп://ля-ля.ру или хттп://ввв.ля-ля.ру. , а если нет, то вывести ошибку, типа "Вы не посетили главной страницы сайта"

Если меня кто-нибудь понял, то подскажите как такое можно сделать?
 

StUV

Rotaredom
dmitry1984
перескажи свою задачу без ля-ля.ру, плиз....
типа: юзер должен
1. зайти на страницу А.
2. Сделать то-то и то-то, чтобы попасть на Б
3. А он (сволочь) может сделать так-то и так-то
4. как мне этого избежать ?

- ок ?
------------
зы: проще будет понять что тебе конкретно надо, и каким способом оптимальнее это сделать....
 

vada

Новичок
проверяй HTTP_REFERER
это самое простое

посложнее - открывай сессию и при посещении главной страницы делай запись (в файл или базу - как удобно), некий маркер о том, что пользователь с таким-то SID был на главной стр
а при посещении другой страницы, соответственно, проверяй, существуется ли для этого SID такая запись
 

StUV

Rotaredom
2vada
'HTTP_REFERER'
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.
 

dmitry1984

Новичок
Еще забыл сказать, это сайт с лотереями на WebMoney

юзер должен: :)

1) зайти на страницу sayt.ru/?page=game1
2) выбрать сумму ставки, тип валюты (WMZ и т.д.)
3) нажать на кнопку оплатить.
4) оплатить
5) посмотреть результат.
6) получить выигры, если такой был.

1) страницы бывают разные, т.е. sayt/?page=2, 3 и т.д.
3) после нажатия все данные формы передаются в скрипт

<script>
function SendTOWM()
{
var n1="0";
if(document.forms['form1'].n1[0].checked)
{
n1="1";
}else n1="-1";
location.href="wmk:paylink?url=<{SITEURL}?page=game1&st=2&n2={NUM}&n1="+n1+"&uniq={TIME}&amount="+document.forms['form1'].moneys.value+">&purse="+document.forms['form1'].type.value+"&amout="+document.forms['form1'].moneys.value+"&method=POST{TEST_MODE}&desc=Ставка
setTimeout("location.href='?page=lt_gt'",2000);
}
</script>

скрипт обрабатывает данные и выдает результат игры.
4) Некоторые особо умные открывают HTML выдергивают ссылку
wmk:paylink?url=<http://sayt.ru/?page=game1&st=2&n2=16&n1=1&uniq=10937843&amount=0.01>&purse=Z738476446387&amout=0.01&method=POST{TEST_MODE}&desc=Ставка

Это игра "больше/меньше"...

в итоге они подставляют число n2 какое захотят и постоянно выигрывают..., при этом т.к. все игры используют интерфейс Click$Buy, то по этой ссылке они могут зайти снова на страницу результата, не сделав ставки, но получив выигрыш (а говорят что WM супер безопасная)...

Так вот, надо, чтобы люди не могли играть по такой прямой ссылке на оплату, а только со страницы игры, т.е. с sayt.ru/?page=game1

Забыл добавить, что $_SERVER["HTTP_REFERER"] передает пустую строку, поэтому он не подходит.
 

StUV

Rotaredom
как вариант:
на стартовой странице пиши юзеру куку с uid (генери как-нить или используй сессии) и время захода, а на странице-обработчике сверяй - если уид не соответствует - то юзер пролетает, если прошло больше Н минут - тоже (типа страница устарела).
Для каждой новой игры "перегенеряй" уид....
Короче - что-нить в этом направлении ....

-~{}~ 10.09.04 15:37:

зы: пользователей с отключенными куками можно тоже нафик....
 

dmitry1984

Новичок
На главной странице сайта, или на странице игры?
А можно это кодом подсказать?
 

dmitry1984

Новичок
Да ладно ты, распеши ;) Для тебя же это не так сложно.

Я понял тебя так:

1) На странице игры sayt.ru/?page=game1, 2, 3 и т.д. сделать код, который генерит uid и пишет его в куки, а также дату и время туда пишет, ну и срок жизни куки.
2) Из формы передается uid, типа <input type="hidden" name="signtrans" value="$uid">.
3) далее он обрабатывается, сравнивая то что пришло из формы, с тем что у чела в куках (время, срок жизни и т.д.) записано, и если все ништяк, то результат игры выдает, если нет, то Х ему.

а как кодом сделать не представляю :( подскажи плиз ;)
 

StUV

Rotaredom
dmitry1984
у тебя все очень красиво на словах получилось
берешь по порядку каждое словосочетание и rtfm =)
 

vada

Новичок
В куки как раз писать не надо, если тебе дорог вопрос финансовой безопасности:). Куки подделываются.

Писать надо или в файл или в базу.
Да, и uid самому передавать не нужно, если у тебя сессия, то SID генерится автоматически
 

dmitry1984

Новичок
Пажалуй я лучше пиво пойду попью, а то них не понимаю... :(

-~{}~ 10.09.04 17:36:

Вот так ведь можно чего-то добится?

PHP:
<?

 //Генерелка uid вставить в файле игры

$this->num=mt_rand(0,1000000);
$rand = md5("$this->num");

//Запись тоже в файле игры

mysql_query("insert into cookie values('$rand', '".$_SERVER['REMOTE_ADDR']."', '".date("d.m.Y H:i:s")."')");

//Выковырка из БД вставить в обработчике

$cookie_query=mysql_query("SELECT * FROM cookie where uis=\"".$_POST['UID']."\"") or die();
$uid = mysql_result($cookie_query,0,"uid");
$ip = mysql_result($cookie_query,0,"ip");

//Если переданный $uid и $ip не равен $uid и $ip тем, которые в БД, то показать то-то... вставить в обработчике...

if($_POST['uid']==$uid||$ip=$_SERVER['REMOTE_ADDR'])
	{

print "ХУ вам..";

return;						
	}

?>
Если что-то не так, то поскажите, и ещё, подскажите как сделать, чтобы запись в БД жила не больше 5 минут???

P.S. А говорят пиво вредно пить, вот выпил пару банок и в голову что-то залезло :)

Хорошая штука пиво :)

БД так убивать mysql_query("delete from cookie where time<".(time()-5*60)) or die(mysql_error()); ??????

А это возможно только при запуске скрипта, или есть ещё варианты?
 

StUV

Rotaredom
dmitry1984
еще раз _настоятельно_ рекомендую воспользоваться поиском
оч много раз предлагалось много красивых решений данной проблемы (возможно в теории, на словах - но ты, как я вижу, сможешь это оценить)
 
Сверху