Páginas (4):    1 2 3 4   
jguardon   27-11-2021, 12:21
#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, porque 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'
omoreno   27-11-2021, 16:13
#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?

Código:
clavec =  crypt.SHA256(txoPassword.Text, "?????????????")
Saludos
jguardon   27-11-2021, 21:05
#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'
omoreno   02-12-2021, 23:45
#24
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.
tincho   03-12-2021, 13:00
#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: 5)

1 Saludo.
tincho   09-06-2022, 09:54
#26
Retome el proyecto web.
En el primer post pongo el enlace al proyecto en gitlab.
Mi idea es crear un programa base que tenga todo para luego con eso hacer cualquier web de empresa en la que se manejen datos. como todos aquí sabemos un poco del asunto seguramente logremos algo funcional. Bien, aca una pregunta:
  • ¿Por que los controles no se expanden? [Resuelto] Para ello hay que dar las propiedades H y W en %
[Imagen: T1lL5kP.png]
  • ¿Alguien hizo un CSS para las web de gambas y no le importaría compartirlo?
  • ¿Como se puede usar el elemento canvas de javascript con gambas webforms?
Última modificación: 10-06-2022, 09:49 por tincho.

1 Saludo.
omoreno   10-06-2022, 19:15
#27
(09-06-2022, 09:54)tincho escribió: ¿Como se puede usar el elemento canvas de javascript con gambas webforms?

Si desde javascript requieres un elemento tipo canvas puedes usar un WebContainer de Gambas: Crear QR con javascript

Preguntas: 
  • ¿Intentaras desarrollar una Web de Gambas en la que llamaras a los WebForm?
  • Si la primera pregunta es afirmativa, ¿como muestras el webform: en su propia ventana o incrustado en un objeto Web.?
  • ¿Desarrollaras cada plataforma por separado?, por ahora solo estoy practicado con WebForm.
[Imagen: 6krSgzg.gif]
tincho   11-06-2022, 10:28
#28
(10-06-2022, 19:15)omoreno escribió: Si desde javascript requieres un elemento tipo canvas puedes usar un WebContainer de Gambas: Crear QR con javascript

Muchas gracias, ese tema me vendrá bien, ademas hay un resumen de Hebert de lo que hay que hacer para desplegar la aplicación.

(10-06-2022, 19:15)omoreno escribió:
  • ¿Intentaras desarrollar una Web de Gambas en la que llamaras a los WebForm?

Si, intento hace algo como lo que muestras en el GIF que adjuntaste, que por cierto, tiene un aspecto muy profesional, te felicito.

(10-06-2022, 19:15)omoreno escribió: ¿como muestras el webform: en su propia ventana o incrustado en un objeto Web.?

De momento estoy mostrándolo sin incrustarlo.
[Imagen: PrBFmIS.png]

(10-06-2022, 19:15)omoreno escribió: ¿Desarrollaras cada plataforma por separado?
¿Te refieres a cada formulario? ¿Una plataforma es un formulario WebForm?
Si es eso intento hacer todo en un solo formulario en el que uso paneles WebContainer para poner cada parte visual del programa.
Por ejemplo:
Código:
Public Sub WebForm_Open()
'...
  WebContainer1.Visible = True
  WebContainer2.Visible = False
  WebContainer3.Visible = False
'...
  • En WebContainer1 pongo el Login
  • En WebContainer2 pongo el treeview y la tabla de datos y los botones de edicion
Entonces cuando el login es efectuado correctamente hago invisible WebContainer1 y hago visible WebContainer2
Pero estoy aprendiendo a usar estos controles, asi que de momento no se si este camino es el mas práctico o por el contrario conviene incrustar los formularios dentro de los webcontainer y crear varios formularios para cada tarea.
Última modificación: 11-06-2022, 10:43 por tincho.

1 Saludo.
tincho   11-06-2022, 12:36
#29
Agregue una lista de tareas (en la primera entrada) a realizar para desplegar una aplicación web gambas en un servidor apache adaptando un poco lo que propuso originalmente Heberth en otro hilo.
https://gambas-es.org/showthread.php?tid...16#pid2516

1 Saludo.
tincho   11-06-2022, 21:50
#30
¿Alguien tiene un ejemplo de como rellenar los datos de un WebTable? estos saldrian de un result de una base de datos.
Última modificación: 11-06-2022, 21:50 por tincho.

1 Saludo.
Páginas (4):    1 2 3 4   
  
Usuarios navegando en este tema: 8 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.