【发布时间】:2012-01-31 14:04:05
【问题描述】:
我有一个 jquery 脚本,它 post/get 数据到 .php 脚本。但我想阻止直接访问 php 脚本。例如,如果用户查看 html 源代码,他们将能够通过从 js 文件中复制 url 直接访问 php 脚本,而我不希望那样。我如何防止用户这样做?我希望用户通过 html UI 使用它。我有谷歌,但没有找到这方面的链接。但是,我确实注意到一些流行的网站能够做到这一点。我该怎么做呢??
【问题讨论】:
我有一个 jquery 脚本,它 post/get 数据到 .php 脚本。但我想阻止直接访问 php 脚本。例如,如果用户查看 html 源代码,他们将能够通过从 js 文件中复制 url 直接访问 php 脚本,而我不希望那样。我如何防止用户这样做?我希望用户通过 html UI 使用它。我有谷歌,但没有找到这方面的链接。但是,我确实注意到一些流行的网站能够做到这一点。我该怎么做呢??
【问题讨论】:
您在这里寻找的似乎是一个简单的重定向。
在 php 文件的顶部添加类似这样的内容。如果未发布正确的帖子,这将阻止访问该页面。当然,您必须更改帖子并重定向到与您的项目更相关的内容。
if (!isset($_POST['data'])) {
header('Location: your-redirect-location');
}
您还可以根据 $_SERVER['HTTP_REFERER'] 变量进行重定向。
编辑:我打算在评论中解释这一点,但它太长了。我应该注意到这是一个简单的解决方案。它将防止人们意外访问您的脚本。为您的问题创建一个 100% 安全的解决方案真的很困难,如果有人真的想访问它,他们将能够。如果您在有问题的脚本中没有任何安全的东西,这会很好。否则,您将不得不寻找替代方案。
【讨论】:
这是一种解决方案:
<?php
if(isset($_POST["post_var]))
{
//to the code you want to do when the post is made
}
else
{
//do what you want to do when the user views the post page
}
?>
【讨论】:
如何防止用户这样做?
你不能——你所能做的就是减轻人们可以摆弄你的脚本的风险。确保您拥有正确的 HTTP_REFERER 和/或 POST 数据在这方面都很有用:“恶意”用户需要的不仅仅是将浏览器指向 URL。
这里可以使用更多技术:
但是,请记住,浏览器可以做的任何事情,人们也可以做到。所有这些技术都可以防止好奇者造成伤害,但不能防止恶意。
您所能做的就是确保没有人能真正伤害您,在这方面,您的 Ajax URL 与您网站的任何其他 URL 没有什么不同:如果它可以公开访问,则必须使用您已经使用的任何技术来保护它在其他地方使用 - 会话、用户权限等。
毕竟,您为什么要关心用户使用此 URL 而不是使用浏览器呢?您可能想将其视为您的页面碰巧使用的 API 调用。
【讨论】:
您的问题与cross site request forgery 相似并具有相同的问题。
为了降低风险,您可以检查请求方法、检查引荐来源网址以及检查来源(如果已设置)。最好的方法是在服务器上生成一个秘密令牌,客户端在每个请求中发回该令牌。由于您正在与可以访问您的实时代码的友好用户打交道,因此他们可能能够调试脚本并找到值,但这仅适用于一个会话,并且确实很麻烦。
【讨论】: