【问题标题】:Preventing forge HttpRequests防止伪造 HttpRequests
【发布时间】:2011-04-28 20:48:18
【问题描述】:

我整天都在寻找一种方法来解决这个问题,但没有成功,我想也许这里有人可以提供帮助? 我正在尝试在我的 .Js 文件中使用秘密密码,但我无法将其直接写入文件中,因为每个人都可以在访问源代码时看到它。例如,我需要使用 ajax 将此密码发送到另一个页面,以确保 HttpRequest 来自我的网站而不是来自另一个伪造的 httprequest 。
这可能吗,因为我已经尝试了其他所有方法,例如身份验证表单,但没有帮助。
我使用 asp.net 和 HttpHandler 作为返回数据的页面。

【问题讨论】:

  • 大多数主要平台都包含某种本机防伪令牌。如果我们知道您使用的网络框架会有所帮助。
  • ASP.NET 3.5 是你的意思吗?

标签: javascript xmlhttprequest httphandler httprequest


【解决方案1】:

您可以使用 PHP 生成一个在设定时间内有效的密钥,如下所示:

$password = "some random string";
$key = md5($password . $_SERVER['REQUEST_TIME']) . "|" . $_SERVER['REQUEST_TIME'];

这样您就知道密钥是何时生成的,以及是否被篡改,因为:

function check($key) {
    list($hash, $timestamp) = explode("|", $key, 2);
    if ($hash !== md5($password . $key)) {
        throw new Exception("Naughty!");
    }
    if ($timestamp < $_SERVER['REQUEST_TIME'] < 60*60) {
        throw new Exception("too old");
    }
}

不利的一面是,不经常刷新页面(在我的示例中为 1 小时)的人的密钥将过期。

另一个问题是,从技术上讲,您的“攻击者”可能会首先抓取页面以获取新密钥并使用它,然后在过期时再次抓取等等。

此解决方案非常适合防止盗链。

【讨论】:

    【解决方案2】:

    这就是它的完成方式in MVC。不幸的是,它看起来不像 WebForms 那样具有相同的安全性(至少据我所知)。

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 2019-05-26
      • 1970-01-01
      • 2019-01-10
      • 2017-01-09
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多