В моем проекте мне нужно быть в безопасности с загруженными изображениями. Также может быть действительно большое количество его, и это может потребовать большой пропускной способности, поэтому покупка API не является вариантом. Я также думаю, что это поможет для многих людей, потому что невозможно найти действительно безопасного. Но я не эксперт в PHP, так что для меня действительно головная боль, чтобы добавить некоторые функции, поэтому я попрошу, чтобы это сообщество помогло создать один полный сценарий действительно безопасной загрузки изображения. /> PHP-изображение загружать список проверки безопасности. />
- Отключить PHP от запуска внутри папки загрузки, используя .httaccess. < /li>
Не разрешать загрузку, если имя файла содержит строку "php". введите. Загрузите в подчиненную неректорию, а не корневой каталог. < /Li>
< /ul>
Также: < /p>
Перепроцесс, используя изображение, используя GD (или Imagick) и сохранить обработанное изображение. Все остальные просто веселые для хакеров "< /li>
Как указал RR, используйте ove_uploaded_file () для любой загрузки" < /li>
Кстати, вы хотите быть очень ограничивающим в своей папке загрузки. Эти места - один из темных угла, где случаются многие эксплойты
. Это действительно для любого типа загрузки и любого программирования
language /server. Проверьте
https://www.owasp.org/index.php/unrestr ... ile_upload - Уровень 1: Проверьте расширение (endension file заканчивается)
- Уровень 2: Проверьте тип mime ($ file_inf = getImageize ($ _file ($ _file '' '] $ file_mime = $ file_info ['mime']
< /li>
Уровень 3: Читать первые 100 байтов и проверить, есть ли у них байты в следующем диапазоне: ASCII 0-8, 12-31 (десятичные коэффициенты). Из
здесь:
http://en.wikipedia.org/wiki/magic_numb ... 9#Examples> />
http://php.net/manual/en/function.is-uploaded-file.php
Вот большая часть этого, но все же, это не все. /> это то, что мы получили сейчас < /strong> < /p>
- Основной PHP: < /p>
Код: Выделить всё
function uploadFile ($file_field = null, $check_image = false, $random_name = false) { //Config Section //Set file upload path $path = 'uploads/'; //with trailing slash //Set max file size in bytes $max_size = 1000000; //Set default file extension whitelist $whitelist_ext = array('jpeg','jpg','png','gif'); //Set default file type whitelist $whitelist_type = array('image/jpeg', 'image/jpg', 'image/png','image/gif'); //The Validation // Create an array to hold any output $out = array('error'=>null); if (!$file_field) { $out['error'][] = "Please specify a valid form field name"; } if (!$path) { $out['error'][] = "Please specify a valid upload path"; } if (count($out['error'])>0) { return $out; } //Make sure that there is a file if((!empty($_FILES[$file_field])) && ($_FILES[$file_field]['error'] == 0)) { // Get filename $file_info = pathinfo($_FILES[$file_field]['name']); $name = $file_info['filename']; $ext = $file_info['extension']; //Check file has the right extension if (!in_array($ext, $whitelist_ext)) { $out['error'][] = "Invalid file Extension"; } //Check that the file is of the right type if (!in_array($_FILES[$file_field]["type"], $whitelist_type)) { $out['error'][] = "Invalid file Type"; } //Check that the file is not too big if ($_FILES[$file_field]["size"] > $max_size) { $out['error'][] = "File is too big"; } //If $check image is set as true if ($check_image) { if (!getimagesize($_FILES[$file_field]['tmp_name'])) { $out['error'][] = "Uploaded file is not a valid image"; } } //Create full filename including path if ($random_name) { // Generate random filename $tmp = str_replace(array('.',' '), array('',''), microtime()); if (!$tmp || $tmp == '') { $out['error'][] = "File must have a name"; } $newname = $tmp.'.'.$ext; } else { $newname = $name.'.'.$ext; } //Check if file already exists on server if (file_exists($path.$newname)) { $out['error'][] = "A file with this name already exists"; } if (count($out['error'])>0) { //The file has not correctly validated return $out; } if (move_uploaded_file($_FILES[$file_field]['tmp_name'], $path.$newname)) { //Success $out['filepath'] = $path; $out['filename'] = $newname; return $out; } else { $out['error'][] = "Server Error!"; } } else { $out['error'][] = "No file uploaded"; return $out; } } if (isset($_POST['submit'])) { $file = uploadFile('file', true, true); if (is_array($file['error'])) { $message = ''; foreach ($file['error'] as $msg) { $message .= ' '.$msg.' '; } } else { $message = "File uploaded successfully".$newname; } echo $message; } < /code> < /li> и форма: < /p> Подробнее здесь: [url]https://stackoverflow.com/questions/38509334/full-secure-image-upload-script[/url]