Я хотел бы написать свой собственный (игрушечный?) Веб-фреймворк для обучения. Я хочу пройти весь процесс с нуля. Я бы хотел, чтобы он обслуживался через Apache в Linux. Я ищу лучший путь к пониманию каждого шага того, что происходит при использовании веб-фреймворка. Я хотел бы использовать любой язык, который облегчает этот процесс. Какой лучший способ для меня это сделать? Под «лучшим» я подразумеваю не один?
Я не думаю, что разрешения могут быть установлены для файла, поскольку клиент запрашивает страницу, но есть ли способ сделать это, передав дополнительный аргумент, который может служить своего рода контрольной цифрой.
Вы можете взглянуть на заголовки запросов и указать, что заголовок должен быть установлен для запросов AJAX (часто люди используют X-Requested-With
со значением вроде XMLHttpRequest
). Имейте в виду, что этот заголовок не будет установлен, если вы не установите его самостоятельно при выполнении запроса AJAX (или не используете библиотеку Javascript, которая делает это автоматически). Однако нет никакой гарантии, что кто-то не добавит этот заголовок самостоятельно, если захочет.
Значение заголовка X-Requested-With
можно найти в $_SERVER['HTTP_X_REQUESTED_WITH']
.
Поскольку невозможно быть на 100% уверенным, кто задает вопрос, вы можете ограничить сам вопрос.
Реализация этого, конечно, будет зависеть от страницы.
Например, предположим, что вы запускаете команду curl для URL-адреса, вы можете ограничить входящую переменную только определенным доменом.
<?php
if (substr($_GET["url"], 0, 19) !== "http://example.com/")
{
die();
}
// otherwise carry on
?>
Вы можете проверить заголовок $_SERVER['HTTP_X_REQUESTED_WITH']. Он должен быть равен значению «XMLHttpRequest», если это запрос Ajax.
Редактировать. Как сказал Даниэль Вандерслуис, нет никакого способа обеспечить соблюдение этого правила в полной мере. Вы можете подделать пользовательский агент, реферер — все, что приходит с запросом.
что бы вы ни запрашивали на сервере, он сохраняет информацию в переменной $_SERVER
, чтобы проверить, какую информацию хранит эта переменная, попробуйте это
print_r($_SERVER);
//you will see the difference in http and ajax request
используйте эту переменную для проверки, как показано ниже
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
//ajajx request
}
else {
//not an ajajx request
}
а это не должно работать?
if(preg_match("/getPost\.php/", $_SERVER['PHP_SELF'])){
// Access to file directly, quit..
die();
}