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


 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ... 435
161  Programación / Desarrollo Web / Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas. en: 3 Noviembre 2019, 05:32
Citar
¿Como podría entonces hacer de dicha session un array?

Aver, creo que debes estudiar un poco más de php.

$_SESSION ya es un array y puedes escribir todas las llaves y valores que quieras de manera implícita:

Código
  1. $_SESSION['abc'] = 'def';

O de manera explícita:

Código
  1. $_SESSION = array('abc' => 'def');

Entonces, dentro de tu array de sesion multidimensional puedes poner todo lo que desees incluyendo un valor de tiempo que puedes ponerlo donde tu quieras y luego haces la comparación y haces un session_destroy(). Por ejemplo:

Código
  1.  
  2. if(!isset($_SESSION['data']))
  3. {
  4.    // Inicia la sesión
  5.    $_SESSION = array(
  6.        'data' => array(
  7.            'usuario' => array(
  8.                'id'     => 1,
  9.                'nombre' => 'Demo'
  10.            ),
  11.            'permisos' => array(
  12.            )
  13.        ),
  14.        'time' => time()
  15.    );
  16. }
  17.  
  18. if((time() - $_SESSION['time']) > 7200)
  19. {
  20.    // Sesión expirada
  21.  
  22.    // Elimina la sesión
  23.  
  24.    // Redirecciona al mismo script para renovar la sesión
  25.    header('Location: /index.php');
  26.  
  27.    // Finaliza el script (previene el escape de información)
  28.    exit;
  29. }
162  Programación / Desarrollo Web / Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas. en: 3 Noviembre 2019, 01:57
El time va dentro del a session, puedes agregarle todas las variables que quieras, la sesion es simplemente un array llegar y llenar.

https://www.php.net/manual/es/book.session.php#90351
163  Foros Generales / Noticias / Re: EEUU anuncia que dejará de usar drones fabricados en China en: 2 Noviembre 2019, 18:00
Talves descubrieron algo que no pueden decir a público.
164  Foros Generales / Dudas Generales / Re: ¿Dónde alojar Imágenes? en: 2 Noviembre 2019, 17:58
Yo también uso https://es.imgbb.com/ , antes usaba flickr pero da problemas al postear imagenes antiguas.

Saludos.
165  Programación / Bases de Datos / Re: Ayuda bbdd en: 2 Noviembre 2019, 17:43
Hola, te sugiero lo siguiente (esto está en postgres 10):

Código
  1. CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- as postgres user
  2.  
  3. CREATE TABLE teachers (
  4.    id bigserial NOT NULL PRIMARY KEY,
  5.    identifier uuid NOT NULL DEFAULT uuid_generate_v4(),
  6.    name CHARACTER VARYING(32) NOT NULL,
  7.    last_name CHARACTER VARYING(32) NOT NULL,
  8.    attention TIME NOT NULL
  9. );
  10.  
  11. CREATE TABLE courses(
  12.    id bigserial NOT NULL PRIMARY KEY,
  13.    identifier uuid NOT NULL DEFAULT uuid_generate_v4(),
  14.    name CHARACTER VARYING(32) NOT NULL,
  15.    duration TIME NOT NULL,
  16.    teacher_id BIGINT NOT NULL REFERENCES public.teachers(id) ON DELETE CASCADE ON UPDATE CASCADE
  17. );

Primero, no necesitas indicar el id del curso en la tabla del profesor, si llevas esto a la práctica no podrás crear la tabla profesores porque la tabla de cursos aun no existe y de todas maneras tampoco podrías ingresar un registro de profesor porque no existe el registro de curso y al reves, no puedes crear un curso porque no existe el profesor.

Segundo, debes declarar tus columnas si podrán estar nulos o no, esto es importante para mantener la integridad de la tabla.

Tercero, he agregado un identificador uuid para evitar exponer los id del lado del usuario y enumerar items, esto se considera una vulnerabilidad.

Cuarto, he utilizado bigint como id primario para aumentar la cantidad de registros soportados, esto añade escalabilidad a tu proyecto.

