Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Vuestra opinión sobre el API XML-RPC de una aplicación (https://www.clubdelphi.com/foros/showthread.php?t=38094)

roman 03-12-2006 20:48:38

A ver, aquí estamos bajo el supuesto de que alguien se pone a escuhar la comunicación entre nuestra pc y el servidor, de lo contrario no hay de qué preocuparse.

Vamosa ver, tú le solicitas al servidor un número aleatorio y él te lo manda:

id = 2738582

Este número podria de todas formas verlo quien esté escuchando.

Tu mandas al servidor:

md5(2738582 + pepeloco)

donde pepeloco es tu contraseña. Muy bien, yo intercepto esto y lo mando por mi cuenta. El servidor lo recibe igual que recibiría el tuyo. No veo ventaja. Claro, eso sólo servirá el número de peticiones estipuladas. Bueno, cuando se regenere el número aleatorio, lo vuelvo a escuchar, vamos yo sigo escuchando ¿no?, y lo cambio y se lo mando al servidor. ¿Dónde está la ventaja?

// Saludos

mamcx 03-12-2006 20:53:28

Ok, algunas cosas:

- Es cierto que al trabajar una pagina web por http es igual de inseguro y se estan enviando los datos de claves en plano.

Diantre, no habia caido en eso. Es por eso que es muy comun que la pagina de login y perfil de usuario sea por https y el resto por http. Un punto que debo analizar ahora para mi propia portal!

Por otro lado, desde un punto de vista estricto, es lo mismo pasar una sola clave o un conjunto de parametros de autenticacion o lo que sea. Una vez se lee, se usa la misma clave y ya.

El punto es que clave/id no es un atributo de SEGURIDAD. Es un atributo de AUTENTICACION. Para que sea algo *realmente* seguro debe haber un mecanismo de comunicacion seguro y un mecanismo de autenticacion verificable.

Porque API-key VS Usuario-Contraseña?

- Porque es indespensable que el usuario AUTORIZE el uso del mecanismo automatizado. Por ejemplo, magnolia o yahoo demandan la solicitud del API key, lo que equivale a firmar un documento autorizando el uso de mecanismos robotizados para manipular los comandos.

- Por Usuario/Clave = 1 Sola cadena para efectos practicos. De hecho, una cadena muy larga puede ser mas segura que 2 muy cortas.

Ademas, aunque la clave pase con MD5 igual la *mitad* de la clave ya se sabe, y esta se puede interelacionar con otras cosas. Al igual que muchos, yo siempre uso mamcx en mis registros asi que tengo un sistema 1/2 de seguro que lo que podria ser...

- Otro beneficio algo dudoso es que es mala idea guardar claves y nombres de usuario en texto plano en el codigo fuente, sobre todo en lenguajes como PHP que demandan el despliegue de codigo.

Bueno, como dije, quizas me estoy pasando de neurotico.

- Porque si todos los demas usan API-Key, porque no estar a la moda ;)

Me preocupa eso si lo de MD5 doble. Estas haciendole MD5 asi:

"holamundo".MD5().MD5() ????

Porque si eso es verdad, has minado la seguridad de tu clave y haz reducido la efectividad de la misma. Contrario a lo que uno intuitivamente cree, aplicar multiples encriptaciones a un dato disminuye y no aumenta su seguridad.

Como generar el API-Key? Simplemente un dato autogenerado que sea un poco largo y que carezca de sentido, busca como generar info aleatoria (o puedes reusar por ejemplo la generacion de GUID)

dec 03-12-2006 21:03:22

Hola,

Cita:

Empezado por Mario
El punto es que clave/id no es un atributo de SEGURIDAD. Es un atributo de AUTENTICACION. Para que sea algo *realmente* seguro debe haber un mecanismo de comunicacion seguro y un mecanismo de autenticacion verificable.

Ahí le has dado. Eso es así.

Cita:

Empezado por Mario
Me preocupa eso si lo de MD5 doble.

Bueno. Olvídate de todo lo que se ha hablado de MD5 en este Hilo. En realidad el "doble MD5" viene de cómo se guardan las contraseñas de los usuarios en la base de datos de la aplicación. Es decir, en los correspondientes campos no se guarda la contraseña en claro, sino su "doble MD5".

De este modo ni siquiera nosotros conocemos las contraseñas de los usuarios. El usuario entrega su contraseña a la aplicación, y esta comprueba su "doble MD5" con que el hay guardado en la base de datos. Entendí que era mejor un "doble MD5", aunque, puesto que Loturak es una aplicación de código abierto... esta información es perfectamente conocible.

Sólo sé que no sé nada

seoane 03-12-2006 21:20:10

Cita:

Empezado por roman
Muy bien, yo intercepto esto y lo mando por mi cuenta. El servidor lo recibe igual que recibiría el tuyo. No veo ventaja. Claro, eso sólo servirá el número de peticiones estipuladas. Bueno, cuando se regenere el número aleatorio, lo vuelvo a escuchar, vamos yo sigo escuchando ¿no?, y lo cambio y se lo mando al servidor. ¿Dónde está la ventaja?

