2012-01-31 102 views
2

我有一个jquery脚本,其中post/get数据为.php脚本。但我想阻止直接访问PHP脚本。例如,如果用户查看html源代码,他们将能够通过从js文件复制url直接访问php脚本,我不希望那样。我如何防止用户这样做?我希望用户通过html UI使用它。我谷歌,但没有找到这个链接。不过,我注意到一些热门网站能够做到这一点。我该如何去做这个?阻止直接访问jquery的帖子url

+0

[防止直接访问PHP页面]可能的重复(http://stackoverflow.com/questions/185483/prevent-direct-access-to-a-php-page) – 2012-01-31 14:11:25

回答

3

这似乎是一个简单的重定向是你在找什么在这里。

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

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

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

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

+0

tks jim你很容易。我会这样做=) – nuttynibbles 2012-01-31 14:22:04

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

嘿tomi tks。我的这个 – nuttynibbles 2012-01-31 14:22:33

0

您的问题与cross site request forgery类似,并具有相同的问题。

为了降低风险,您可以检查请求方法,检查引用者,并检查设置的来源。最好的方法是在服务器上生成一个秘密令牌,以便客​​户端在每个请求中发回。由于您正在处理有权访问您的实时代码的友好用户,因此他们可能会调试脚本并查找该值,但这只会用于一个会话,并且会非常麻烦。

1

我该如何阻止用户这样做?

你不能 - 所有你能做的就是减轻风险的人可以与你的脚本拨弄。确保您拥有正确的HTTP_REFERER和/或POST数据在这方面都很有用:“恶意”用户不仅需要将浏览器指向URL,还需要更多内容。使用会话变量

  • 更多的技术可以在这里使用您可能不希望未在登录的用户 - 如果有的话 - 要使用的URL。

  • 使用一次性质询(令牌):您可以在HTML页面中放置一个值,并让JS代码和POST请求一起发送该值。生成时将此值存储在会话中。根据会话令牌检查已发布的令牌可确保用户在提交数据之前至少已“看到”HTML页面 - 这对防止重复提交也很有用。

但是,请记住,浏览器可以做的任何事情,人们也可以做到。所有这些技术都可以防止好奇而不是恶意。

所有你能做的就是确保没有人能真正伤害你,在这方面,你的Ajax URL与你网站的任何其他URL没有区别:如果它是公共可访问的,它必须使用任何技术已在其他地方使用 - 会话,用户权限等。

毕竟,为什么要关心用户使用此URL而不使用浏览器?您可能需要根据API调用来想一想,顺便说一下,您的页面恰好使用了。