elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Doble factor de autenticación o verificación en dos pasos


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 203
1  Programación / Desarrollo Web / Re: [Aporte] Como usar MySQL en NodeJs (Codigo de ejemplo) en: 20 Mayo 2020, 07:46
Muchas gracias.
2  Programación / Desarrollo Web / Re: [Aporte] Como usar MySQL en NodeJs (Codigo de ejemplo) en: 19 Mayo 2020, 10:16
Es cierto, normalmente se usa mysql2, de hecho es lo que usan todos los orm como Sequelize.

Pero era a modo de ejemplo, para los que recién empiezan en node. Ademas yo me acostumbre a trabajar así en express, encerrando todo en promesas, que es la forma correcta para luego usar middlewares a diferentes niveles (auth, error, routing, etc)

Citar
await trabaja con promesas. Puedes usar la instrucción para envolver valores en promesas pero en tu código, await nunca espera a que la callback de mysql.query sea llamada. Si funciona con tus get porque si regresa promesas (que se resuelven de manera asincrona).

No entendi del todo, pero las callbacks que mysql.query los uso asi por lo que te comentaba antes, para poder manejarlos mejor a nivel de middleware.

Quizás omiti el pequeño (o fundamental ) detalle de que este código esta pensado exclusivamente para usarse con el framework express.
3  Programación / Desarrollo Web / Re: Qué estructura y API utilizo para almacenar conversaciones de IA en navegador? en: 19 Mayo 2020, 09:55
1. Existe alguna api como pastebin que funcione crossOrigen sin necesidad de token y que solo deje subir archivos sin editarlos ni borrarlos?

Con "subir archivos" supongo que te referis a guardar datos, y no archivos de forma literal. No creo que exista un servicio que te permita guardar de forma anonima, porque seria un hervidero para todo tipo de actividades ilicitas...

Por que seria un problema usar tokens? Yo lo que haria seria usar Firestore.... :silbar:


2. Como almaceno en localStorage este tipo de info? Json? XML? Todas las propiedades asociadas a una clave? Una clave por cada ocurrencia?

Depende que tanta info quieras almacenar, pero yo usaría una sola clave para poder controlar mejor el limite de los 5Mb de localstorage. Meteria todo dentro de un array en JSON y luego tirar de JSON.stringify() y JSON.parse() pero supongo que eso ya lo sabes, y no voy a entrar en detalles....

Otra solucion un poco mas sofisticada seria usar idb-wrapper, como wrapper para IndexedDB y asi el limite es virtualmente infinito

PD: Que osado eso de hacer IA desde cero, yo estuve intentando aprender TensorFlow y me exploto el cerebro, pero es porque soy autodidacta, no tengo formación universitaria y por ende tampoco conocimientos de matemática muy avanzados...solo los de secundaria (bachillerato)
4  Seguridad Informática / Seguridad / Re: Como saber la direccion ip de una persona por Gmail en: 19 Mayo 2020, 08:54
Que atras quedaron esos tiempos donde con msn, un archivo grande y netstat hacias daño, ahora es todo super complicado (por suerte para los no informaticos)

Yo por eso hace muchisimos años deje el "aprendizaje del hacking" y me centre solo en aprender a programar y ser un buen desarrollador.

Y lo loco es que termine aprendiendo muchisimo mas de webhacking tratando de evitar que me rompan MIS sistemas a cuando era un adolescente lammer tratando de solo 'aprender a hackear paginas web' sin tener la mínima idea de que era SQL, PHP o JS.
5  Seguridad Informática / Seguridad / Re: Dudas servicios exteriorizados y correos en: 19 Mayo 2020, 08:41
El tema es que la gran mayoría de empresas lo que hacen es usar gmail (u otro webmail) bajo su propio dominio, cada vez menos empresas usan sus propios servidores de correo y tercerizan todo. Y aunque consigas la IP, seguramente sea dinamica, asi que puede cambiar en cualquier momento.

