【问题标题】:prevent direct access to jquery post url防止直接访问 jquery post url
【发布时间】:2012-01-31 14:04:05
【问题描述】:

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

【问题讨论】:

标签: php jquery


【解决方案1】:

您在这里寻找的似乎是一个简单的重定向。

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

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

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

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

【讨论】:

  • tks jim 你让它变得简单。我会这样做=)
【解决方案2】:

这是一种解决方案:

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

【讨论】:

  • 嘿,tomi tks。我不知道这个
【解决方案3】:

如何防止用户这样做?

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

这里可以使用更多技术:

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

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

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

毕竟,您为什么要关心用户使用此 URL 而不是使用浏览器呢?您可能想将其视为您的页面碰巧使用的 API 调用。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      相关资源
      最近更新 更多