我可以阻止从浏览器地址栏直接访问AJAX页面(如果他们从浏览器访问,我会存在PHP代码)。例如,这是一个AJAX页面:www.example.com/ajax/ajax.php,我需要向用户显示此页面不存在 - 类似于访问真正不存在的页面时发生的情况。我从以下网站上执行此操作:
ErrorDocument 404 /page_not_found.php
因此,当用户访问该页面时:www.example.com/ajax/ajax.php,我需要他们查看该页面的内容:page_not_found.php
注1:AJAX页面是具有从Javascript到达的PHP代码的页面,用户不能访问这些页面,因为它们没有可见的代码显示为HTML。
注意2:在AJAX页面的顶部,我检查访问源,如果是来自浏览器地址栏,那么我退出代码,我使用$ _SERVER ['HTTP_REFERER']。
我如何保护我的ajax页面免受浏览器的直接访问:
为了简化代码,我在页面顶部添加:
// To prevent from accessing the ajax page from the browser address bar direct
if( strtolower($_SERVER['HTTP_REFERER']) != 'http://example.com/index.php'){
exit; // I need to show the content of the 404 error page before this exit
}
我不想做任何重定向!寻找一种虚假的方式来显示找不到的页面。
感谢您的帮助。
答案 0 :(得分:1)
我在退出代码之前使用 file_get_contents 来阅读 not_found.php 页面解决了这个问题。因此,这样,它将显示为服务器上不存在任何真实页面,并且也不会发生重定向。
// To prevent from accessing the ajax page from the browser address bar directly
if( strtolower($_SERVER['HTTP_REFERER']) != 'http://example.com/index.php'){
header("HTTP/1.0 404 Not Found");
file_get_contents("http://example.com/not_found.php"); // will bring the 404 page
exit; // no more execution
}
答案 1 :(得分:0)
我不确定AJAX
页面的含义是什么,但我们假设您正在使用某些javascript
来抓取该页面的内容。每当您向页面发送请求时,您都应该检查回复中的404 header
并重定向/显示您的page_no_found.php
。
例如:
xhr = new XMLHttpRequest();
xhr.open('GET', 'non_existen_ajax_page', true);
xhr.send();
if(xhr.status == 404) {
//redirect or display to user your page_not_found.php
} else {
//display content of a page
}
答案 2 :(得分:0)
来自the PHP Docs。
[有]标题以字符串“HTTP /”开头(大小写不重要),它将用于确定要发送的HTTP状态代码。例如,如果您已将Apache配置为使用PHP脚本来处理丢失文件的请求(使用ErrorDocument指令),您可能需要确保脚本生成正确的状态代码。
<?php
header("HTTP/1.0 404 Not Found");
?>
强调补充。
因此,无论您何时从浏览器访问“退出”代码,请使用上面的标题字符串。
希望这有帮助。