繁体   English   中英

阻止直接访问jquery的发布网址

[英]prevent direct access to jquery post url

我有一个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。

可以在此处使用更多技术:

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

但是,请记住,浏览器可以执行的任何操作,人们也可以执行。 所有这些技术都可以阻止好奇者造成伤害,但不能阻止恶意行为。

您所要做的就是确保没有人能真正伤害到您,就此而言,您的Ajax URL与您网站的其他URL相同:如果可以公开访问,则必须使用您已经在其他地方使用的任何技术来保护它-会话,用户权限等。

毕竟,您为什么要关心用户不使用浏览器使用此URL? 您可能想用一个偶然发生的您页面使用的API调用来考虑它。

您的问题类似于跨站点请求伪造 ,并且具有相同的问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM