在CMS应用中,我有时需要打开另一个域的iframe。目前,我正在将该iframe的网址设置为非常模糊的内容。像http://domain.com/iframe/jhghjg34787386/一样。此方法有效,但从理论上讲,iframe源url将保存在用户的历史记录中,并且可以从外部访问。

因此,我想知道如何对基于时间的哈希或字符串使用基于时间的方法,该哈希或字符串在请求端进行处理,并在iframe源端进行检查。但是我希望它是基于时间的。

我可以这样做来获取我的哈希值:

<?php

   $seed = '123456789'; // a password that both the parent and source have
   $string = md5(time().$seed);
?>

但是随后必须将两个服务器完全同步。有什么办法可以使时间约束变得更加模糊?

我也对其他方法持开放态度。有什么方法可以验证iframe的父窗口是否位于某个域中?

最佳答案

您可以在哈希中添加 key ,并通过查询发送时间戳,例如:

$key = "YOUR_SECRET_KEY";
$time = time();
$hash = hash_hmac('sha256', $time, $key);
$url = "https://example.com/iframe?hash=$hash&time=$time";

另一方面,您应该首先检查时间戳是否在限制范围内(例如,不超过5分钟),然后再使用 key 和提交的时间戳进行重新哈希处理。如果您获得相同的哈希,则该请求有效。

笔记:
  • 不要使用MD5:该算法已完全损坏,不再提供任何安全性(尽管与HMAC一起使用时仍然可以使用…)
  • 您应该使用hash_equals来比较散列,以防止定时攻击
  • 我们使用HMAC来保证数据的完整性和身份验证。请参阅https://crypto.stackexchange.com/questions/1070/why-is-hkx-not-a-secure-mac-construction,以了解为什么我们不能仅将时间和键连接在一起
  • 关于php - 使用基于时间的旋转哈希或字符串来提高安全性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7965710/

    10-11 03:05
    查看更多