Quinto, he traducido las columnas y tablas al inglés, esto es una buena práctica, que tu sitio funcione con textos en español no quiere decir que el código deba estar en español, esto también ayuda en la escalabilidad del proyecto cuando necesites contratar a mas desarrolladores fuera de tu pais cuando el proyecto crezca.

Notas: Si te fijas, he mantenido el id separado del identificador, una opción hubiera sido utilizar únicamente el uuid como llave primaria pero esto aumentaría el coste de carga de la base de datos, por eso debes usar el id de manera interna para tus joins y el identificador para manipular desde tu front-end. La opción de cascada al eliminar se la puse para mantener la integridad de los datos, así si borran el profesor sus cursos también se eliminan ya que hemos declarado ese campo como no nulo, si quieres que el curso se mantenga entonces el campo debe ser nullable y la cascada debiera ejecutar un set null:

Código
  1. teacher_id BIGINT NULL REFERENCES public.teachers(id) ON DELETE SET NULL ON UPDATE CASCADE

Si te fijas, esta es una tabla de 1 a muchos, normalmente la tabla de 1 a 1 no debiera existir o no se debiera enseñar, pero en la práctica si es posible hacer esto aunque es un concepto complejo y útil en casos muy específicos, en tu caso no aplica, pero:

Una tabla de 1 a 1 quiere decir que un profesor sólo puede tener un curso y un curso sólo puede tener un profesor, esto en la práctica es imposible pero se puede solucionar de dos maneras: usando una tabla intermedia con dos llaves que les sean imposibles repetir o estableciendo el id del profesor de la tabla cursos como valor único.

Veamos:

Código
  1. teacher_id BIGINT NOT NULL REFERENCES public.teachers(id) UNIQUE ON DELETE CASCADE ON UPDATE CASCADE

De esta manera un profesor no podrá tener más de un curso y un curso no podrá tener más de un profesor, aunque esto es ridículo, pero esto sería de 1 a 1.

Será que tu profesor te ha querido gastar una broma?

Saludos.
166  Programación / Scripting / Re: Ejecutar comando cuando se habla por un micrófono. Batch en: 1 Noviembre 2019, 03:35
Eso lo puedes hacer con arduino y un micrófono, de esa manera detectas cuando haya señal de entrada por el micrófono y mandas una pulsación por usb y luego en tu pc asignas esa tecla a la funcionalidad que tu quieras.

https://arduino.stackexchange.com/questions/22040/how-to-send-data-from-an-arduino-to-pc-without-using-the-serial-monitor

Sino lo puedes hacer en python, el interprete de windows es muy limitado, pero desde python puedes importar el módulo para capturar la entrada de audio por microfono y detectar niveles y ejecutar cosas cuando estos niveles sobrepasen cierta frecuencia o ganancia.

https://realpython.com/playing-and-recording-sound-python/

Saludos.
167  Programación / Desarrollo Web / Re: [Pregunta]: ¿Como inyectar código SQL? en: 1 Noviembre 2019, 02:25
Pues para entender como inyectar cosas necesitas aprender primero sobre como usar las jeringas y su contenido, no todo se inyecta de la misma manera, en el mismo lugar o con el mismo contenido. Primero debes entender sobre consultas SQL y después podrás entender como hacer inyecciones de contenido SQL.

Por ejemplo:

Código:
SELECT
    P.id_post,
    P.id_user,
    U.id_user,
    U.avatar
FROM
    posts P
INNER JOIN users U ON P.id_user = U.id_user
WHERE
    P.title LIKE "%'.($search).'%"
ORDER BY
    P.id_post DESC

Una posible inyección sería:

Código:
qqqq" UNION SELECT * FROM (SELECT 1 AS id_post, 2 AS id_user, 3 AS id_user, @@version AS avatar) P WHERE 1 LIKE "1

De esta manera con qqqq invalidas el resultado arrojando cero items para que no haya problemas con la obtención de filas del union select, luego el union select con la cantidad de columnas exactas, el avatar será el texto de escapado de información, un subselect para representar P como tabla debido al order by y el primer resultado con el mismo nombre de la columna a ordenar y para finalizar una condicional cualquiera para unir las comillas de cierre usando like para prevenir errores con el "%".

