Foros del Web » Programando para Internet » PHP »

Upload Seguro :: Problema

Estas en el tema de Upload Seguro :: Problema en el foro de PHP en Foros del Web. Buenas, hago este posteo para ver si pueden solucionar este problema y a la vez, que se haga una especie de debate, más que nada ...
  #1 (permalink)  
Antiguo 28/12/2009, 15:08
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Upload Seguro :: Problema

Buenas, hago este posteo para ver si pueden solucionar este problema y a la vez, que se haga una especie de debate, más que nada en relación a la seguridad en PHP y la Web en general (no tenida en cuenta por muchos).

El siguiente problema surgió de el desarrollo para un cliente, en el cual se llego a esta estructura de trabajo:

Contabamos con dos servidores diferentes:

Servidor A: Este era el servidor de nuestra empresa. En este alojamos algunos desarrollos propios.

Servidor B: Este sería el servidor del cliente, donde tiene su página y sus datos.

Ahora bien, el concepto es el siguiente:

El cliente se conecta al Servidor A (el nuestro), logueandose de forma segura, creando una session y teniendo acceso a lugares restringidos. Es decir, un sistema de logueo comun y corriente, con toda la seguridad posible (inclusive SSL).

Una vez que el cliente se encuentra logueado a nuestra página, este tendrá la posibilidad de subir un archivo a SU SERVIDOR (o sea el Servidor B). No olvidemos que esta logueado, pero al Servidor A.

Para hacer este "crossite upload" utilizamos el SWFUpload,una librería en flash que entre otras cosas nos permite realizar esta tarea.

En el Servidor B (el del cliente) se encuentra un archivo que llamaremos "upload.php". Este es el encargado de procesar el archivo subido y guardarlo en la carpeta que corresponda (el famoso "action" de los formularios html :-p)



PROBLEMA
-----------------------------------------------------------------------------------------------------

He aquí el problema en cuestión.

¿Como harían para que unicamente nuestro cliente pueda subir un archivo al Servidor B (utilizando el "upload.php" que esta en el) cuando este logueado nuestro Servidor A?


Es decir.. ¿Como hacer para que el "upload.php" solamente funcione y guarde el archivo que le esta enviando desde el SWFUpload nuestro cliente (unicamente nuestro cliente), mientras está logueado en el Servidor A.




SOLUCIONES FALLIDAS
----------------------------------------------------------------------------------------------------

Enviar un usuario y una contraseña junto con el archivo no sería seguro, ya que con un sniffer pueden ser obtenidos estos datos facilmente.

Tampoco funciona el SSL, ya que el Servidor A es el que tiene la conexion segura, pero el Servidor B no. (y no se contempla como solución el ponerle SSL al Servidor B :-p )



¿Como hacer entonces?



En fin (que largo se hizo), espero que puedan ayudarme a encontrar la mejor solución o por lo menos alguna opinion sobre el tema.

Saludos.

Última edición por benji_; 28/12/2009 a las 15:23
  #2 (permalink)  
Antiguo 28/12/2009, 15:15
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Upload Seguro :: Problema (PHP avanzado)

Podrías usar en el servidor A una conexión de ftp y que la imagen la suba al servidor A y este envie esa imagen al servidor B. Nunca he hecho la prueba pero a ver si con ello lo puedes lograr. Ahora si quieres enviar los datos del logueo puedes usar cURL o algún socket para enviarlo, pero indicaste que no quieres enviar los datos por si usan algún sniffer.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 28/12/2009, 15:17
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: Upload Seguro :: Problema (PHP avanzado)

podes enviar usuario y contraseña encriptado en md5, facil, ahora bien, si no queres esa opcion por curl y ftp lo podes lograr, busca en las faq's del foro, creo q abrielmaerc realizo todo un manual de lo que te estoy diciendo.

Saludos, alli esta la solucion =D
  #4 (permalink)  
Antiguo 28/12/2009, 15:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Upload Seguro :: Problema (PHP avanzado)

yo lo veo sencillo... al iniciar sesión en tu servidor, envías un HASH de autenticación hacía el cliente...

dicho cliente solo puede utilizar el upload, comprobando vía el servidor que dicho HASH es correcto...

obviamente, sería cuestión de ir regenerando el HASH cuando el upload se complete correctamente, al menos, así lo visualizo...


PDTA: evita hacer distinciones en los títulos como "solo expertos", "solo avanzados", etc... la verdad se ven muy mal a la vista... y aleja al usuario común de hallar buena información solo por caprichos de "otros" ...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 28/12/2009, 15:21
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Upload Seguro :: Problema (PHP avanzado)

Muchas gracias por la pronta respuesta

Como vos decis, esta es la posibilidad mas fuerte, y fue tomada en cuenta. Una vez subido el archivo al Servidor A se puede enviar por FTP o por cURL al Servidor B.

El problema que implica esto es el tiempo de subida.

Supongamos un archivo de 10 Mb, que tiene que ser enviado dos veces, el tiempo de subida se prolongaría considerablemente (o no?).

Es el defecto principal de este metodo, por lo que buscamos otras ideas o posibles soluciones (si es que las hay )
  #6 (permalink)  
Antiguo 28/12/2009, 15:26
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: Upload Seguro :: Problema

pues por eso estimado "benji_" si es tu cliente he de asumir que tiene un server inferior al tuyo, por lo que tu que eres el "proveedor" debes realizar ciertas tareas, ok, te voy a plantear el análisis del programa (conste q lo hago gratis jeje)

