如何安全地与他人分享 link - Laravel 5

How to securely share a link to others - Laravel 5

你好我正在做一个通话录音系统,基本上,有管理员和用户。管理员将上传存储在文件系统中的通话录音文件。然后管理员将为该用户分配一个用户可以看到的通话记录。

所以在我的数据库中我有

RecordingsTable
->id
->Name
->Path
->FileName

然后是我的名称 table,我在其中存储分配给用户的通话记录。

DesignationTable
->id
->User_id
->Recording_id

我已经实现了用户只能看到和播放分配给him/her的录音的功能。我现在的问题是用户也可以将该录音分享给其他人。我已经这样做了,我所做的是将分配的记录加载给用户,并且在 his/her 仪表板中有一个 public link 视频,比如

<a href="http://localhost/callrec/public/recording/{!! $value->recordID !!}">See Public Link</a>

如您所见,我正在使用 Blade 模板。尽你所能

$value->recordID 是我的录音 ID,它是一种资源,所以假设 link 指向

http://localhost/callrec/public/recording/1

那么那个link就是public,用户就可以分享了。但是有一个风险,当 he/she 分享这个时 link 中的 id 可以被改变,比方说 http://localhost/callrec/public/recording/4 如果那个 id 存在它可以是访问这应该不是因为用户只共享了 id = 1 。如何处理这样的问题?有什么想法和建议吗?谢谢!

如果您在 URL 中使用 ID,那么正如您所注意到的,很容易猜到其他可能的 ID,更改 URL 并访问其他录音。因此,您需要做的是共享包含用户无法猜测的值的链接。一个例子是使用一些秘密值作为哈希的记录 ID 的哈希——例如你的 APP_KEY 值。

您需要做的是:

  1. 将字符串 哈希 列添加到您的记录中 table
  2. 创建记录时,计算哈希并与记录一起保存:

    $recording = Recording::create($attributes);
    $recording->hash = base64_encode(Hash::make
                           ($recording->recordID . Config::get('APP_KEY')));
    $recording->save();
    
  3. 在 URLs

    中使用该散列
    <a href="http://localhost/callrec/public/recording/{!! $value->hash!!}">
       See Public Link
    </a>
    

这样您的链接将公开可用,但猜测另一个记录的散列将或多或少与在您的应用程序中猜测密码一样困难,因为应用了相同的逻辑。请确保 APP_KEY 安全。