阻止直接访问jquery post url

时间:2012-01-31 14:04:06

标签: php jquery

我有一个jquery脚本,post/get数据到.php脚本。但我想阻止直接访问PHP脚本。例如,如果用户查看html源代码,他们将能够通过从js文件复制url直接访问php脚本,我不想这样做。我如何阻止用户这样做?我希望用户通过html UI使用它。我谷歌但没有发现这方面的链接。但是,我确实注意到一些受欢迎的网站能够做到这一点。我应该怎么做呢?

4 个答案:

答案 0 :(得分:3)

看起来简单的重定向就是你在这里寻找的东西。

在php文件的顶部添加这样的内容。如果没有正确发布,这将阻止访问页面。当然,您必须更改帖子并重定向到与您的项目更相关的内容。

if (!isset($_POST['data'])) {
    header('Location: your-redirect-location');
}

您也可以根据$ _SERVER ['HTTP_REFERER']变量进行重定向。

编辑:我将在评论中解释这一点,但这太长了。我应该注意,这是一个简单的解决方案。它会阻止人们意外访问您的脚本。为您的问题创建100%安全的解决方案真的很难,如果有人真的想要访问它,他们就能够。如果您在相关脚本中没有任何安全保护,那就没问题了。否则,你将不得不寻找替代方案。

答案 1 :(得分:1)

这是一个解决方案:

<?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
}
?>

答案 2 :(得分:1)

  

我如何阻止用户这样做?

你不能 - 你所能做的只是减轻人们可以摆弄你的脚本的风险。确保您拥有正确的HTTP_REFERER和/或POST数据在这方面都很有用:“恶意”用户需要的不仅仅是将她的浏览器指向URL。

此处可以使用更多技巧:

  • 使用会话变量:您可能不希望未登录的用户(如果适用)使用该URL。
  • 使用一次性质询(令牌):您可以在HTML页面中放置一个值,并让JS代码将此值与POST请求一起发送。您在生成会话时将此值存储在会话中。根据会话令牌检查POSTed令牌可确保用户在提交数据之前至少“看到”了HTML页面 - 这对于防止重复提交也很有用。

但是,请记住浏览器可以执行的任何操作,人们也可以这样做。所有这些技巧都可以防止好奇者受到伤害,但不能防止恶意攻击。

您所能做的就是确保没有人能真正伤害您,在这方面,您的Ajax网址与您网站的任何其他网址没有什么不同:如果它是公开可访问的,则必须使用您已经采用的任何技术进行保护在别处使用 - 会话,用户权限等。

毕竟,为什么要关心用户不使用浏览器使用此URL?您可能想要根据API调用来考虑它,顺便提一下,您的页面正好使用。

答案 3 :(得分:0)

您的问题与cross site request forgery类似,并且存在同样的问题。

为降低风险,您可以检查请求方法,检查引荐来源,并检查原点(如果已设置)。最好的方法是拥有一个在客户端在每个请求中传回的服务器上生成的秘密令牌。由于您正在与能够访问您的实时代码的友好用户打交道,因此他们可能能够调试脚本并找到值,但它只能用于一个会话并且会非常麻烦。