2017-06-21 88 views
1

我有一组使用患者姓名存储的牙科照片,我想在网页上显示 - 当然不包括患者的信息。它将全部位于密码保护区域,但我意识到的一件事是,如果任何人检查了元素,它将包含照片的路径,其中包含他们的名字。使用PHP混淆图像目录?

我用这个职位代码:https://stackoverflow.com/a/35724642/3025534这使我回:

/pics/O/Patient Name1 
|_DSC_0338.JPG 
|_DSC_0339.JPG 
|_DSC_0340.JPG 
/pics/O/Patient Name2 
|_DSC_3947.JPG 
/pics/O/Patient Name3 
|_DSC_2541.JPG 
|_DSC_2542.JPG 

我现在都在从数据库文件名/路径数据。

我的兄弟希望我可以设置一个迷你照片库,在“管理员”模式下会显示患者姓名,但是当他想要显示给某人时,它会隐藏所有信息。

我碰到这个代码,将工作迷迷糊糊的,但只有一个文件,因为它集标题:

<?php 
    $file = 'your_images.jpg'; 
    header('Content-Type: image/jpeg'); 
    header('Content-Length: ' . filesize($file)); 
    echo file_get_contents($file); 
?> 

然后我可以做类似的东西<img src="image.php?file=/pics/O/Patient Name1/DSC_0338.JPG">引用文件,但那时我刚刚击败了目的混淆它。

我该如何循环显示一组文件,以一种画廊类型的格式(不只是集中在页面的开头或结尾)一次显示多个文件,同时仍然隐藏源文件?

我应该提到文件名/目录名称中会有空格。这不是我的组织结构,所以我无法在源代码中进行更改 - 它是增量备份的一部分,所以我无法在服务器上对其进行更改。

+0

如果只有你的麻烦显示他们,那么你应该需要隐藏来源。 – rtfm

+2

如果你在美国,你需要放下一切,聘请HIPAA顾问。公开访问的病人照片是一个重大的潜在违规行为。 – ceejayoz

+0

他希望能够向他人展示他在牙医会议上向他人展示他正在做的事情。混淆是为了防止他想通过电话进行,而另一个人有能力检查信号源。 – Alan

回答

3

使用一个唯一的密钥,而不是患者姓名。举例来说,你可以让患者姓名的MD5哈希值,然后:

<img src="image.php?id=1234ABCD987655A5&img=DSC_0338.JPG"> 

但是,如果你能“猜测”病人的名字,攻击者就可以生成所需的MD5密钥。因此,为每位患者生成随机密钥,并将其存储在数据库中。用它来查找图像。

哦,并且不要将患者数据存储在网络上的可访问的目录中。

+0

谢谢,它全部存储在web根目录之外。 – Alan