En cuanto al tema del IP y los mails, Gmail no envía la IP del remitente, envia la del servidor de google, en cambio Outlook o Yahoo si envian la IP original.

6  Programación / Desarrollo Web / [Aporte] Como usar MySQL en NodeJs (Codigo de ejemplo) en: 15 Mayo 2020, 03:56
Hola, queria compartirles este Ejemplo basico de como implementar MySQL en Node. Usando Promesas y async/await para dominar la asincronia sin bloquear el Event Loop.

Archivo mysql.js contiene la conexión a MySQL.
Código
  1. const mysql = require("mysql");
  2.  
  3. const mysqlConnection = mysql.createConnection({
  4.  host: "localhost",
  5.  port: 3306,
  6.  user: "root",
  7.  password: "",
  8.  database: "",
  9. });
  10.  
  11. mysqlConnection.connect((err) => {
  12.  if (err) {
  13.    console.error("[DB] No se pudo conectar con MYSQL", err);
  14.  } else {
  15.    console.log("[DB] Conectado con MYSQL", mysqlConnection.threadId);
  16.  }
  17. });
  18.  
  19. module.exports = mysqlConnection;
  20.  

Archivo con la clase principal. Implementa las 5 funciones básicas de CRUD+L = Create/Crear, Read/Leer, Update/Modificar, Delete/Borrar, List/Listar

Código
  1. const MySQL = require("./mysql");
  2.  
  3. function list(table) {
  4.  return new Promise(async (resolve, reject) => {
  5.    const sql = `SELECT * FROM ${table}`;
  6.  
  7.    await MySQL.query(sql, (err, results) => {
  8.      if (err) {
  9.        console.error("[DB]", err);
  10.        return reject({ message: err, code: 401 });
  11.      }
  12.      return resolve(results);
  13.    });
  14.  });
  15. }
  16.  
  17. function get(table, id) {
  18.  return new Promise(async (resolve, reject) => {
  19.    const sql = `SELECT * FROM ${table} WHERE id=${id}`;
  20.  
  21.    await MySQL.query(sql, (err, results) => {
  22.      if (err) {
  23.        console.error("[DB]", err);
  24.        return reject({ message: err, code: 401 });
  25.      }
  26.      return resolve(results);
  27.    });
  28.  });
  29. }
  30.  
  31. function insert(table, data) {
  32.  return new Promise(async (resolve, reject) => {
  33.    try {
  34.      const fields = Object.keys(data);
  35.      const values = Object.values(data);
  36.  
  37.      if (fields.length === 0) {
  38.        return reject({ message: "Faltan datos", code: 400 });
  39.      }
  40.  
  41.      const sql = `INSERT INTO ${table} (${fields}) VALUES (${values.map(
  42.        (h) => `'${h}'`
  43.      )})`;
  44.  
  45.      await MySQL.query(sql, async (err, results) => {
  46.        if (err) return reject({ message: err.message, code: 400 });
  47.  
  48.        const insertedData = await get(table, results.insertId);
  49.  
  50.        return resolve(insertedData);
  51.      });
  52.    } catch (error) {
  53.      return reject(error);
  54.    }
  55.  });
  56. }
  57.  
  58. function update(table, id, data) {
  59.  return new Promise(async (resolve, reject) => {
  60.    try {
  61.      const fields = Object.keys(data);
  62.      const values = Object.values(data);
  63.  
  64.      if (fields.length === 0) {
  65.        return reject({ message: "Faltan datos", code: 400 });
  66.      }
  67.  
  68.      const sql = `UPDATE ${table} SET ? WHERE id=${id}`;
  69.  
  70.      const beforeUpdate = await get(table, id);
  71.  
  72.      await MySQL.query(sql, data, async (err, results) => {
  73.        if (err) return reject({ message: err.message, code: 400 });
  74.  
  75.        const updateData = await get(table, id);
  76.  
  77.        return resolve({ ...results, beforeUpdate, updateData });
  78.      });
  79.    } catch (error) {
  80.      return reject(error);
  81.    }
  82.  });
  83. }
  84.  
  85. function remove(table, id) {
  86.  return new Promise(async (resolve, reject) => {
  87.    try {
  88.      const beforeUpdate = await get(table, id);
  89.  
  90.      if (beforeUpdate.length === 0)
  91.        return reject({ message: `El elemento ${id} no existe`, code: 403 });
  92.  
  93.      const sql = `DELETE FROM ${table} WHERE id=${id} LIMIT 1`;
  94.  
  95.      await MySQL.query(sql, async (err, results) => {
  96.        if (err) return reject({ message: err.message, code: 400 });
  97.  
  98.        return resolve({ ...results, beforeUpdate });
  99.      });
  100.    } catch (error) {
  101.      return reject(error);
  102.    }
  103.  });
  104. }
  105.  
  106. module.exports = {
  107.  list,
  108.  get,
  109.  insert,
  110.  update,
  111.  remove,
  112. };
  113.  
  114.  

