使用随机数加载图片和歌曲

时间:2016-09-20 19:14:04

标签: php jquery css nonce

我目前正在开发一个独立的幻灯片应用程序,它可以显示CSS动画图像和音乐。

到目前为止,图像和音乐只是直接从他们的真实位置加载 - 这意味着这个位置和文件必须完全可以访问公众,任何人都可以直接打开图像和歌曲,而无需使用我的应用程序。这适用于原型设计和发布 - 但现在需要更多的预防性防盗。

不要误会我的意思:我知道,没有真正的保护。我只是想让人们在直接下载时遇到困难。应该无法直接链接到媒体文件。

以下是我提出的建议:

  • 图片和歌曲通过PHP加载 - 您将id指定为参数,PHP查找位置并提供文件(如果找到)。此外,仅当作为参数提供的随机数有效(存在且不超过30秒)时,才会提供该文件。 nonce由PHP生成并存储在$_SESSION['nonce']变量中。

    <img src="image/imageid?nonce=[[nonce]]">
    <audio><source src="song/songid?nonce=[[nonce]]"></audio>

  • 在我的应用中,我有三个功能:

    • (string) generateNone()用于生成,会话保存并返回现时值 - &gt;用于标记以生成链接
    • (bool) validateNonce()用于检查nonce是否有效并在之后删除它以使其无法重复使用
    • (void) initNonces()用于删除会话中的所有nonce。每次加载应用程序时都会调用此函数(当然不包括图像和歌曲服务),以防止未使用的随机数的累积。

问题:

从理论上讲,这整个想法都有效。实际上,我遇到了两个我无法解决的问题:

  1. 图片似乎是由浏览器重新加载的:使用jQuery / JavaScript更改图片时(例如&#34;隐藏图片1,显示图片2&#34;或&#34 ;隐藏图像4,显示图像5&#34;),图像不可加载,因为随机数不再有效(=已经使用过一次)。验证后停止nonce-deletion(= nonce可重用)解决了这个问题,但这不是真正的解决方案。此问题可能与问题2有关,因为jQuery仅更改CSS属性以显示和隐藏图像。

  2. 图片和歌曲在nonce生命周期后加载:浏览器似乎只会在图片可见时加载最初被CSS隐藏的图片。虽然这通常有助于减少带宽使用,但在我的场景中,它可以防止图像和歌曲在nonce-lifetime为30秒后加载。我需要一种方法让浏览器直接加载所有内容,或者至少打开并在30秒的时间跨度内保持与所请求的图像/歌曲的连接。

  3. 问题:

    很难确定真正的问题所以我希望知道浏览器内部处理媒体加载的人可以给我一个如何解决所述问题的提示。如果您需要任何代码,请告诉我。

1 个答案:

答案 0 :(得分:0)

我很抱歉在几分钟之后询问和回答 - 但是经过数小时的搜索后我找到了解决方案,我认为对于遇到类似问题的人可能会有所帮助:

我正在使用jQuery clone() / remove()重新启动图像的CSS动画。我不知道的是,这不仅复制了元素,而且还重新加载了其中的所有媒体,就像在原始HTML标记中一样。因此图像被重新加载 - 导致问题,因为已经使用了现时。