0

我有一个使用 jQuery 在另一个页面中加载的页面。我想知道的是,是否有可能以某种方式阻止对在另一个页面中加载的页面的直接访问。

4

3 回答 3

2

您可以尝试为您的 get/post 或 cookie 添加一些神奇的值。然后在页面开头检查该值,如果丢失,则返回一些错误页面。

但是,这不会阻止某些用户这样做。如果他们调试您的请求,例如使用 Firebug,那么他们可以使用该幻数复制请求。

于 2009-10-11T00:15:55.290 回答
0

你不能 100% 阻止它——来自 jQuery 的请求是正常的浏览器请求,所以你能做的最多就是阻止外部链接和随意访问(费心完全复制 HTTP 请求的人仍然可以点击页面;没有办法解决这个问题)。

您可以通过检查 HTTP“referer”标头并确保引用页面是您的来停止外部链接。

您还可以通过检查标头“X-Requested-With”来检查特定请求是否来自 jQuery 和浏览器——jQuery 添加此标头并使用值“XMLHttpRequest”填充它;常规浏览器请求不会包含该标头。

您还可以使用 cookie、过期令牌(必须是请求的一部分)等设置验证系统。但这需要做更多的工作并且(我认为)矫枉过正——如果有人决定直接访问该页面并且可以绕过HTTP 标头过滤,他们还可以找出你的令牌。

于 2009-10-11T00:55:06.753 回答
0

从类似的讨论中引用Eran Galperin

正如其他人所说,可以通过创建正确的标头来模拟 Ajax 请求。如果您想进行基本检查以查看请求是否是 Ajax 请求,您可以使用:

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
 //Request identified as ajax request
}

但是,您永远不应该将您的安全性建立在此检查之上。如果您需要,它将消除对页面的直接访问。

请考虑Jeremy Ruten的回答:

无法保证他们通过 AJAX 访问它。直接访问和 AJAX 访问都来自客户端,因此很容易被伪造。

你为什么要这样做呢?

如果是因为 PHP 代码不是很安全,那就让 PHP 代码更安全。(例如,如果您的 AJAX 将用户 ID 传递给 PHP 文件,请在 PHP 文件中编写代码以确保该用户 ID 是正确的。)

上面链接的讨论中有更聪明的想法。

于 2009-10-11T10:46:28.223 回答