Queda masomenos así:

Código:
SELECT
    P.id_post,
    P.id_user,
    U.id_user,
    U.avatar
FROM
    posts P
INNER JOIN users U ON P.id_user = U.id_user
WHERE
    P.title LIKE "%qqqq"
UNION
SELECT
    *
FROM (
    SELECT
        1 AS id_post,
        2 AS id_user,
        3 AS id_user,
        @@version AS avatar
) P
WHERE 1 LIKE "1%"
ORDER BY
    P.id_post DESC

De esta manera puedes crear la inyección sql sin que se produzca un error de sintaxis ni tampoco tener la necesidad de hacer una detención de consulta con comentarios de tipo "--" debido a que esto a veces falla si la consulta SQL utiliza múltiples líneas. Además representé cada valor con su columna correspondiente debido a que en algunas aplicaciones WEB los resultados se obtienen con el número de la columna obtenida como resultado de la consulta SQL pero en otros casos utilizan asociación y si no existe un resultado en su columna correspondiente te puede dar problemas, no siempre resultan las uniones de la manera tradicional, por eso es que prefiero ser estricto con las inyecciones.

Todo dependerá que quieras hacer o que quieras lograr, el servidor de bases de datos atenderá tus consultas, lo que quieras hacer con el es otro tema.

Dale un vistazo por acá:

https://foro.elhacker.net/tutoriales_documentacion/tutorial_de_inyeccion_sql_sql_injection-t98448.0.html
https://foro.elhacker.net/hacking_linuxunix/tutorial_de_inyeccion_sql_para_principiantes-t414525.0.html
https://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_31510-t244090.0.html
https://www.php.net/manual/es/mysqli-result.fetch-assoc.php

Saludos.
168  Programación / Java / Re: anotaciones en persistencia de objetos con jpa y hibernate en: 25 Octubre 2019, 19:06
Asi es, internamente las clases usan templates, esos templates definen anotaciones, algo asi como parámetros opcionales que se inyectan a un objeto, eso es propio de Java, especialmente en Spring Boot, es un tema independiente a JPA. Yo los uso para crear anotaciones personalizadas para el control de accesos a ciertos controladores, por ejemplo un @authenticatedRequired sobre la clase del controlador, de esa manera el control de sesiones se puede abarcar de manera transversal para todas las llamadas desde un solo punto e interrumpir cada función o constructor.

https://www.baeldung.com/java-custom-annotation

Saludos.
169  Programación / Java / Re: Recomendacion de persistencia de objetos en JPA en: 24 Octubre 2019, 23:02
Sitio web oficial de spring y a SpringGurú xD

https://www.youtube.com/channel/UCrXb8NaMPQCQkT8yMP_hSkw

Saludos.
170  Programación / Java / Re: anotaciones en persistencia de objetos con jpa y hibernate en: 24 Octubre 2019, 22:57
Pues Spring JPA e hibernate lo que hace es crear una capa de datos inferior a tu proyecto encargado de comunicarse con tu db final, una de las grandes ventajas es que jamas haces consultas sql sino que utilizas anotaciones de sql estandar y manipulas objetos a modo de DTO, esto permite que puedas cambiar de driver facilmente sin tener que hacer cambios en tu aplicación, por ejemplo, puedes migrar de mysql a oracle, postgre, sql server, etc. A demás de esto crea un almacen en memoria para optimizar la carga de las consultas SQL entre muchas otras ventajas.

Las anotaciones ManyToOne indican la relación que tendrán dos tablas de muchos a uno, eso quiere decir que se creará una columna adicional con el id de la fila, por eso se declara en @JoinColumn.

Es posible crear joins manualmente pero debes utilizar una sintaxis especial que es única de spring: https://www.baeldung.com/spring-data-jpa-query , donde haces consultas a objetos de tu proyecto en ves de tablas y columnas.

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference

El que sabe mucho mas que yo de este tema es Octalh, lo podrás encontrar en el grupo de telegram de elhacker.net

Saludos.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ... 435
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines