У меня есть скрипт браузерного JS на AJAX. В котором он обращается к условному "chat.php", как сделать так, чтобы к данному файлу нельзя было перейти напрямую, а только через JS?
Ну вы же уже раз 5 отвечали на этот вопрос
и знаете прекрасно, что он не про пароль
а про нелепые страхи "прямого доступа"
зачем предлагать решение несуществующей проблемы?
РНР во всём мире презирают из-за таких вот решений - возьмем несуществующю проблему и наворотим ненужного кода, чтобы её решить
FanatPHP, я кстати, предложил плохой вариант. По идее POST запрос можно отправить и без JS, на голом HTML просто используя <form></form>, а вот если для идентификации использовать какой-нибудь редко используемый PUT/DELETE/TRACE запрос, то наверное такой запрос уже можно использовать для подтверждения факта того, что запрос сделан при помощи JavaScript. Впрочем, не понимаю зачем это вообще может пригодится.
Оставить эту затею. Всё, что так или иначе передаётся в браузер, можно получить и в обход замысла разработчика.
Перейти на HTTP POST запрос. При GET-запросе того же URL (открыли в браузере прямо /chat.php – возвращать заглушку, или, лучше, редирект на главную.
При обращении из JS добавлять HTTP-заголовок. В chat.php проверять его наличие.
При загрузке страницы создавать-передавать с сервера уникальный идентификатор сессии. Его использовать в заголовке ajax-запросов и проверять в chat.php
Перейти на WebSocket: всё-таки чат должен быть в реальном времени )