2013-04-19 3 views
0

Вопрос: Я хотел бы разрешить только мою форму сайта; <form action="link", чтобы перейти на www.domain.com/link, когда моя форма отправлена. Но запретить прямой доступ к URL-адресу www.domain.com/link.Запрет доступа к внешнему домену

Покушение: До сих пор я знаю, как запретить доступ с mod_rewrite:

Options -Multiviews 
RewriteEngine on 

RewriteCond %{REQUEST_URI} link 
RewriteRule ^.*/?link/? - [F] 

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

Options -Multiviews 
RewriteEngine on 

RewriteCond %{REQUEST_URI} link 
RewriteCond %{QUERY_STRING} !secret_key 
RewriteRule ^.*/?link/? - [F] 

Alternative: Но пользователь просто может скопировать и вставить этот ключ в виде строки запроса когда это они хотят получить доступ к странице напрямую. И даже если я спрятал строку запроса с помощью mod_rewrite, более умный пользователь может получить доступ к странице, проверив входные теги. Каков надежный способ защиты такой страницы? Без загрязнения строки запроса.

+0

Возможно ли скрытие секретного ключа строки запроса в $ _SESSION? Как передать переменную сеанса в качестве строки запроса, будет моим следующим вопросом. – 2013-04-19 04:26:56

+0

... Зачем вам это надоело? Независимо от того, что вы делаете, умный пользователь сможет обмануть запрос, который отправит эту форму. Такова природа HTTP - хороший запрос практически неотличим от плохого. Особенно с условием типа «только из этой формы». Самое близкое, что я мог бы придумать, - добавить случайно созданный '' в форму и проверить его на некоторая сохраненная переменная $ _SESSION, но как насчет нескольких окон? Что тогда? Поддерживать массив действительных ключей с датами истечения срока действия? Я думаю, вам лучше предположить, что каждый запрос испорчен. – FrankieTheKneeMan

+0

@SofianeM В чем проблема? Как вы думаете, почему просьба должна исходить из этой формы? –

ответ

0

Это не надежно выполнимо с помощью mod_rewrite.

Просто проверьте, правильно ли заполнены значения формы, что вы должны делать в любом случае. Если значения не заполнены, переадресуйте с помощью

header('Location: elsewhere.html'); 

или просто выберите вместо этого другой вид.