Esta clase no tiene ningún tipo de validación, eso se debería hacer en otra capa, como por ejemplo en el controlador con @hapi/joi.

Para usarse simplemente debe importarse este modulo desde otro e invocar a la función CRUDL, por ejemplo

Ejemplo de Uso
Código
  1. const db = require("./db.js"); // suponiendo que el archivo anterior se llame "db.js y
  2.                                           // ademas este ubicado en el mismo directorio que el presente codigo.
  3.  
  4. // Usar como funcion asincrona que debuelve un resultado o un error
  5. // Operacion CRUDL: Listar la tabla 'usuarios' completa
  6. // SIEMPRE dentro de una funcion async
  7.  
  8. async function getUsers(){
  9.    const myUsers = await db.get('usuarios')
  10.    return await db.get('usuarios')
  11.    // return await db.get('usuarios')
  12. }
  13.  
  14. console.log(getUsers())
  15.  
  16. // O usar como funciones que devuelven promesas, y gestionarla con then/cath:
  17. // Operacion CRUDL: (D) Borrar el registro de la tabla 'usuarios' cuyo id sea igual a '666'
  18.  
  19. db.remove('usuarios', 666)//Borrar usuario con id 666
  20. .then(users=>{
  21.    // Se borro el usuario, hacer algo
  22.    console.log(`Se borro el user 666`)
  23. })
  24. .catch(error=>{
  25.   console.log(error)
  26. })
  27.  

Por ultimo, como tambien hago frontend, una cosa muy util es poder deshacer cualquier accion con un solo click, por cuestiones de UX/UI es una forma muy poderosa de fidelizar al usuario.

Por eso en las consultas 'remove' y 'update' se devuelve un objeto beforeUpdate y updateData

Código
  1. "beforeUpdate": [
  2.            {
  3.                "id": 14,
  4.                "nombre": "Departamento de Coordinacion y Gestion Cooperativa",
  5.                "responsable": ""
  6.            }
  7.        ]
  8.  

Eso es muy util para revertir la ejecucion de la queri con un simple boton o 'call to action' como tiene gmail.


7  Foros Generales / Dudas Generales / Re: Es seguro la app para almacenar contraseñas en el móvil y la extensión en: 10 Mayo 2020, 19:34
Desde que la mismísima NSA fue hackeada por Shadow Brokers ningún sistema en el mundo esta a salvo  >:D

Pero de ahi a que te hackeen tu cuenta de fb o gmail....yo personalmente guardo mis contraseñas de redes y foros en el mismo chrome, sin extension y nunca tuve problemas, eso si, jamas en la vida guardaría info de mi home banking o de mi tarjeta de crédito....
8  Programación / PHP / Re: Subir Archivos con php Via SFTP en: 10 Mayo 2020, 18:38
En Windows yo uso WinSCP.

