Php 如何安全地与他人共享链接-Laravel 5
嗨,我在做一个电话录音系统,基本上,有管理员和用户。管理员将上传存储在文件系统中的通话记录文件。然后管理员将为该用户分配一个用户可以看到的通话记录 所以在我的数据库里我有Php 如何安全地与他人共享链接-Laravel 5,php,security,laravel,hyperlink,laravel-5,Php,Security,Laravel,Hyperlink,Laravel 5,嗨,我在做一个电话录音系统,基本上,有管理员和用户。管理员将上传存储在文件系统中的通话记录文件。然后管理员将为该用户分配一个用户可以看到的通话记录 所以在我的数据库里我有 RecordingsTable ->id ->Name ->Path ->FileName 然后是我的指定表,我在其中存储分配给用户的通话记录 DesignationTable ->id ->User_id ->Recording_id 我已经做了一个功能,用户只能看到和播放分配给
RecordingsTable
->id
->Name
->Path
->FileName
然后是我的指定表,我在其中存储分配给用户的通话记录
DesignationTable
->id
->User_id
->Recording_id
我已经做了一个功能,用户只能看到和播放分配给他的录音。我现在的问题是,用户还可以将该录音共享给其他人。我已经这样做了,我要做的是将指定的录制加载到用户,在他/她的仪表板中有一个视频的公共链接,比如
正如你所看到的,我正在使用刀片模板。尽你所能
$value->recordID
是我的录音ID,它是一个资源,所以我们假设该链接指向
http://localhost/callrec/public/recording/1
然后该链接是公共的,用户可以共享它。但是有一个风险,当他/她分享这个信息时,链接中的
id
可能会被更改,比如说http://localhost/callrec/public/recording/4
如果该id
存在,则可以访问该id,而这应该不是因为用户只共享了id=1
。如何处理这样的问题?有什么想法和建议吗?谢谢 如果您在URL中使用ID,那么正如您所注意到的,很容易猜出其他可能的ID,更改URL并访问其他录音。因此,您需要做的是共享包含用户无法猜测的值的链接。一个示例是使用某个秘密值作为散列的录制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>
通过这种方式,您的链接将是公开的,但是猜测另一个记录的散列将或多或少像猜测应用程序中的密码一样困难,因为应用了相同的逻辑。只需确保你的应用程序密钥安全。为什么不为ID生成一个带有自定义salt值的哈希值。这会起作用,但请记住哈希是一个不可逆的操作,因此你需要将哈希值与记录一起存储在数据库中。基于权限的访问是一种可行的方法。禁用对服务器的非身份验证访问file@AlexTartan如果我这样做,那么这意味着每个共享链接的用户都需要注册或登录?或者也需要分配一个文件?这是可能的,有一个类似的解决方案,只为登录用户保护图像,看看你是否能从中获得灵感如何做,如果你卡住了,让我知道我找到了一个解决方案。您好,这是一个非常好的主意,但是,如果我使用哈希,我的URL会有问题,例如,我的哈希是$2y$10$FpDtUyndvT6EiaWLPbYP2uEHDkIQrFz0uvtPPpQ81cKQ/v9ta6o0e,那么它将出现在URL上,就像问题是哈希可能有一个正斜杠/这将导致404错误抱歉,忘了base64_encode:)我更新了答案您可以在这里看到base64字符-这对URL应该是安全的W非常感谢。它的工作方式和我想要的。你帮了我很多。非常感谢:)对于否决答案的人:请发表评论,我很高兴了解此解决方案的错误:)