Полный защитный сценарий загрузки изображенияPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Полный защитный сценарий загрузки изображения

Сообщение Anonymous »

Я не знаю, произойдет ли это, но я попробую. Я узнал, что есть много функций для проверки загрузки. < /P>

В моем проекте мне нужно быть в безопасности с загруженными изображениями. Также может быть действительно большое количество его, и это может потребовать большой пропускной способности, поэтому покупка 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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»