Si esta en linux con gnome podes conectarte directamente a un servidor SFTP desde el mismo nautilus. O sino podes instalar gFTP o Filezilla que tienen soporte para SFTP.
9  Programación / PHP / Re: Como puedo instalar una extensión Manualmente en: 10 Mayo 2020, 18:35
Hace años deje de usar PHP, me quede en la versión 5, nunca llegue a usar la 7....

Pero en mi experiencia, si tenes un sistema GNU/Linux es mejor instalar las librerias mediante el gestor de paquetes, sea apt si es una distro basada en Debian/Ubuntu o Yum si es una distro basada en RedHat (CentOS, Fedora).


Como instalar la extension SSH2 de PHP


Citar
En el siguiente ejemplo, remplace "X.Y" con tu version de PHP (por ejemplo, "5.4" o "7.1"). Para instalar una extensión PECL para multiples versiones de PHP, repita el proceso para cada version de PHP.

La extensión SSH2 proporciona funciones para acceder a máquinas remotas utilizando los protocolos seguros SSH y SFTP.

Esta extensión NO esta soportada por PHP 7.3

Instalar la extension SSH2 para PHP 7.0, 7.1, o 7.2
Nota: La extension SSH2 para PHP 7 esta en estado Alpha (en fase de pruebas, no recomendable para producción) .

Para instalar la extension en PHP 7.0, 7.1, o 7.2, ingrese a su servidor y ejecute los siguientes comandos (con sudo o como root):

Código:
sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install libssh2-1-dev
sudo pecl7.X-sp install ssh2-alpha

Una vez instalado, cree un archivo de configuración para la extensión y reinicie PHP.

Código:
sudo bash -c "echo extension=ssh2.so > /etc/php7.X-sp/conf.d/ssh2.ini"
sudo service php7.X-fpm-sp restart

Instalar SSH2 para PHP 5

Para instalar la extension en PHP 5.4, 5.5, o 5.6, ingrese a su servidor y ejecute los siguientes comandos (con sudo o como root):

Código:
sudo apt-get install gcc make autoconf libc-dev pkg-config
sudo apt-get install libssh2-1-dev
sudo pecl5.X-sp install ssh2

Una vez instalado, cree un archivo de configuración para la extensión y reinicie PHP.

Código:
sudo bash -c "echo extension=ssh2.so > /etc/php5.X-sp/conf.d/ssh2.ini"
sudo service php5.X-fpm-sp restart
Verifying the Installation

Puede verificar la instalacion de SSH2 con el siguiente comando:

Código:
phpX.Y-sp -i | grep ssh2

Si todo se instalo correctamente, deberia ver el siguiente mensaje en su terminal:

Código:
/etc/phpX.Y-sp/conf.d/ssh2.ini,
Registered PHP Streams => https, ftps, compress.zlib, compress.bzip2, php,
    file, glob, data, http, ftp, zip, phar, ssh2.shell, ssh2.exec,
    ssh2.tunnel, ssh2.scp, ssh2.sftp
ssh2
SSH2 support => enabled
libssh2 version => 1.4.3
banner => SSH-2.0-libssh2_1.4.3

Fuente: https://serverpilot.io/docs/how-to-install-the-php-ssh2-extension/
10  Foros Generales / Dudas Generales / Re: Rubber ducky en: 4 Mayo 2020, 01:04
Me temo que no. Tenes bien en claro lo que es un Rubber ducky?  :silbar:

Al tratarse de un dispositivo que ejecutara su propio código malicioso si o si tiene que tener un procesador o microcontrolador como el ATMEGA32U4.

Tambien podes montarlo con un Arduino ProMicro que es mucho mas barato que un RB Zero. Si buscas en ML Argentina andan entre $600 y $800

Te dejo un video que te explica todo y hasta te da los materiales y codigos necesarios para montarlo.



PD: Solo te pido que no seas lammer y lo uses con fines didácticos....
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 203
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines