Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - WHK

#431
Te estás ahogando en un vaso de agua. Si vas a hacer inserción manual de identificadores te meterás en un problema bastante complicado ya que para eso existen los bloqueos de tabla. En bases de datos con muchos registros comenzarán a duplicarse los identificadores porque mientras que calculas el valor para autoincrementar vendrá otra conexión en paralelo y hará el mismo calculo haciendo que ambos registros guarden el mismo valor provocando que el último no se pueda escribir.

Por eso mysql de manera nativa realiza un bloqueo de tablas para reservar su uso mientras realiza el calculo de autoincremento, a demás de eso cuenta con una pila interna de instrucciones para evitar que peticiones asyncronas obtengan un mismo identificador.

Primero lo primero, todos tus id de todas las tablas deben ser autoincrementables, luego debes tomar el valor máximo y dárselo como subquery, evita en lo posible utilizar variables y procedimientos almacenados.

Si es una base de datos nueva entonces eliminala y vuelvela a crear con las propiedades que corresponden.

Saludos.
#432
Todo va a depender la cantidad de valores que necesites, por ejemplo, si esto es una tarea eso quiere decir que debes unir las matemáticas. Por ejemplo, usas una variable para guardar el último valor creado, por defecto es cero, el nuevo valor es igual a ese valor guardado mas un numero random, luego el resultado lo guardas en la variable para generar el nuevo valor, esto asegurará que cada valor sea único.

Si necesitas algo práctico, necesitarás guardar todos los resultados y omitirlos de los resultados, pero es mas complicado, necesitarás forzadamente una base de datos ya sea en memoria, fs o sql.

Si necesitas hacer una app que genere identificadores únicos entonces debes utilizar un estandar que ya fue diseñado para ello y es el UUID, .Net lo soporta nativamente:

https://docs.microsoft.com/en-us/dotnet/api/system.guid.newguid?redirectedfrom=MSDN&view=netframework-4.8#System_Guid_NewGuid

Saludos.
#433
Ok...

id | int(50) | NO | PRI | NULL | auto_increment

Tu columna id dice que si es numérico y autoincrementable pero también dice que puede ser nulo y eso está mal, porque si no lo defines al insertar un valor entonces queda nulo en ves de crear el valor numérico autoincrementado.

Debes modificarlo e indicarle que no puede ser nulo:

ALTER TABLE nombredelatabla MODIFY id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

Ojo, cuando lo hags te dará un error si tienes registros nulos, para aplicar ese cambio debes asignar un valor a cada registro nulo.

Otro cuidado es el valor de inicio del autoincrementable, probablemente la base de datos no ha utilizado la función de autoincremento por lo cual el primer valor a asignar al crear un registro sea el 1 y luego el 2 y así, pero si ya tienes esos valores utilizados entonces tendrás un problema.

Para solucionar esto debes modificar el valor del autoincrementable para que comience a partir del siguiente valor mas grande que tengas:

ALTER TABLE nombredelatabla AUTO_INCREMENT = 100;

Donde 100 es el valor que comenzará a utilizar.

Si quieres saber tu valor máximo actual puedes utilizar:

SELECT MAX(id) FROM nombredelatabla;

A eso le sumas uno y ya.

Para saber si tienes registros nulos:

SELECT * FROM nombredelatabla WHERE id IS NULL LIMIT 100;

Saludos.
#434
Creo que tu tabla tiene problemas de definición, ejecuta un DESCRIBE nombrdelatabla; y peganos el resultado para ver porque no está incrementando los valores de manera automática.
#435
Pues no hay uno ni tres, hay muchos: https://nvd.nist.gov/vuln/categories/cwe-layout , comienza con el cwe-19, pero de todas maneras, para no hacer esto tan extenso, solo limita a utilizar las funciones de php como corresponden y ya. PHP fue construido con todas sus funciones preparadas para evitar ciertos tipos de vulnerabilidades al desarrollar, puedes darle un vistazo a esto:

https://php.net/manual/es/security.php

Saludos.
#436
Dudas Generales / Re: Seguridad
24 Julio 2019, 07:23 AM
Es el actualizador de Java para Windows.

Saludos.
#437
Seguridad / Re: Generar certificado ssl
24 Julio 2019, 07:16 AM
Hola, que sistema operativo / distribución usas?, si vas a comprar un certificado ssl entonces si necesitarás generarlo de manera manual como lo estás haciendo, debes verificar los permisos de usuario del archivo, recuerda que estás utilizando sudo, por lo cual los archivos son generados con permisos de root y talves tu app la estás ejecutando sin ser root. Intenta cambiar los permisos de los archivos con el comando:

# chown usuario:usuario archivo

Si estás usando CentOS, puedes utilizar certbot para generar certificados gratuitos de manera automatizada:

# certbot certonly --nginx -d  eloy.mooo.com -d  www.eloy.mooo.com

Esto generará los certificados en /etc/letsencrypt/live/eloy.mooo.com/ , luego debes decirle al nginx que utilizarás esos certificados añadiendo las rutas en los host virtuales.

Saludos.
#438
Pues, cada función te protege de cada vulnerabilidad por separado, si juntas filtros en lugares donde no deben ir podrías causar vulnerabilidades.

Para evitar la inyección sql debes utilizar mysql_real_escape_string() en cada parametro que vayas a escribir en tu consulta sql, estos valores siempre deben ir encerrados en comillas dobles.

Saludos.
#439
Depende a que te refieras con "limpiar", debes ser mas especifico, cada función de php se utiliza en casos muy particulares, por ejemplo, cada ves que necesites hacer una consulta a la base de datos debes utilizar mysql_real_escape_string() , cuando vas a expulsar contenido html en el sitio web debes utilizar htmlspecialchars(), cuando uses contenido de tipo json o javascript a traves de las cabeceras http no debes utilizar escapes, debes utilizar arrays multidimensionales y transformarlos a objetos json o javascript, para eso existe la función json_encode().

Saludos.
#440
Hola, eso sucede porque en python los bytes unicode no se tratan de la misma manera que un string, los strings deben tener una codificación de caracteres definida que por lo general debe ser utf8 y no todos los caracteres de utf8 son compatibles o visibles.

Lo que debes hacer es tratar la cadena de texto como un array de bytes, por ejemplo:

b'contenido acá'

Eso es un arreglo de bytes y no un string, por lo cual ya no te dará problemas en la codificación de caracteres, luego si lo quieres mostrar en pantalla debes utilizar la función decode() junto a la codificación de caracteres que quieres utilizar.

Probablemente el valor unicode de tu check no corresponde al valor visible en utf8 o talves tu consola de comandos no está funcionando en utf8, generalmente estos errores suceden en windows, en linux jamás tendrás este tipo de problemas ya que el bash carga por defecto utf8, en cambio windows carga por defecto latin iso.

Si usas windows debes intentar modificar tu consola de comandos para que funcione bajo utf8 o escribir el valor unicode del check pero en latin iso.

Según https://graphemica.com/%E2%9C%93 ese caracter con ese mismo valor en bytes es un check pero en utf8 solamente, en latin iso tiene otro valor (lo mismo sucede con la eñe).

Saludos.