当使用GET方法接收JSON数据时,我们可以直接从Web浏览器中获取结果,例如我将ajax中的mydata值发送到main.php文件并进行处理并得到答案显示结果如下所示:
<?php
if (isset($_GET["mydata"])) {
if ($_GET["mydata"]=="hello"){
echo "hello world";
}
}
?>
但是当用户直接在浏览器中调用它时,如http:mysite.com/mydata.php?mydata=hello
recive answer。我想不要让用户直接得到http请求的答案,只是可以从主页的ajax结果显示它是否可能?
答案 0 :(得分:1)
您正在询问如何通过将URL复制粘贴到Web浏览器中来防止直接访问仅限Ajax的请求;也就是说,只允许通过主网页上的ajax访问URL。
嗯,你可以尝试一些事情:
$_SERVER['HTTP_REFERER']
xhr.setRequestHeader()
在Javascript中设置标题,然后通过在PHP中检查$_SERVER['HTTP_X_....']
确保其值X_REQUESTED_WITH
标题,但请注意,这可能并不总是设置(请参阅:X-Requested-With header not set in jquery ajaxForm plugin)但是,在任何这些情况下,您应该知道任何知道自己在做什么的人都可以轻松设置任何HTTP标头,变量,甚至修改发送到服务器的引用者。因此,没有100%保证您的资源只能通过主网页上的AJAX 访问。互联网上没有内置控件来验证请求的来源,因此任何人都可以轻易地欺骗或伪造它。