【问题标题】:Post request come from which pagepost请求来自哪个页面
【发布时间】:2016-04-23 15:00:00
【问题描述】:

我有一个来自我网站的一个特定页面的简单发布请求:

reqdata = 'text=' + mytext;
$.ajax({
  type: "POST",
  url: "/request.php",
  data: reqdata,
  cache: false,
  success: function(html) {
    alert(html)
  }
});

它转到同一站点的另一个页面..所以第一页调用页面mydomain.com/test.php调用http请求到mydomain.com/request.php

如何在页面mydomain.com/request.php 上识别请求来自的原始页面是mydomain.com/test.php?

我希望确保请求只能从这个确切的页面mydomain.com/test.php 完成,而不是来自其他域或页面。

我使用 ajax 和 javascript 执行请求,因此我认为我无法添加隐藏身份验证来确保整个事情是安全的。因为每个值都是在原始页面源代码上看到的。

【问题讨论】:

  • php superglobal $_SERVER['HTTP_REFERER'] 可能会有所帮助
  • @JeffPuckettII $_SERVER['HTTP_REFERER'] 不被推荐/不可靠,这就是为什么stackoverflow.com/a/6023980 - 编辑:无论谁支持该评论,都没有读过这篇文章。
  • 你不能保证传入的 HTTP 请求的来源
  • 感谢 @Fred -ii - 的参考,我之前也想知道,好好阅读
  • @JeffPuckettII 不客气,杰夫。

标签: javascript php ajax http-post


【解决方案1】:

您似乎正在寻找一种方法来保护自己免受跨站请求伪造 (XSRF)。

防止 XSRF 的常用方法是在您的页面上呈现一些时间有限的密钥(只是一些 <script> var mySecret = <?php (someSecret) ?>)并跟踪这些密钥。例如,您可以使用会话 ID 的第一个字符并检查请求数据是否包含此字段。您可以使用 ...&secret=mySecret 之类的内容将其添加到您的数据中。当会话 id 具有此数据属性的第一个字符时,您接受请求,否则您在服务器上拒绝它(可能带有错误代码 403)。

所以这个问题应该是

在我的网站上避免 XSRF 的最佳做法

并且应该在信息安全堆栈交换中询问。

【讨论】:

  • 谢谢我做了这样的事情。我写了密钥,然后重新检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
相关资源
最近更新 更多