No es lo mismo "escuchar" que interponerse entre el servidor y el cliente. Tu estas suponiendo que el posible atacante tiene control total sobre la comunicación y puede mandar tanto al cliente como al servidor lo que el quiera e impedir que lleguen los mensajes de uno a otro. En ese caso, la cosa esta difícil y este método no supone ninguna ventaja. Pero en el caso de que solo pueda "escuchar" como es el caso de un sniffer, la cosa cambia. Pongamos que el numero solo es valido para una petición, el cliente pide el numero, cifra la contraseña, y envía la segunda petición con la contraseña cifrada, en ese momento esa contraseña deja de ser valida. Si alguien estuviera curioseando, solo podría obtener la contraseña cifrada, una contraseña que ya no seria valida para usarla una segunda vez.

Cita:

Empezado por mamcx
Me preocupa eso si lo de MD5 doble. Estas haciendole MD5 asi:

"holamundo".MD5().MD5() ????

Porque si eso es verdad, has minado la seguridad de tu clave y haz reducido la efectividad de la misma. Contrario a lo que uno intuitivamente cree, aplicar multiples encriptaciones a un dato disminuye y no aumenta su seguridad.

¿Por que? Si bien eso es muy cierto para algoritmos de encritptacion que utilizan clave, no creo que sea aplicable a algoritmos de hash. Aunque corrígeme si me equivoco.

En cuanto a lo de usar claves o apikeys, no dudo del beneficio de usar apikey. Pero el nombre de usuario y contraseña sigue siendo necesario para realizar tareas con los enlaces privados. Yo lo veo así, usar un apikey en todas las funciones, de esta manera se puede llevar un control, aunque no sea muy exacto, de quien y como utiliza nuestro servicio. Y cuando se necesite realizar alguna acción que necesite autenticación pedirle al usuario que ingrese su nombre y contraseña. Solo la apikey estaría insertada en el código fuente, la contraseña la tendría que insertar el usuario.

dec 03-12-2006 21:38:23

Hola,

API-KEY, API-KEY, sentadita me quedé... :D :D

Cita:

Empezado por Seoane
(...) Yo lo veo así, usar un apikey en todas las funciones, de esta manera se puede llevar un control, aunque no sea muy exacto, de quien y como utiliza nuestro servicio.

Es correcto Domingo. Por cierto, ¿qué te pareció el ejemplo "EnlacesUsuario"? ¿Chulo a que sí? ¿eh? :eek: :eek: :D

Ahora la piedra queda en el tejado de implementar lo dicho. Cómo proporcionar (¿a quien lo solicite?) una clave para usar el API. Cómo conformar dicha clave (creo que esto sería lo de menos, pero, nada está libre de posibles problemas). Cómo implementar esto en Loturak... un nuevo formulario... un nuevo apartado... utilizar una nueva tabla en la base de datos... va a ver que coger el toro por los cuernos. :)

Maldita sea... hoy estoy bicho, bicho, bicho. :D

mamcx 03-12-2006 22:10:39

Cita:

Empezado por seoane
¿Por que? Si bien eso es muy cierto para algoritmos de encritptacion que utilizan clave, no creo que sea aplicable a algoritmos de hash. Aunque corrígeme si me equivoco.

mmm... no tengo la razon especifica en este momento y fue algo que aprendi en un foro de Borland de uno de los 2 tipos que hacen herramientas de seguridad para Delphi... y como muchas cosas me gravo el "no es bueno hacer x" y se me borrar los 5 o 6 post donde se explica porque ;)

Algo tiene que ver con el proposito de un hash: Una funcion en un solo sentido que no sea reversable... y que la manera correcta que he leido es usar un "salt" para variar la cosa....

roman 03-12-2006 22:12:09

Creo que ya voy entendiendo seoane. Visto así parece bastante sólido. Me queda ahora la duda de entonces ¿para qué el https?

// Saludos

seoane 03-12-2006 22:29:12

Cita:

Empezado por roman
Creo que ya voy entendiendo seoane. Visto así parece bastante sólido. Me queda ahora la duda de entonces ¿para qué el https?

// Saludos

El https es necesario para que todo se comunique encriptado, si bien un método con el que comento nos "asegura" la autenticación, todos los demás datos se transmiten en claro. Volviendo al caso de messenger, cualquiera con un sniffer y el programa adecuado puede leer una conversación de messenger, dentro una red local se entiende, entonces ¿por que proteger tanto la contraseña?, porque mientras que te espíen una conversación puede ser grave, que suplanten tu identidad puede ser mucho peor.

En definitiva https es la mejor solución, la información viaja encriptada a través de la red, atravesando incluso los proxys. Aunque no se la dificultad que supondrá desde el lado del servidor implementar esto, desde el lado del cliente solo supone cambiar un par de parámetros.

