Мой сайт такой, что пользователь открывает его и запускает index.php, а в index.php существует много вызовов ajax для других php-скриптов в том же каталоге сервера, что и index.php. Теперь я использую post, но если пользователь узнает адреса этих других скриптов (например, из правого щелчка ---> просмотра страницы источника), то он может запускать эти сценарии в своем браузере, что может привести к неудобствам (например, иногда вызывает пустую записи, которые нужно вставить в базу данных, просто пример). Итак, как мне отключить выполнение php этих скриптов из браузера, но ajax может их назвать?PHP отключить выполнение из браузера
ответ
Вы не можете, по крайней мере, не надежно (вы можете использовать JavaScript для добавления дополнительных заголовков запросов, например, но пользователь может наблюдать эти запросы и добавлять сами заголовки).
Проверьте, что представленные данные являются нормальными. Если появится сообщение о добавлении пустой записи, отправьте сообщение об ошибке обратно.
... Но все же, просто проверьте его ajax или нет (все люди не безумны). – Red
Red> написание собственного скрипта для генерации запроса AJAX не очень сложно, поэтому люди все еще могут запускать свои собственные запросы как Запрос AJAX ... –
вы должны проверить в 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.... *
Большинство известных библиотек JS использовать этот заголовок. Если вы не используете библиотеку, вы можете установить этот заголовок самостоятельно.
var req = new XMLHttpRequest();
req.setRequestHeader("HTTP_X_REQUESTED_WITH", "xmlhttprequest");
Эти заголовки могут быть установлены, когда злоумышленник трамбовки данные, но для общего парня, который хочет получить доступ к странице будет показывать «Вы не должны быть здесь» сообщение через веб-браузер.
Это не мешает клиенту использовать их точно так же, как и OP, только они могут предоставить любой необходимый им вход. –
'HTTP_X_REQUESTED_WITH' не означает, что это запрос Ajax. Это просто означает, что кто-то добавил в запрос X-Requested-Header. Некоторые JS-библиотеки будут делать это при упаковке XHR. Не все будет, и ничто не помешает атакующему добавлять их вручную. – Quentin
@Quentin Больше всего. Вы не можете надежно определить ajax любым другим способом. Не то, что я знаю из. –
Вот что я использую, чтобы обнаружить AJAX запросы:
function isAjax()
{
/* AJAX check */
return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
}
Пожалуйста, обратите внимание, что это не гарантирует обнаружение и может только помочь стойло заблудших пользователей, не определены нападавших.
'HTTP_X_REQUESTED_WITH' не означает, что это запрос Ajax.Это просто означает, что кто-то добавил в запрос X-Requested-Header. Некоторые JS-библиотеки будут делать это при упаковке XHR. Не все будет, и ничто не помешает атакующему добавлять их вручную. – Quentin
@Quentin Most делаю. Вы не можете надежно определить ajax любым другим способом. Не то, что я знаю из. Ничего лучше, чем ничего. Это помогает избежать ошибочных пользователей, но не выделенных хакеров. Никогда не говорил иначе. –
@MaximKumpan Что-то лучше этого: если вызовы должны быть _private_, тогда они должны ** не ** быть выставлены _publicly_. –
- 1. Выполнение команды из веб-браузера
- 2. Выполнение HTTP PUT из браузера
- 3. Выполнение .EXE-файла из браузера
- 4. Выполнение JavaScript без браузера?
- 5. Выполнение javascript из Silverlight из приложения-браузера
- 6. Выполнение php-скрипта в фоновом режиме, инициированное из браузера
- 7. Закрытие браузера предотвращает выполнение скрипта PHP?
- 8. Выполнение нескольких exec() из PHP
- 9. Отключить выполнение PHP непосредственно с .htaccess
- 10. Выполнение вызовов API API из веб-браузера?
- 11. отключить кнопку браузера
- 12. PHP - Выполнение PHP из строки
- 13. php- выполнение exe из php
- 14. angular2 отключить кеширование браузера
- 15. Условное выполнение JavaScript-браузера
- 16. Выполнение ADB из PHP
- 17. Отключить тестер браузера веб-браузера (андроид)
- 18. Как отключить angular.reloadWithDebugInfo() из консоли браузера?
- 19. Отключить Offline навигация из истории браузера
- 20. Отключить платформу браузера/войти на платформу браузера
- 21. отключить выполнение: default-jar
- 22. Отключить окно браузера Resize
- 23. Как отключить функцию браузера
- 24. StageMonitor: отключить виджет браузера
- 25. Отключить кеш браузера
- 26. Отключить фокус для браузера
- 27. Как отключить основную панель прокрутки браузера браузера
- 28. Отключить выполнение брандмауэра
- 29. Запуск PHP файла из браузера
- 30. Остановить выполнение скрипта php
Вы должны скорее проверить php, если это пустой ответ, и если это Ajax Response. – Robert
Вам необходимо подтвердить ввод от клиента. Также можно проверить, что запрос ajax или нет. – Red
Если они могут быть запущены через ajax, то _is_ через браузер. Вы не можете включить его без другого. Если вам нужно ограничить, вам нужно сделать эти методы «безопасными», подтвердить ввод и т. Д. –