wetransfer transferir rapido por pesados internet gratis flyred fly enviar archivos 10gb php security upload

php - transferir - Dejar que los usuarios carguen archivos enormes en el sitio web



flyred wetransfer (7)

Entonces necesito un poco de consejo. Estoy construyendo un sitio web solo para fines académicos, que está restringido a un número muy selecto de personas. El único propósito de este sitio web es como una GUI para cargas de archivos. El tamaño de estos archivos suele oscilar entre 10-12 GB.

Al hacer reasearch, descubrí que puedo usar scripts php para cargar el archivo y cambiar el tamaño máximo de carga de archivos en php.ini (pero no pude encontrar un límite máximo de carga de archivos). Hay un par de preguntas que tengo.

1) ¿Debo encontrar alguna forma de mantener abierta una conexión entre el sitio web y el usuario para evitar cosas como el tiempo de espera de la conexión? Y si es así, ¿es suficiente hacer esto por el lado del servidor? ¿O también es un problema con los navegadores web que utilizarán estos usuarios (¿el navegador web ha agotado el tiempo de espera de su conexión)? --- Estoy preguntando esto porque estas cargas tomarán una gran cantidad de tiempo.

2) ¿Cuáles son algunos de los problemas de seguridad que debo tener en cuenta? Hasta ahora he encontrado y considerado lo siguiente:

  1. restringir el acceso al sitio web solo desde varias subredes (mis usuarios académicos deseados)

  2. los archivos que se cargarán en el sitio web tienen un formato especial, que consiste en encabezados únicos) y, por lo tanto, verifica estos encabezados.

  3. Deshabilitar las expresiones CGI utilizando .htaccess

  4. mover todas las cargas fuera de la carpeta raíz de www

  5. potencialmente encontrar un antivirus, compruebe estos archivos

  6. Inicialmente todos estos usuarios se autenticarán para acceder a este sitio web; esto es algo que también debo tener en cuenta con la primera pregunta: ¿cuánto tiempo pueden permanecer conectados y cómo puedo controlar eso?

El aspecto de seguridad de este sitio web es crucial para su desarrollo, que es un problema muy complicado cuando trabajas con archivos de 12 GB.

Estas son algunas de las cosas que pensé que serían difíciles de lograr, pero estoy seguro de que hay más. ¿Qué piensan ustedes que también debería tener en cuenta? Además, si hay otros métodos de implementación, no dude.

Información adicional:

  • A partir de ahora, estos usuarios usan scp para cargar archivos a este servidor
  • La comunidad confía plenamente en estos usuarios, pero, sin embargo, la seguridad es el lema número uno de esta comunidad: hay pocas cosas abiertas al público y parte de la información almacenada en estos servidores no se puede comprometer.
  • Los archivos que se subirán al servidor son básicamente datos confidenciales sobre personas reales, por lo que debo considerar cosas como el rastreo de paquetes y tal

Gracias chicos, sé que esto es mucho para tragar, pero cualquier ayuda sería realmente apreciada.


Sin conocer a sus usuarios, recomendaría seguir con SCP. Todas sus inquietudes de seguridad han sido abordadas con SCP, y están disponibles de manera amplia y gratuita.

Dicho esto, entiendo que si los usuarios no son técnicos, SCP es doloroso. Si yo fuera usted, no trataría de implementar esto completamente como una aplicación web. Tendría una interfaz web que simplemente generaría el comando SCP apropiado para el usuario y lo ejecutaría. Esto debería ser fácil de hacer con un applet de Java, y podría proporcionar un progreso aproximado a través del navegador simplemente traduciendo el progreso de SCP que retroalimenta a su proceso en Java. Si va por la ruta del applet, se encontrará con algunos problemas de seguridad, ya que los applets generalmente no pueden iniciar procesos en la PC del cliente. Para evitar esto, deberá firmar el applet y / o solicitar privilegios de nivel superior. Una vez más, esta puede o no ser una buena solución dependiendo de cuán técnicos sean sus usuarios.

Si insiste en seguir la ruta de la aplicación web, asegúrese de usar SSL / TLS para la transferencia. Eso se ocupa de sus preocupaciones de olfateo de paquetes. También asegúrese de que el bit ejecutable no esté configurado en ninguno de los archivos grandes. Si necesitan ser ejecutables, insista en que el usuario configure el bit ejecutable en el momento de la descarga y no mientras se está almacenando. Si debe ejecutarse en el servidor, use el permiso del sistema de archivos integrado para guardar la aplicación en una zona de pruebas. Heaven te ayudará si tienen que subir y ejecutar en el servidor como root. Si ese es el caso, entonces la seguridad está fuera de cuestión :-)

Tener un antivirus para verificar los archivos es bueno, pero tenga en cuenta que las tasas de detección son terribles. He visto casos en los que un archivo se infectó profundamente y se declaró limpio en 30 de los 35 programas AV. Asuma que todos los archivos están infectados y restrinja sus permisos apropiadamente.

Un riesgo real es que alguien cargue código que contenga un exploit. Siempre que los archivos no sean ejecutables, es más difícil. Si no hay acceso a un compilador, entonces es más difícil. Si restringe las formas en que se puede acceder a los archivos solo a ciertos programas, entonces es aún más difícil para el explotador. Sin embargo, lo mejor que puede hacer para protegerse de esto es instalar sus parches. Las actualizaciones te mantienen a salvo, aunque a veces rompen cosas.

Si los usuarios son confiables, puede permitirles que establezcan los permisos para quién puede leer / escribir los archivos. De esta forma, la información confidencial de la persona se controla y existe cierta responsabilidad si alguien establece los permisos de manera flexible.

