使用PHP混淆图像目录?

时间:2017-06-21 21:13:52

标签: 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">之类的操作来引用该文件,但之后我就打败了混淆它的目的。

如何以图库类型格式(不仅仅是在页面的开头或结尾处集中)一次循环显示多个文件的数组,同时仍隐藏源代码?

我应该提一下文件名/目录名中会有空格。它不是我的组织结构,因此我无法在源代码中更改它 - 它是增量备份的一部分,因此我无法在服务器上更改它。

1 个答案:

答案 0 :(得分:4)

使用唯一的密钥,而不是患者姓名。例如,您可以对患者姓名进行md5哈希,然后:

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

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

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

相关问题