获取$ _FILES ['tmp_name']到JSON数据并重新发送

时间:2014-05-24 17:04:26

标签: javascript php jquery ajax security

我尝试使用AJAX上传多个图像并对数据进行排序,如下面的数据结构。

我的问题是我使用AJAX将$_FILES['tmp_name']添加到客户端json数据中, ($_FILES['tmp_name']是选择文件上传输入后,将文件存储到临时位置)
我应该注意到任何安全问题吗?

PHP存储功能仅获取数据并将$_FILES['tmp_name']移动到其他位置而不进行任何验证。但是tmp_name路径来自客户端是太危险了,不应该这样做吗?

数据结构

post_array = {
  "gallery": [
      0: ['file input val', 'file sequence', 'file type', 'tmp_name'],
      1: ['file input val', 'file sequence', 'file type', 'tmp_name'],
       ...
   ]
};

使用Javascript:

var form_data = new FormData(),
    post_array = {},
    files = [];

for (var i = 0; i < $('.file-list').length; i++) {

  // ... ajax get $_FILES['tmp_name'], tmp_name = $_FILES['tmp_name']

    var file = [];
    file.push($('.file-list').eq(i).find('.browseimage')[0].files[0]);
    file.push(tmp_name);
    file.push($('.file-list').eq(i).find('.file-sequence input').val());
    file.push($('.file-list').eq(i).find('.file-type input').val());

    files.push(file);
}

post_array['gallery'] = files;

var json_array = JSON.stringify(post_array);

form_data.append('post_array', json_array);

// ... ajax post form_data  store

PHP商店

$post_array = json_decode($_POST['post_array'], true);
// ...
for ($i=0; $i < count($gallery); $i++) { 
    $tmp_name = $gallery[$i][0]['name'];
    $tmp_size = $gallery[$i][0]['size'];
    $tmp_format = $gallery[$i][0]['type'];
    $tmp_location = $gallery[$i][0]['tmp_name'];
    ...

    move_uploaded_file($tmp_location, $file_correct_location);

1 个答案:

答案 0 :(得分:-1)

您一定要阅读一些有关此问题的信息,因为您必须注意几个安全注意事项。

回答你的问题: 不,你不应该这样做,因为用户给出的路径导致目录结构中一级文件夹的风险很高。此外,该文件可能是病毒或在服务器上执行的脚本。

安全考虑的良好起点: http://www.mysql-apache-php.com/fileupload-security.htm