Este es un problema bastante grande para resolver, y sé que acabo de tocar la superficie. Espero que al menos ayude un poco.


Es imposible que cargue un solo archivo tan grande a través de PHP. No importa cuántos recursos de servidor (memoria) le arroje (y créame, ¡necesitaría mucho!), Hay una limitación en PHP que le impedirá hacerlo.

En php.ini, hay una variable llamada "post_max_size" que afecta el tamaño máximo de datos que puede enviar al servidor. Esta variable es un entero de 32 bits sin signo que significa que no puede ir más allá de 4.294.967.295.

Una buena solución sería usar Flash para dividir el archivo en varias partes pequeñas y luego realizar la carga del archivo. Encontré una biblioteca para ti que hace exactamente esto: http://www.blog.elimak.com/2011/08/uploading-large-files-with-flash-splitting-the-bytearray-in-chunks/

Si se encuentra con problemas de memoria en PHP, solo haga los trozos más pequeños.

¡Buena suerte!

EDITAR: para responder a su segunda pregunta, ya tiene la mayor parte. Use SSL para realizar su transferencia si tiene miedo de que los datos puedan ser secuestrados en el camino. En cuanto a la autenticación, considere usar OAuth y asegúrese de revocar el token de acceso del usuario después de la inactividad de la transferencia. Añada el php_flag engine off en su archivo .htaccess para evitar que se ejecuten los archivos PHP cargados. Y un escáner de virus de servidor no sería malo tener ejecutando periódicamente cualquiera :)


Crear dicho sitio web de manera eficiente es realmente bastante complicado, como dices. Sin embargo, es posible que desee considerar el uso de un programa GUI construido en Java o C # como un enfoque más adecuado / seguro. La razón y las ventajas son numerosas.

En primer lugar, es muy recomendable que se divida en el lado del cliente antes de subirlo. Sus usuarios pueden usar fácilmente poderosas utilidades hechas para esto como la Interfaz de Línea de Comandos FFSJ (para Windows) o la JJSplit (Java Open Source) .

Las ventajas de usar dicho programa son las siguientes:

  1. Mejor y más segura de autenticación de usuario
  2. Validar la subred de IP del usuario tanto del lado del cliente como del lado del servidor
  3. Tienes la opción de dividir los archivos para facilitar la transferencia
  4. Usted tiene la ventaja de cargar las partes de múltiples archivos simultáneamente
  5. Usted tiene la capacidad de utilizar la velocidad máxima de conexión a Internet del usuario
  6. Usted tiene la capacidad de garantizar que se minimizan y corrigen los errores que pueden ocurrir durante la carga.
  7. Verificación de suma de verificación después de la carga para garantizar la autenticidad y la carga correcta
  8. Más ventajas de seguridad adicionales ya que la carga puede incluso cifrarse.

Podría continuar, pero entiendes la esencia. Sin embargo, la desventaja obvia de esta opción es el costo y el tiempo financieros si no eres un programador.

Sin embargo, uno de esos programas que ya tiene la capacidad básica de dividir y cargar es GSplit . En los sistemas basados ​​en Unix, también podrían dividir los archivos ellos mismos antes de cargarlos o usar programas como HJSplit .

PD:

Si tiene que quedarse con PHP todo el tiempo, consulte Abrir carga . Es similar a un clon de RapidShare y ya tiene restricción de IP, autenticación de usuario, captchas, etc.

Espero que responda exhaustivamente a tu pregunta. Buena suerte.


En mi humilde opinión, FTP se adapta mucho mejor en esta situación.



Sí, puedes hacerlo sin flash o Java, pero usando HTML5. Puede crear secciones de lectura del archivo a través del objeto FileReader y luego enviar los fragmentos crudos a través de ajax al servidor, luego puede leerlos y ensamblarlos en PHP. Lo bueno de esto es que puedes pasar atributos adicionales como bytes de inicio y final en la solicitud de publicación de ajax mientras publicas el archivo en PHP para que puedas seguir qué partes se cargan y puedes construir algún tipo de de lógica de pausa / reanudación si es necesario. Para más información, compruebe esto:

http://www.html5rocks.com/en/tutorials/file/dndfiles/ http://www.webiny.com/blog/2012/05/07/webiny-file-upload-with-html5-and-ajax- using-php-streams /

Prefiero usar HTML5 que java o flash. Puede usar SSL y si realmente desea que sea aún más seguro, puede darles a esos usuarios claves privadas para cifrar los datos antes de enviarlos y luego puede descifrarlos en el servidor (lo cual sería algo redundante si usa SSL). Tenga en cuenta que descifrar 12 GB de archivos de datos puede ser bastante lento.


Sugeriría seriamente FTP + SSL explícito / implícito. Esto definitivamente resolverá sus problemas.

Hay algunos ftpds avanzados, que soportan:

  1. Permitir al usuario cargar archivos grandes (la mayoría lo hace);
  2. Denegar la conexión de usuario antes de la autenticación de contraseña simple;
  3. Permitir el inicio de sesión del usuario dentro de sus rangos de IP específicos;
  4. Permiso personalizado como cargar / descargar / borrar / enumerar, etc.
  5. Enruta a cada usuario a su propia carpeta;
  6. Resumible (también es un permiso asequible);
  7. Comprobación de integridad del archivo usando el archivo SFV;
  8. Verificación de integridad de cremallera;

El único inconveniente es descargar un cliente y configurarlo, que no es el favorito de todos.

Al igual que HTTP, necesita algún tipo de navegador para ver contenido, también necesitará clientes FTP para operarlo respetuosamente.