【问题标题】:is upload base64_decode image via file put content secure?通过文件放置内容上传 base64_decode 图像是否安全?
【发布时间】:2013-08-30 09:43:30
【问题描述】:

我正在关注http://www.codeforest.net/html5-image-upload-resize-and-crop 中的代码,在客户端调整大小后,它使用file_put_contents($file, $data); 保存。

if ($_POST) {
    define('UPLOAD_DIR', 'uploads/');
    $img = $_POST['image'];
    $img = str_replace('data:image/jpeg;base64,', '', $img);
    $img = str_replace(' ', '+', $img);
    $data = base64_decode($img);
    $file = UPLOAD_DIR . uniqid() . '.jpg';
    $success = file_put_contents($file, $data);
    print $success ? $file : 'Unable to save the file.';
}

但是我不知道这个函数实际上是如何工作的,我担心的是 - 如果用户将隐藏输入字段和假 php 代码更改为看起来像图像,或者用户使用另一个不同大小的图像更改隐藏输入字段,防止这种情况发生的最佳做法是什么?

【问题讨论】:

  • 最佳实践:不要将表单字段用于您不希望用户篡改的数据。使用会话变量。
  • 通过客户端大小调整大小,如何使用会话数据?
  • 我假设隐藏字段是由另一个 PHP 脚本创建的。如果您必须获取客户端创建的数据,则需要对其进行验证。将图像写入文件后使用getimagesize

标签: php image-resizing


【解决方案1】:

将数据写入文件后,使用getimagesize() 验证它是否是正确的图像数据。如果失败,请删除文件并报告上传失败。

【讨论】:

  • jpeg 图像中携带的 php 编写的图像是否安全不受病毒影响?
  • 可能不会。除非你能找到在 PHP 中使用的防病毒类。我在评论中说过,如果可以避免,请不要从用户那里获取数据。
  • 它是一个头像图像,我必须这样做。正在使用 GD 在服务器端复制图像,但是在将其调整为 base64_decode 后不知道如何编写脚本
猜你喜欢
  • 1970-01-01
  • 2019-09-14
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
相关资源
最近更新 更多