El cliente sube a su server (servidor B) el archivo que queres, una vez haya sido subido por curl podes indicar a tu server (Servidor A) que inicie el proceso de transferencia en segundo plano del server B al server A, por qué? porque asi no consumis memoria del server b... y como sería un proceso en segundo plano ejecutado por el server a, no afecta al server b.

entonces la respuesta en resumidas palabras es FTP amigo!

cualquier duda me avisas!
  #7 (permalink)  
Antiguo 28/12/2009, 15:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Upload Seguro :: Problema

Puedes ejecutar el archivo "background" (me refiero a que el usuario no tenga que esperar que se ejecute el codigo de servidor a servidor), solo esperar que suba de la computadora del usuario al servidor A, usando exec()
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 28/12/2009, 15:28
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Upload Seguro :: Problema (PHP avanzado)

Cita:
Iniciado por pateketrueke Ver Mensaje
yo lo veo sencillo... al iniciar sesión en tu servidor, envías un HASH de autenticación hacía el cliente...

dicho cliente solo puede utilizar el upload, comprobando vía el servidor que dicho HASH es correcto...

obviamente, sería cuestión de ir regenerando el HASH cuando el upload se complete correctamente, al menos, así lo visualizo...


PDTA: evita hacer distinciones en los títulos como "solo expertos", "solo avanzados", etc... la verdad se ven muy mal a la vista... y aleja al usuario común de hallar buena información solo por caprichos de "otros" ...
Mil disculpas por el título, realmente no fue mi intención esa, por lo que ya esta reparado

En relación a tu respuesta, sería algo similar a iniciar una sesion en el Servidor B (en concepto digo). El tema es que en cada upload tendría que enviar el HASH correspondiente para poder confirmar que es el cliente el que lo manda y con esto sucede lo mismo que con un usuario y una pass (por mas que esten encriptada). Si se logra obtener el HASH antes de terminada una subida (y de que se cambie) hay un periodo "ventana" de vulnerabilidad.

O me equvico?
  #9 (permalink)  
Antiguo 28/12/2009, 15:48
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: Upload Seguro :: Problema

buenas!!!

pues esta es solo una idea, habria que ver si es factible, el caso seria asi:

crear una especie de API similar a la que usar facebook de tal manera que al loguear en el servidor A, este tambien sea valido en el B

ahora en las ideas pues pusieras tomar en cuenta el tipo de funcionamiento actual que maneja dicho protocolo, al menos como base de partida ;)

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #10 (permalink)  
Antiguo 28/12/2009, 16:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Upload Seguro :: Problema

pues ya sea enviando un HASH, user+pass, implementando una API ... o cualquier método, todos necesitan "algo" que comunique y valide la conexión entre servidores, así permitiendo lo que necesites...

tal ves no hay una forma 100% segura de hacerlo, siempre cae la posibilidad de poder hackear el sistema...

Edito: una alternativa sumada a cualquier otra es usar la IP del cliente... así, aunque roben el HASH no hay problema... ya que debe corresponder a un solo IP
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 28/12/2009, 18:46
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Upload Seguro :: Problema

mmmm, es interesante lo del concepto de la API, el problema es que, como decis vos pateketrueke, siempre se envía algo para validar la identidad de un usuario.

El problema es que si hace un validacion por IP o por navegador o por cualquier dato que vaya en la cabezera del paquete de informacion, estos son modificables. Siguen siendo completamente vulnerables a una lectura por parte de un tercero y la posterior modificacion.

Si al menos hubiese una forma de encriptar el archivo enviado y los datos, como el HASH o la Clave, todo en uno en un gran paquete de información.

La idea seria lograr la seguridad que brinda una conexion SSL, pero sin tenerla (por que no podemos obligar al cliente, jeje)

Por ahora la más consistente es la de utilizar cURL, ya que con FTP no podemos (me olvide de ponerlo en las restricciones, perdon :-p) puesto que no tenemos acceso a los mismos ni lo tendremos, asi que esta descartado.

De todas formas, es interesante que propongan ideas, no es un problema muy comun este, por lo que hay que revisarlo bien y pueden surgir cosas interesantes .
  #12 (permalink)  
Antiguo 29/12/2009, 10:59
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: Upload Seguro :: Problema

encriptar podes y es bastante sencillo, yo ya lo he probado en mi apache server:
mira esto de encriptar los datos con un *.pem:

http://elblogdepablot.wordpress.com/...itales-en-php/
  #13 (permalink)  
Antiguo 29/12/2009, 13:45
Avatar de benji_  
Fecha de Ingreso: marzo-2009
Mensajes: 19
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Upload Seguro :: Problema

Gracias por el link, bacdavi, lo tendre en cuenta para otros desarrollos

El tema es que la encriptacion que has indicado es con OpenSSL y una de las limitaciones que presenta el problema es que no se puede poner SSL en el Servidor B, por lo que es inutil (al menos en este caso).

Aunque si se podría replicar usando encriptacion con RSA a mano, eso sí, subiendo primero el archivo al Servidor A, encriptandolo (a mano, nada de SSL) y luego enviandolo al Servidor B vía cURL (por que tampoco podemos usar FTP... si, cuantas limitaciones, no? :-p)

Es la mejor de las opciones para poder controlar los datos y el archivo enviado.
  #14 (permalink)  
Antiguo 29/12/2009, 13:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Upload Seguro :: Problema

y que te parece OAuth ??

http://oauth.net/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:29.