您正在制作一个电话录音系统,基本上,有管理员和用户。管理员将上传存储在文件系统中的呼叫记录文件。然后,管理员将为用户分配用户可以看到的呼叫记录。
所以在我的数据库中我有
RecordingsTable
->id
->Name
->Path
->FileName
然后是我的指定表,我将指定的通话记录存储到用户。
DesignationTable
->id
->User_id
->Recording_id
我已经制作了用户只能看到并播放分配给他/她的录音的功能。我现在的问题是用户还可以将该录音分享给其他人。我已经这样做了,我所做的是将指定的录音加载到用户,并在他/她的仪表板中有一个视频的公共链接,比如说
<a href="http://localhost/callrec/public/recording/{!! $value->recordID !!}">See Public Link</a>
你可以看到我正在使用Blade Template。尽你所能
$value->recordID
是我的录音ID,这是一种资源,所以让我们说这个链接指向
http://localhost/callrec/public/recording/1
然后该链接是公开的,用户可以共享它。但是存在风险,当他/她分享这一点时,可以更改链接中的id
,让我们说http://localhost/callrec/public/recording/4
,如果id
存在,它可以被访问的应该是不应该用户只共享id = 1
。如何处理这样的问题?有什么想法和建议吗?谢谢!
答案 0 :(得分:2)
如果您在网址中使用ID,那么您发现很容易猜到其他可能的ID,请更改网址并访问其他记录。因此,您需要做的是分享包含用户无法猜测的价值的链接。一个示例是使用一些秘密值作为散列的记录ID的散列 - 例如您的 APP_KEY 值。
您需要做的是:
创建录制时,计算哈希并将其与录制内容一起保存:
$recording = Recording::create($attributes);
$recording->hash = base64_encode(Hash::make
($recording->recordID . Config::get('APP_KEY')));
$recording->save();
在网址
中使用该哈希值<a href="http://localhost/callrec/public/recording/{!! $value->hash!!}">
See Public Link
</a>
通过这种方式,您的链接将公开,但猜测另一个记录的哈希值或多或少与在应用程序中猜测密码一样困难,因为应用了相同的逻辑。只需确保您的 APP_KEY 安全。