Предотвратите прямой доступ к странице PHP

Это работает для меня.

        new Thread(() =>
        {

        Thread.CurrentThread.IsBackground = false;
        Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, (SendOrPostCallback)delegate {

          //Your Code here.

        }, null);
        }).Start();
17
задан syaz 9 October 2008 в 02:38
поделиться

8 ответов

Как другие сказали, запрос Ajax может быть эмулирован создать надлежащие заголовки. Если Вы хотите иметь основную проверку, чтобы видеть, является ли запрос запросом Ajax, что можно использовать:

 if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
     //Request identified as ajax request
 }

Однако Вы никогда не должны основывать свою безопасность на этой проверке. Это устранит прямые доступы к странице если, в именно это Вы нуждаетесь.

22
ответ дан 30 November 2019 в 10:07
поделиться

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

, Почему Вы хотите сделать это так или иначе?

, Если это - потому что код PHP не очень безопасен, сделайте код PHP более безопасным. (Например, если Ваш Ajax передает идентификатор пользователя файлу PHP, запишите код в файле PHP, чтобы удостовериться, что это - корректный идентификатор пользователя.)

34
ответ дан 30 November 2019 в 10:07
поделиться

Это кажется, что Вы могли бы идти о вещах неправильным путем. Вызов Ajax точно так же, как стандартный запрос страницы только условно ответ не предназначается для дисплея пользователю.

Это - однако, все еще клиентский запрос, и таким образом, необходимо быть рады за клиент быть в состоянии видеть ответ. Запутывание доступа с помощью "ключа" таким образом только служит для усложнения вещей.

я на самом деле сказал бы, что "проклятие" источника представления является маленьким оружием в борьбе с безопасностью через мрак.

Поэтому, какова Ваша причина желания сделать это?

8
ответ дан 30 November 2019 в 10:07
поделиться

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

Общий падеж должен передать заголовок серверу, который говорит, что "этот запрос был сделан ajax". При использовании Прототипа он автоматически устанавливает http заголовок "X-Requested-With" на "XMLHttpRequest" и также некоторые другие заголовки включая версию прототипа. (См. больше в http://www.prototypejs.org/api/ajax/options в "requestHeaders")

Добавьте: В случае, если Вы пользуетесь другой библиотекой AJAX, можно, вероятно, добавить собственный заголовок. Это полезно для знания, какой запрос это было на стороне сервера, и для предотвращения простых случаев, когда ajax страницу будут требовать в браузере. Это не защищает Ваш запрос от всех, потому что Вы не можете.

4
ответ дан 30 November 2019 в 10:07
поделиться

Не уверенный в этом, но возможно проверяют на заголовок ссылающегося домена? я думаю, ввел ли кто-то вручную в Вашем URL, он не имел бы заголовка ссылающегося домена, в то время как вызовы Ajax делают (по крайней мере, в быстро тесте, я просто сделал в своей системе).

Это - плохой способ проверить все же. Ссылающийся домен может быть пробелом по большому количеству причин. Вы пытаетесь мешать людям использовать Ваш веб-сервис в качестве услуг общего пользования или чего-то?

После чтения Ваших комментариев редактирования, если формы будут загружены через вызовы ajax, чем Вы, мог бы проверить window.location, чтобы видеть, является ли URL URL Вашей ajax формы. если это, перейдите к правильной странице через document.location

0
ответ дан 30 November 2019 в 10:07
поделиться

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

0
ответ дан 30 November 2019 в 10:07
поделиться

Файлы cookie не защищены ... попробуйте $ _SESSION. Это в значительной степени одна из немногих вещей, на которые можно положиться на кросс-страницах, которые нельзя подделать. Потому что, конечно, он никогда не выходит из-под вашего контроля.

1
ответ дан 30 November 2019 в 10:07
поделиться

Передайте ваши прямые запросы через index.php и ваши запросы ajax через ajax.php, а затем не позволяйте пользователю напрямую переходить к любому другому исходному файлу - убедитесь, что index.php и ajax.php имеют соответствующую логику для включения код им нужен.

0
ответ дан 30 November 2019 в 10:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: