Php 用户图片加载实名还是隐藏图片的实名?图像安全

Php 用户图片加载实名还是隐藏图片的实名?图像安全,php,image,security,upload,Php,Image,Security,Upload,我建立了一个安全脚本(不是上传病毒s.e.)来上传图像。我现在有一个问题,因为在网站上输出图像的安全性 为什么这不是输出图像的安全方式: <img src="/pathdir/imagerealname.jpg"> 为什么制作一个像photo.php这样的脚本并将原始图像作为其他名称加载更好?用于图像的URL不是问题。你想用什么就用什么。当您允许用户在其命名的磁盘上存储文件时,就会出现问题 虽然可以允许用户直接将文件上载到类似/users/username.jpg的位置,但您必

我建立了一个安全脚本(不是上传病毒s.e.)来上传图像。我现在有一个问题,因为在网站上输出图像的安全性

为什么这不是输出图像的安全方式:

<img src="/pathdir/imagerealname.jpg">


为什么制作一个像photo.php这样的脚本并将原始图像作为其他名称加载更好?

用于图像的URL不是问题。你想用什么就用什么。当您允许用户在其命名的磁盘上存储文件时,就会出现问题

虽然可以允许用户直接将文件上载到类似
/users/username.jpg
的位置,但您必须格外小心,以确保他们不会将命名设置为文件放置在错误的位置或成为可执行文件

例如,可能某人的用户名是
。/../../etc/init.d/somethingevil
。你不会希望他们把脚本放在那里。或者,可能有人的用户名变成了
evil.php
,然后他们可以调用
/users/evil.php
,在您的服务器上执行代码

同样,可以将文件名设置为用户提供的名称,但随后必须进行大量检查以确保其正常

此外,还存在更改用户名的问题。您需要防止有人更改其他人以前拥有的用户名

现在,回到您的PHP脚本。您可以做的是始终将文件写入用户名的散列。例如,磁盘上可能有
/var/www/images/users/B858CB282617FB0956D960215C8E84D1CCF909C6.jpg
。而且,您可能有一个重写规则,用于设置
/images/users/(.*)
转到
/user image.php
的所有请求
/user image.php
然后对该用户名进行哈希运算,并将图像的内容实际输出到磁盘上。这还允许您在PHP脚本中通过libvips或类似工具按需调整用户图像的大小