Pregunta

Tengo un script que permite a los archivos de texto Subir usuario (PDF o DOC) al servidor, entonces el plan es convertir a texto sin formato. Pero hasta que el archivo se convierte, es en su formato en bruto, lo que me hace preocupado acerca de los virus y todo tipo de cosas desagradables.

¿Alguna idea de lo que hay que hacer para minimizar el riesgo de estos archivos desconocidos. ¿Cómo comprobar si está limpio o si es aún el formato que dice ser y que no se bloquea el servidor.

¿Fue útil?

Solución

Como he comentado a Aerik pero es realmente la respuesta a la pregunta.

Si tiene PHP> = 5.3 finfo_file() uso. Si tiene una versión anterior de PHP puede utilizar mime_content_type() (menos fiable) o cargar la extensión de PECL Fileinfo.

Ambas funciones devuelven el tipo MIME del archivo (por mirar el tipo de datos dentro de ellos). Para PDF debería ser

text/pdf

Para un documento de Word que podría haber algunas cosas. Por lo general, debe ser

application/msword

Si el servidor se está ejecutando * nix a continuación, asegúrese de que los archivos que está ahorrando no son ejecutables. Aún mejor: guardarlos en una carpeta que no es accesible por el servidor web. Puede escribir código todavía el acceso a los archivos, pero alguien que solicita una página web no será capaz de acceder a ellos en absoluto.

Otros consejos

Si alguna vez has abierto o ejecutado cualquier archivo subido por el usuario en el servidor, se debe esperar que su servidor está comprometida.

A pesar de un archivo JPG puede contener php ejecutable. Si include o require el archivo en alguna forma en su guión, que también puede poner en peligro su servidor. Una imagen te tropiezas en la web por lo que sirvió como ...

header('Content-type: image/jpeg');
header('Content-Disposition: inline; filename="test.jpg"');

echo file_get_contents('/some_image.jpg');
echo '<?php phpinfo(); ?>';

... que guardar y re-anfitrión en su propio servidor como tal ...

$q = $_GET['q']; // pretend this is sanitized for the moment
header('Content-type: '.mime_content_type($q));
header('Content-Disposition: inline; filename="'.$_GET['q'].'"');

include $q;

... ejecutará phpinfo() en su servidor. Los usuarios del sitio pueden entonces simplemente guardar la imagen en su escritorio y abrirlo con el bloc de notas para ver la configuración del servidor. Simplemente convertir el archivo a otro formato descartará esa secuencia de comandos, y no debe provocar ningún virus real adjunta al archivo.

También podría ser la mejor manera de hacer una búsqueda de virus en subida. Usted debe ser capaz de hacer un comando en línea del sistema a un corrector y analizar su salida para ver si encuentra alguna. Usuarios de su sitio debe comprobar los archivos que descarga todos modos.

De lo contrario, incluso un usuario archivo de virus laiden subido allí sentado en su servidor no debe dañar nada ... por lo que yo sé.

Hum - En mi humilde opinión que en realidad no tiene que preocuparse por el tipo de documento o algo; si se utiliza un convertidor buena para convertir a texto sin formato entonces éste debería hacer esas comprobaciones sin que se caiga el servidor.

Como es conocido desde el equipo cliente, servidores siempre debe estar protegido contra virus y ataques -. Por lo que el archivo recién cargado se debe comprobar antes de procesarlo

Nunca he visto una aplicación web haciendo esas Kinda cheques en sí - que hav

?

Si está viendo el PDF, no hay nada que pueda hacer, además de conseguir antivirus y ore que atrapa maliciosamente un PDF formado.

Software de conversión normalmente no está dirigido, así que si usted acaba de convertir y visualizar la salida de formato de texto, debe ser algo más seguro.


Oh, usted está preocupado por el servidor . Eso sí, no ejecutar los archivos cargados ...

En mi humilde opinión, hasta que algo se trata de ejecutar él, es simplemente un archivo. Sin embargo, definitivamente se puede comprobar (pero no confiar en ella, como se aclara más adelante) la extensión de archivo, y también podría investigar los formatos de archivo para ver si hay algunas secuencias características de bytes en la cabecera del archivo que se puede verificar.

en el archivo subido existen 3 a título de garantía: mejor: archivo de puesta en otro servidor más un seguro mejor: ponerlos fuera de su carpeta de WWW que significa que no hay cuerpo podría acceder a ellos por URL y debe utilizar readfile () o get_content leer y mostrar archivos poner archivos en Internet y el uso de .htaccess en la carpeta que impiden otro archivo de ejecución o poner los archivos desconocidos: la última Es lo que yo hago por carga de archivos; ponerlos fuera del lado de la raíz web y cambiar su nombre incluso excepto nombre falso en la base de datos y crear verdadero nombre del archivo por el algoritmo.

después de la carga de archivos fuera de la raíz de la web se puede acceder a ella como lo hago aquí .here es el contenido del archivo caleed getfile.php:

    <?php

    define('DS', DIRECTORY_SEPARATOR);
//fake name of file
    $uniqueid = $_GET['uniqueid'];
//file extension
    $ext = $_GET['ext'];
    if (isset($_GET['dir']))
//check address doenot contain ..
        $addrss = str_replace('..', '_', $_GET['dir']);
    $baseaddress = '..' . DS . 'foldername outside of web root';
    if ((isset($_GET['uniqueid']) and strlen($uniqueid) === 32) and ( isset($_GET['ext']) and strlen($ext) === 3 )) {
        $path = $baseaddress . DS . $addrss . DS;
        $path .= md5($uniqueid . $uniqueid . $uniqueid . $ext.'*#$%^&') .'.'. $ext;
        if (file_exists($path)) {
    //you can check for all your accessible extension i just use for img
            switch ($ext) {
                case 'jpg':
                    $content_type = 'image/jpeg';
                    break;
                case 'png':
                    $content_type = 'image/png';
                    break;
                case 'gif':
                    $content_type = 'image/gif';
                    break;
            }
            header('Content-type: ' . $content_type . ' ');
            $file = readfile($path);
        }

src en archivo o en todas partes que necesita para mostrar el archivo de hacer esto (esto es para mis imágenes):

<img src="/getfile.php?uniqueid=put fake file name here&amp;ext=put extension here&amp;dir=put rest of file address here" >

espero que ayude a .No dude en hacer más pregunta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top