Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Web con gambas, a ver si entre todos lo logramos
#21

Hola, omoreno

Varias consideraciones:

El algoritmo SHA-256 se considera bastante seguro por el momento. Si bien es cierto que ya existen diccionarios inmensos de claves asociadas al hash, sería muy muy difícil acertar en poco tiempo con una de estas claves. Piensa que el algoritmo genera siempre un hash de longitud fija de 64 caracteres (bits) independientemente de la longitud de la cadena encriptada.

En algunos casos, los programadores añaden lo que se llama "salt" a la cadena encriptada, es decir un "condimento" añadido a tu gusto que puede ser cualquier cosa. La ventaja de saber que la cadena encriptada siempre tiene 64 bit de longitud, es que podemos añadir la "salt" en cualquier parte de esa cadena, pero esa "salt" podría o no ser fija, es decir, puede ser una cadena aleatoria generada por nosotros y fijada en el código o prodría ser una cadena generada mediante otro algoritmo, pero basada en algo fijo, como por ejemplo un dato del usuario que no cambie.

De ese modo obtendríamos otra cadena que consiste en el hash original SHA-256 con una cadena en medio, en una posición conocida, que mediante tu propia función vas a generar y luego vas a comparar de forma sencilla.

La cadena encriptada se envía tal cual por internet hacia la base de datos, pero lógicamente siempre es mejor usar una conexión segura SSL.

En resumen, en la parte del cliente (navegador) se genera el hash SHA-256 y se envía al servidor. Allí, el servidor antes de almacenarla en la BD la primera vez, la mezcla con la Salt y entonces la guarda en la BD.

En posteriores consultas, cuando el usuario hace login, se envía el hash de su password y mediante una función ya en el servidor, se vuelve a crear esa cadena cocinada con "salt" y ahí es cuando ya se compara con la que está almacenada en la base de datos.

De esta manera, aunque transmitas en claro el hash desde tu navegador hacia el servidor, y alguien en medio intercepte esa clave encriptada, no podrá usarla para nada, porque realmente es otra cosa lo que hay en la BD.

Dicho eso, hoy en día ya no hace falta pagar por un certificado SSL, porque desde que existe Let's Encrypt yo no he vuelto a hacerlo. Pero eso ya depende del nivel de seguridad exigido para cada caso. De manera que siempre sería necesario o recomendable usar conexiones cifradas en la web.

P.D. Se me olvidó añadir que en caso de pérdida de contraseña por el usuario, siempre hay que generar una nueva, por que el algoritmo SHA-256 es unidireccional. Además por seguridad, se debería exigir que la nueva contraseña no coincida con la anterior, puesto que ésta está almacenada en la BD y se podría comparar antes de almacenar la nueva (cosa que no tiene sentido si el usuario ha olvidado la contraseña, pero eso sí sería aplicable si el usuario sólo desea cambiarla).

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
[-] Los siguientes 1 usuarios dice gracias a jguardon por este post:
  • Shordi
    ¡Gracias!
#22

Hola, jguardon.

Gracias por la información.

Lo que comentas se puede hacer con Crypt.Check (gb.crypt)

Si la frase la genero aleatoria por cada usuario y esta no la tiene el navegador antes del login, me pregunto:

¿Cómo genero desde el navegador del cliente el  hash original SHA-256?

GAMBAS
  1. clavec =  crypt.SHA256(txoPassword.Text, "?????????????")


Saludos
    ¡Gracias!
#23

(27-11-2021, 16:13)omoreno escribió:  ¿Cómo genero desde el navegador del cliente el  hash original SHA-256?

En el lado del cliente siempre has de usar javascript, no hay otro modo. Aunque la página servida se haya generado en gambas, lo que llega al navegador del cliente es solamente HTML, JavaScript y CCS (hojas de estilos). Puedes escribir JavaScript en un fichero de gambas y retornarlo convenientemente como salida de tu script donde corresponda. Entiendo que tienes conocimientos de programación Web con HTML, JS y CSS y sabes cómo se estructura una página web para que no haya errores en el navegador.

Pero JavaScript está muy bien implementado en todos los navegadores modernos y, aunque es bastante complicado usar funciones que implementen SHA-2 cuando usamos una conexión segura (básicamente porque todo lo que transmitimos hacia el servidor ya está encriptado por la conexión SSL y JS considera que ya no es necesario volver a encriptar), es conveniente hacerlo por si no es nuestro caso y en algún momento solo usamos http en lugar de https.

Te dejo un enlace que he encontrado, que por cierto parece traducido automáticamente y suena raro al leerlo, pero mi opinión es que uses librerías externas si no quieres complicarte con JavaScript puro.

https://www.it-swarm-es.com/es/hash/hay-...040422498/

Aquí te dejo una búsqueda hecha en github con varias implementaciones.

https://github.com/search?q=js+sha-256

Cualquier duda, pregunta de nuevo.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
    ¡Gracias!
#24
Thumbs Up 

Hola Jguardon, Tincho.
Gracias por los datos y los link.
 
Logre modificar los Script para enviar un hash salado, pero después de verificar tus sugerencias y las de otros en la internet, por ahora me quedo con sus recomendaciones:
 
  • El uso obligado de https en vez de http.
  • Aplicar Hash con Salt a la contraseña en la base de datos en caso de que un usuario no autorizado “pueda lograr mirarla”.
  • Del lado del servidor, funciona bastante bien Crypt.Sha256(password, "….") ya sea por comparación de Hash o con la function Check, pero si esta no gusta mucho, entonces cada quien puede crear un generador externo de hash+salt (Desarrolle un ejecutable con Sha256 lo importe al proyecto, gambas lo ejecuto para la comparación y funciono bien).
 
Tincho recomendastes ver el ejemplo WebDemo de Olivier CRUILLES, lo descargue de la granja, pero me sale que en mi IDE no esta el componente: WebTree.
 
Compare las librerías del componente gb.web.gui con el sitio de Gambas y vi que me faltan dos:
WebTree y Key, luego pulse el botón recargar de la ventana componentes y aparecieron, pero aun me sale error relacionado a WebTree.
 
¿Cómo se debe hacer para actualizar las librerías de los componentes en el IDE?
 
Nota:
Todavía veo que cuando se abre el WebForm en varios Tab del navegador algunos objetos pierden su normal funcionamiento, basado en eso cambie la creación de WebForm para que una instancia de cada formulario sea creada en el evento _new con este cambio no se apilan los formularios, pero los botones de radio aun siguen funcionando mal… creo que la cuestión podría estar en la forma como Gambas crea las instancias nuevas del WebForm cuando se abre en otro Tab….
 
Seguimos probando.
    ¡Gracias!
#25

(02-12-2021, 23:45)omoreno escribió:  Tincho recomendastes ver el ejemplo WebDemo de Olivier CRUILLES, lo descargue de la granja, pero me sale que en mi IDE no esta el componente: WebTree.

Ok, si en efecto sucede eso porque el ejemplo solo funciona con la versión en desarrollo. Para que funcione hay 3 opciones:
  1. Instalar gambas desde PPA Daily en vez de estable
  2. Compilar desde las fuentes
  3. Usar el ejemplo que adjunto que no tiene el control WebTree
1 Saludo.


Archivos adjuntos
.gz WebDemo-0.2.1.tar.gz Tamaño: 562.28 KB  Descargas: 2

1 Saludo.
[-] Los siguientes 1 usuarios dice gracias a tincho por este post:
  • Grandamakulo
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por vuott
21-10-2020, 19:30
Último mensaje por gambafeliz
19-10-2020, 14:15

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)