php - 使用基于时间的旋转散列或字符串来确保安全

标签 php security iframe hash

在 CMS 应用程序中,我偶尔需要打开另一个域的 iframe。目前,我将该 iframe 的 URL 设置为非常模糊的内容。像 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 = "YOUR_SECRET_KEY";
$time = time();
$hash = hash_hmac('sha256', $time, $key);
$url = "https://example.com/iframe?hash=$hash&time=$time";

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

注意事项:

关于php - 使用基于时间的旋转散列或字符串来确保安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7965710/

相关文章:

php - 如何为我所有的 symfony Controller 创建基类

php - PHP Imagick 中的裁剪错误?

php - 在 PHP 中模拟 LIKE

javascript - 如何检测浏览器何时阻止 iFrame

iframe - 更换 iframe 以改善 SEO

javascript - 将文本添加到随机字符串

javascript - 当用户按下后退按钮时强制重新提交表单

database - Sqlite 数据库安全

security - 没有中央服务器的聊天程序

javascript - 用 Div 替换 iframe((多个)下拉列表相关)