dec 09-12-2006 19:20:49

Hola,

Nota del traductor: este Hilo no ha muerto, sólo está en hibernación, al cuidado de HAL, así que no hay problema. :D :D

seoane 09-12-2006 20:32:50

Cita:

Empezado por dec
Nota del traductor: este Hilo no ha muerto

Espero que no. Ya me parece que el hilo de Al sobre automatización web esta en cuidados intensivos :p , solo faltaba que se me muriera este también.

Por cierto, estaba trasteando con loturak y me devuelve el siguiente error:
Cita:

Empezado por loturak
Error: El API de Loturak funciona por el momento sólo en local. Disculpa las molestias, por favor

¿Esta situación es temporal? o va a tardar un tiempo en volver a estar disponible.

dec 09-12-2006 20:43:41

Hola,

Efectivamente... es una situación "temporal", pero si tiempo fijo... es una huida hacia adelante. Es la forma de no decir "hasta que el tema de las API-KEYs famosas no esté resuelto el API de Loturak no será sino una quimera, una ilusión, de qué me suena a mí esto.

Efectivamente, puedes hacer pruebas "en local", es decir, si instalas Loturak en tu sistema podrías utilizar el API sin ese inconveniente, al menos. Este parón respecto al tema del API vino por el "Cross Site Scripting" que ya recordarás Domingo.

Desde entonces paramos en seco hasta poderlo soluccionar... creemos, en principio, lo que nos llevó un par de días. A continuación hemos estado solucionando errores y "bugs" de los que no puedes creerte, porque pasaste por allí unas cuantas veces sin verlos...

También en estos días hemos hecho algunas cosas más que solucionar errores. Por ejemplo ayer nos metimos a personalizar el reproductor MP3 que usamos en Loturak... recordarás el tango... lo que hemos podido hacer porque el original es gratuito y de código abierto.

Qué más cosas... qué más cosas... sí. Hemos hecho algunos cambios internos en la clase Usuario, que nos han ahorrado al menos dos consultas a la base de datos (Román, si lees esto, ahora mismo se hacen 8 consultas para construir las páginas que listan enlaces en Loturak. Además varias de ellas son consultas "de un dato", es decir, no demasiado pesadas, no sé cómo lo verás, pero, como ves, seguimos preocupándonos de esto.).

También construimos una clase "Enlace", que nos sirve también a modo de "plantilla", de modo que cuando antes utilizábamos métodos que requerían pasar como parámetro los datos de un enlace, digo, donde antes usábamos "Arrays asociativos" hoy usamos una clase, una plantilla, para todos los métodos. Con esto, además de dejar el asunto más claro (sabe uno a qué referirse cuando tiene que entregar los datos de un enlace), hemos conseguido reutilizar en varios sitios un sólo método: por ejemplo para insertar enlaces, actualizarlos, se utilizan sendos métodos de la clase BDatos... sea desde donde sea que lo hagamos.

Pero,... no quiero aburrir a nadie... ¡y bastante he hablado ya como para aburrir a cien mil! Conste que el tema del API está suspendido, por el momento, pero, que no hemos estado parados ni el día de nuestro cumpleaños. :D :D :D

seoane 09-12-2006 21:04:00

:( Que pena, estaba empezando a dar forma a una idea para "aprovecharme" de loturak. Usar la descripción del enlace para almacenar contraseñas cifradas, el programa se encargaría de manejar la lista de contraseñas utilizando los procedimientos InsertarEnlace, ActualizarEnlace y EnlacesUsuario ...

Bueno, habrá que dejarlo por ahora. Por cierto, cual es el limite de enlaces y el tamaño máximo de la descripción. Porque podríamos hacer un "loturak Drive" al mas puro estilo "GMail Drive" ... :D Es broma, no te asustes.

dec 09-12-2006 21:09:57

Hola,

Cita:

Empezado por Seoane
Que pena, estaba empezando a dar forma a una idea para "aprovecharme" de loturak. Usar la descripción del enlace para almacenar contraseñas cifradas, el programa se encargaría de manejar la lista de contraseñas utilizando los procedimientos InsertarEnlace, ActualizarEnlace y EnlacesUsuario ...

Es curioso que digas algo así, porque, últimamente lleva tiempo rondándome la cabeza una aplicación Web que sería una especie de "Gestor de contraseñas", a modo de los que existen para el "escritorio" pero en Web. :D

Pero es algo que no ha pasado de ser una obsesión... o ni ha llegado todavía a eso. :)

Cita:

Empezado por Seoane
Bueno, habrá que dejarlo por ahora. Por cierto, cual es el limite de enlaces y el tamaño máximo de la descripción. Porque podríamos hacer un "loturak Drive" al mas puro estilo "GMail Drive" ... Es broma, no te asustes.

Uf, uf, uf... :D Na... te "banearía" el primer día. :eek: :D


La franja horaria es GMT +2. Ahora son las 18:08:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi