如何确保人类不会';是否从PHP脚本URL查看结果?
如何确保用户不会查看来自PHP脚本URL的结果 最近,在查看一个正在进行AJAX调用的站点的源代码时,我尝试在浏览器中跟踪该链接如何确保人类不会';是否从PHP脚本URL查看结果?,php,Php,如何确保用户不会查看来自PHP脚本URL的结果 最近,在查看一个正在进行AJAX调用的站点的源代码时,我尝试在浏览器中跟踪该链接 www.site.com/script.php?query=value 我看到的不是我期望看到的结果,而是一条消息,说明只有脚本才能查看该页面 如何将脚本限制为仅允许脚本访问它 更新: 这是一页简短的回答:你不能 详细回答:您可以通过在HTTP请求中要求特殊的头值(设置Accept to application/json是一个常见的设置)来增加执行的难度。在服务器端
www.site.com/script.php?query=value
我看到的不是我期望看到的结果,而是一条消息,说明只有脚本才能查看该页面
如何将脚本限制为仅允许脚本访问它
更新:
这是一页简短的回答:你不能
详细回答:您可以通过在HTTP请求中要求特殊的头值(设置Accept to application/json是一个常见的设置)来增加执行的难度。在服务器端,只需检查以确保header设置为您期望的值。这样,普通用户就可以收到您提到的消息,您的脚本也可以正常工作。当然,高级用户将能够轻松绕过这种限制,所以不要依赖它来实现安全性 你不能。人类总是可以欺骗请求。您可以使用post变量发送请求,以确保人不会意外地出现在页面上。一种可能的解决方案是检查HTTP请求的来源。 另一个解决方案是在每个请求中发送一个“密码”。看看如何做到这一点
但是它从来都不是100%安全的,这只会让可能的入侵者更难使用。如果您使用AJAX调用脚本,那么它必须对您是可访问的,因为AJAX调用类似于您的浏览器实际请求页面,因此它不仅可以访问脚本,而且任何人都可以访问
如果它实际上是由PHP或其他方式调用的,您可以“可能”使用Apache规则或PHP脚本来减少可访问性。使用PHP,您可以检查并仅在通过ajax调用页面时显示结果
function isAjax() {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
}
if(isAjax()) {
// display content
} else {
// not ajax, dont show
echo 'Invalid Request';
}
许多开放源码应用程序在每个php文件上都使用了这种变体:
if (!defined('SOMETHING')) {
die('only scripts have direct access');
}
然后在index.php中,它们定义了一些内容:
define("SOMETHING", "access granted.");
编辑:顺便说一句,我不是说这是一个好方法
edit2:似乎我错过了关于ajax请求的部分。我同意在这种情况下这不是一个解决方案。您可以使用“查看”脚本在php会话中设置一个秘密值,并使用ajax脚本检查它
- 使用 浏览器
- PHP构建页面,将密钥保存到 会话将返回内容 到浏览器
- 浏览器获取页面内容和 向您的站点发出一些ajax请求
- 这些ajax脚本也具有访问权限 转到主页上的同一会话 是的,它允许您检查 钥匙
正如Tim所说,这个脚本几乎肯定在寻找这个请求头,它与每个请求一起发送到rpc.php(当然可以通过firebug中的net面板找到):
至于跨浏览器兼容性,activex和xmlhttprequest连接似乎都可以使用,因此这应该适用于所有主要的现代浏览器 我去的页面基本上是使用GET varibale显示基于搜索词的数据,但是如果你手动键入url并转到页面而不是显示搜索结果,它会说脚本应该在该页面上我刚刚找到了页面我在上面添加了一个链接是的,我以前听说过,但直到后来我才忘记你提到了它,我读到它只在一些浏览器中工作,但不确定它是否能在所有浏览器中工作。它在IE、FF和Chrome中对我有效。我在prototype和jquery中使用过它。它只适用于发送特定头的AJAX库,比如jquery。这里不是这样。这样做是因为您希望保护页面不受直接访问,并且只在php中包含()页面。在本例中,Ajax调用直接调用rpc.php.Session的get locked,因此每个脚本都必须等待一个脚本完成。因此,他们创建了这个函数:也许您可以提供一个指向包含对页面的调用的页面的链接,而不是页面本身。
X-Requested-With : XMLHttpRequest