我尝试使用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);
答案 0 :(得分:-1)
您一定要阅读一些有关此问题的信息,因为您必须注意几个安全注意事项。
回答你的问题: 不,你不应该这样做,因为用户给出的路径导致目录结构中一级文件夹的风险很高。此外,该文件可能是病毒或在服务器上执行的脚本。
安全考虑的良好起点: http://www.mysql-apache-php.com/fileupload-security.htm