用gs创建图像并在php中以这种方式显示后删除图像是否安全?

问题描述 投票:0回答:1

我正在从 pdf 创建 png 图像

gs -dNOPAUSE -dBATCH -r600 -dDownScaleFactor=3 -dFirstPage=11 -dLastPage=11 -sDEVICE=png16m -sOutputFile="xyzzy.png" myPDF.pdf

然后我显示它并调用一个 php 图像文件,该文件在延迟后删除图像

<img src='xyzzy_png'>
<img src="delete_img.php" width="0" height="0" border="0" alt="">

delete_img.php 看起来像这样

<?header("Content-type: image/png");
sleep (5);
unlink('xyzzy.png');
exit;
?>

这样安全吗?怎么会失败呢?我已经对其进行了测试,可以看到该文件在我的服务器上来来去去。即使我关闭主文件,睡眠时间后图像文件也会被删除。

我应该补充一点,我尝试了其他一些建议,但没有成功。还有其他一些我没有尝试过的涉及定期进行房屋清洁的脚本。这可能会起作用,但我担心机器人会加载大量文件并使服务器空间超载。我宁愿边走边清理。

我所处的情况是,有很多潜在的文件可用于所有可能的 pdf 转换,我需要提高分辨率。这只会占用太多的服务器空间,所以我不能把所有潜在的文件都放在周围。

我还应该测试哪些其他条件?我忽略了什么吗?

什么是安全延误?我测试过5秒和60秒。两者似乎都有效。我没有测试过运行的多个版本的delete_img.php 文件,但当然我会为不同的文件使用不同的文件名。

我会注意到,包含delete_img.php 文件而不是调用它是行不通的。这是我能想到的调用该文件而不包含它的唯一方法。零尺寸图像不会显示在 Chrome 或 Firefox 中。我没有尝试过其他浏览器。

我显然需要确保delete_img.php 文件无法删除我的服务器上的任何旧文件。它是硬编码用于测试,但最终它会具有某种安全性,仅删除特定文件。我正在考虑像“filennnn.png”这样的文件名,其中 nnnn 是一个随机数,它是唯一传递给 delete_img.php 文件的东西。

php delete-file
1个回答
0
投票

sleep(5)
使其不太可能失败。但更好的方法是使用单个脚本来获取图像并将其删除。

<?php
header('Content-type: image/png');
readfile('xyzzy.png');
unlink('xyzzy.png');

您还应该将图像文件移出 Web 根目录,这样只能通过删除它的脚本来获取它。

© www.soinside.com 2019 - 2024. All rights reserved.