2013-06-11 3 views
-1

Мой сайт такой, что пользователь открывает его и запускает index.php, а в index.php существует много вызовов ajax для других php-скриптов в том же каталоге сервера, что и index.php. Теперь я использую post, но если пользователь узнает адреса этих других скриптов (например, из правого щелчка ---> просмотра страницы источника), то он может запускать эти сценарии в своем браузере, что может привести к неудобствам (например, иногда вызывает пустую записи, которые нужно вставить в базу данных, просто пример). Итак, как мне отключить выполнение php этих скриптов из браузера, но ajax может их назвать?PHP отключить выполнение из браузера

+0

Вы должны скорее проверить php, если это пустой ответ, и если это Ajax Response. – Robert

+2

Вам необходимо подтвердить ввод от клиента. Также можно проверить, что запрос ajax или нет. – Red

+2

Если они могут быть запущены через ajax, то _is_ через браузер. Вы не можете включить его без другого. Если вам нужно ограничить, вам нужно сделать эти методы «безопасными», подтвердить ввод и т. Д. –

ответ

2

Вы не можете, по крайней мере, не надежно (вы можете использовать JavaScript для добавления дополнительных заголовков запросов, например, но пользователь может наблюдать эти запросы и добавлять сами заголовки).

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

+0

... Но все же, просто проверьте его ajax или нет (все люди не безумны). – Red

+1

Red> написание собственного скрипта для генерации запроса AJAX не очень сложно, поэтому люди все еще могут запускать свои собственные запросы как Запрос AJAX ... –

-1

вы должны проверить в PHP скрипт, если это Ajax réponse

/* AJAX check */ 
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&  strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
echo 'call from ajax'; //here you have call request by ajax 
} 
else 
{ 
    die("You shouldn't be here"); 
} 

/* not ajax, do more.... * 

Source of code

Большинство известных библиотек JS использовать этот заголовок. Если вы не используете библиотеку, вы можете установить этот заголовок самостоятельно.

var req = new XMLHttpRequest(); 
req.setRequestHeader("HTTP_X_REQUESTED_WITH", "xmlhttprequest"); 

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

+0

Это не мешает клиенту использовать их точно так же, как и OP, только они могут предоставить любой необходимый им вход. –

+0

'HTTP_X_REQUESTED_WITH' не означает, что это запрос Ajax. Это просто означает, что кто-то добавил в запрос X-Requested-Header. Некоторые JS-библиотеки будут делать это при упаковке XHR. Не все будет, и ничто не помешает атакующему добавлять их вручную. – Quentin

+0

@Quentin Больше всего. Вы не можете надежно определить ajax любым другим способом. Не то, что я знаю из. –

-2

Вот что я использую, чтобы обнаружить AJAX запросы:

function isAjax() 
{ 
    /* AJAX check */ 
    return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 
} 

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

+0

'HTTP_X_REQUESTED_WITH' не означает, что это запрос Ajax.Это просто означает, что кто-то добавил в запрос X-Requested-Header. Некоторые JS-библиотеки будут делать это при упаковке XHR. Не все будет, и ничто не помешает атакующему добавлять их вручную. – Quentin

+0

@Quentin Most делаю. Вы не можете надежно определить ajax любым другим способом. Не то, что я знаю из. Ничего лучше, чем ничего. Это помогает избежать ошибочных пользователей, но не выделенных хакеров. Никогда не говорил иначе. –

+0

@MaximKumpan Что-то лучше этого: если вызовы должны быть _private_, тогда они должны ** не ** быть выставлены _publicly_. –

Смежные вопросы