gterkin, в данном случае нет include/require, про недостатки сессий уже говорилось, капча не комельфо.
Мне пока видиться наилучший вариант с уникальным ключом записывающимся в базу/файл.
Тоесть в таком случае самый безопасный вариант: при каждом входе на страницу 1 генерировать уникальный ключ, и брать к примеру ip пользователя, записывать ip и ключ в базу, после передавать ключ файлу 2, в котором опять брать ip пользователя и проверять соответсвует ли полученный ключ тому ключу который записан в базе и для которого такой ip.
?
Да, я про такое читал, но в моем случае запрос ко второму файлу делается аяксом, тоесть JS, а так как JS это не серверный язык то мне кажется нельзя прописать в JS путь который за пределами корня. Во всяком случае я не знаю как.
UPD: Можно прописать htaccess таким образом:
---
SetEnvIf Referer "http://mysite.com/1.php" site
<FILES 2.php>
order deny,allow
deny from all
allow from env=site
</FILES>
И положить в папку с 2.php
В таком случае доступ к 2.php будет только у скриптов со страницы 1.php
Полагаю это наиболее простой вариант.
Вы не поверите, но я знаю что такое сессии. Ваш способ будет работать если каждый раз при открытии страницы генерировать новую сессию, делать запрос к базе, плюс во втором файлу так же делать запрос к базе (что не есть быстро), к тому же в сессии ограничение на 20 минут, и если пользователь потусуется на первой странице больше 20 минут то сессия удалиться, и что сравнивать во втором файле в таком случае? И вообще при чем тут сессии. Можно уж тогда просто генерировать уникальную строку и записывать ее в куку и базу при входе на первую страницу.
Можно сделать вариант с ключем, если придумать алгоритм по которому он генерируется и сравнивается в втором файле. Тоесть например в первом файле генерируется ключ как сегодняшнее число + 12345 и передается во второй файл, где так же по такому же алгоритму создается ключ и сравнивается с переданным.
По поводу deny all. НЕТ!
У меня есть 2 файла, 1.php и 2.php
на 1.php, есть поиск ajax. Тоесть пользователь вводит запрос в инпут, и этот запрос отпарвляется аяксом на 2.php где обрабатывается и возвращает результаты на 1.php, где они выводятся.
Если я в папку с 2.php кладу htaccess с deny all. То поиск на 1.php перестает работать и в ручную я тоже не могу подключиться к 2.php
А мне нужно чтобы вручную я не мог подключиться, а поиск работал (тоесть скрипты работали, а через браузер нет)---------- Добавлено 01.05.2012 в 21:10 ----------
Не понял, и что с этим ключом делать. Если он генерируется в первом файле и отправляется во второй то с чем его сравнивать во втором файле?
Или вы имеете введу сделать постоянный ключ, отправлять постом и проверять его во втором файле? Впринципе в таком случае можно будет взломать только если знаешь этот ключ
Ок, другой пример. Есть файл 1.html с формой, в эту форму просто вводится id для удаления из базы данных с этим id, этот id через форму передается 2.php, который получает по GET или POST этот id и выполняет удаление из базы данных с этим id.
Нужно чтобы запрос к 2.php выполнялся только через форму на 1.html.
Но я просто могу вручную передать этот id для удаления файлу 2.php без формы.
И что здесь проверять в 2.php? Id пришел? пришел, удаляем...
В таком случае ни кто вообще подключиться не сможет ни хацкер через браузер ни сами скрипты на сервере. В этом сообственно и заключается проблема
А в htaccess нельзя ли органичить прямой доступ к файлу, но разрешить доступ скриптам?
Мне что-то с трудом верится что все сайты дабы избежать взлома разрабатывают какую то мудреную систему для такого случая.
Будьте добры ссылку