Seguridad

Generar Token de Seguridad Php Mysql

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Los token nos sirve para agregar un nivel mas de seguridad a nuestras aplicaciones web que se pueden llegar a utilizar en varios procesos donde el usuario interactúa.

pero para ser mas prácticos brindare un ejemplo y es de la típica sección de olvide mi contraseña que tiene cualquier sistema de ecommerce, blog, intranet, etc.

olvidecontrasena

el proceso de esta sección ya es muy conocida ingresamos nuestro correo y nos debería llegar un correo que puede ser que nos envié una contraseña aleatoria que es de mal gusto por cualquiera podría ingresar tu correo y ya te cambiaron la contraseña por eso un proceso idóneo es que te llegue un link desde donde podrías cambiar la contraseña y en ese proceso nos enfocaremos.

¿por que deberíamos usar entonces un token?

Pero para entender bien el motivo de utilizar entendamos el problema y es muchas web hacen la sección enviando URL parecidas a esta:

www.dominio.com/olvido-password.php?email=pepito@dominio.com

 

y te manda a la pagina para colocar una nueva contraseña y claramente así cualquiera que vea la URL y  sepa algo de informática se dará cuenta que la web tiene un tremendo agujero de seguridad.

Screenshot_1

¿que podemos hacer?

realmente si nos podemos a pensar un poco mas esto no debería ser un drama ya que con un simple token podemos zafar de este bug de seguridad.
entonces es simple esto ya que al momento de enviar el correo con el aviso al usuario creas una variable aleatoria que puede estar encriptado en md5, base64, etc.

www.dominio.com/olvido-password.php?email=NDUzNTM0NTM0NTM0NTM0NTM0NTc2NDY=

al tener el token lo guardas en un campo de la base de datos por ejemplo en la tabla usuarios en un campo token y enviamos por correo al usuario un link con el token,  cuando abra el usuario el link validamos de que si el token que enviado por GET existe o no.

Estas pequeñas cosas pueden mejorar la seguridad de tus aplicaciones espero que te ayude y si tienes dudas me puedes escribir.

 

 

 

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
Read more

[Informativo] Como hacer inyecciones SQL?

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Si eres un programador es algo tan basico como saber jugar resident evil que sepas sobre la seguridad web por que pueda que seas capas de construir sistemas grandes y robustas pero si no cuidas el lado de la seguridad vamos mal ya que descuidamos la informacion que tenemos dentro.

 

Es como construir una casa pero te olvidas de colocar a la puerta la cerraduro

200
Bueno si entraste a este articulo al ver el titulo pensaras que te enseñare hacer inyecciones sql y es cierto lo voy hacer pero del lado mas informativo para que puedas tener el criterio correcto para optimizar la seguridad. Queda claro para entender todo lo que expondre en las siguientes lineas debes saber el lenguaje SQL (Structured Query Language).

Entiende que…

Ok seguro que muchas veces escuchaste que las entradas (input) de tus formularios deben estar saniadas que es como un primer filtro (front end) y como segundo filtro seria al lado del servidor al momento de capturar los envios que pueden ser GET O POST.

Por que tanto filtro?

Seguro que tu profesor te lo dijo y ni le paraste bola (no le hiciste caso) y es que un formulario usualmente es para guardarlo a la base de datos o hacer alguna consulta y esta parte es la clave de la inyeccion ya que es el momento donde se aplica. Ahora espero que entiendas por que tanto tu profesor te lo dijo y si no lo hizo ya lo sabes.

Mucho contexto quiero saber como hacer una inyeccion SQL!!!

ok creo que sabiendo esto te sera mas facil saber como te pueden hacer una inyeccion pero debemos pensar como atacante para tener claro como cubrirnos.

Como hacer inyecciones… [informativo]

como es tu consulta en tu aplicacionn para hacer un login? algo similar a esto cierto?

SELECT * FROM usuarios WHERE usuario='$usuario' AND contrasena='$contrasena'

si, algo simple y claro los valores $usuario y $contrasena son variables que previamente capturamos de lo que envio el formulario ingresado por nuestro usuario luchito el bueno. pero si nos visita alguna vez nos visita luchito el malo y quiere hacer alguna travesura? pero que travesura puede hacer?

que pasaria si luchito el malo ingresa una contraseña en blanco (da igual si ingresa algo aqui) y como nombre de usuario:

‘ OR 1=1 —

que crees que pasaria? simple salto las condiciones y tiene acceso inmediato pero no vas que te lo diga y no es suficiente que me creas asi que te explico. el por que sucederia eso.

examinamos lo que ingreso como usuario luchito y quedaria asi:

sql_1

la idea de luchito es primero cerrar con ‘ la primera condicion y crea una condicion donde no hay pierde por que hace una comparacion de 1=1 ya para cerrar con todo coloca — que sirve para comenzar asi que todo lo que va depues se asumira como comentario y no sirve para la consulta y si es asi como quedo?

SELECT * FROM usuarios WHERE usuario='' OR 1=1

mas claro ahora de lo que sucedio? y esto tiene muchas variantes que llegan hacer lo mismo asi que cuando armes un login ten en cuenta que se puede entrar de esta manera.

ok entonces me diras que no desarrollas sistemas grandes que solo sistemas de noticias o catalogos de productos “cositas basicas y sencillas”. Dejame decirte igual eres vulnerable y te explicare por donde te pueden atacar inocente joven.

desarrollaste una catalo de productos con una url similar a esto:

http://tuweb.com/producto.php?id=746

pero bueno y si vuelve nuestro amigo luchito el maligno y quiere hacer otras maldades? pero que puede hacer aqui?…
que pasaria si cambia tu url con un ‘…

http://tuweb.com/producto.php?id=’746

internamente tu query de que esta armando algo asi y recepciona el get id:

SELECT * FROM productos WHERE id='746'

ahora recibio el valor de get cambiado

SELECT * FROM productos WHERE id=''1'

esto mandara un error tipico por tener 2 ‘ dentro de un valor para la condicion:

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘1’
LIMIT 0, 1000′ at line 1

pero ademas de este error te mandara toda la query y se puede obtener datos como nombres de campos y nombre de tablas aqui un captura de una web vulnerada.

Screenshot_1

de esta forma puedes comenzar a inyectar sql y usar UNION del sql para poder extraer data de otras tablas y por que no usar INNER JOIN? simple que con union no es necesario que las tablas tengan una relacion (PK Y FK)

Muchos servidor actuales que alquilan hosting ya tiene activador firewall (Mod_Security) para evitar estos ataques  y tambien los framework que utilizamos para programar ya cuentan con filtros antes de ejecutar los query’s pero es basico estos conocimientos sobre las inyecciones sql .

Espero haberte ayudado ampliar tus conocimientos sobre las inyecciones y reitero que este articulo va por un lado informativo para que puedas optimizar la seguridad de tus aplicativos.

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
Read more

Mi web esta segura de ataques?

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+

Un pregunta que seguro ya hicieron mas de una vez u otros a lo mejor desconocen que en internet no todo es color de rosa, Existen personas que estan dedicados a buscar bug (Error de software) que sin aprovechadas por los personas que puedan tener mucho o poco conocimiento de programacion. Por que no menciono hacker? estas personas ya estan estigmatizados pensando que son personas que roban, destruyen, etc en internet pero asi como existen que si lo hacen hay muchos que se dedican hacer mejor a internet  como buscar bug para evitar que sean atacados, crean script para mejorar funciones, vulnerar sistemas operativos e informan a las empresas creadoras que a largo o corto plazo son contratados pero volvamos al tema.

 

 

¿Que pueden hacer los ataques?

  • Pueden modificar contenido de nuestro sitio web
  • hacer que nuestro hosting aloje archivos para phishing 
  • Modificar el codigo de un e commerce para modificar la cuenta bancaria para los pagos
  • Robar informacion importante
  • Eliminar todo los archivos
  • Etc

¿Que ataques existen?

Existen varios tipos de ataques pero mencionare los que mayormente se dan

¿Que hacer para estar seguros?

Primero tener gente profesional que tenga muy en cuenta la seguridad a la hora de desarrollar sitios web, Ahora no se tiene que preocupar mucho si se trata de una pagina en HTML simplemente el pero paginas con programacion ¡ALERTAS!

Lugares que se deben tener cuidado al programar:

  • Subidas de archivos al servidor validar el tipo mime (por aqui se pueden subir troyanos)
  • validar los envios de variables por GET para hacer consultas SQL
  • Validar Login y evitar la clasico inyeccion sql (‘or ”=”)
  • Asegurar con permisos las paginas de adminstracion
  • Las validaciones de formularios deben ser del lado del servidor y no del cliente (evitar validar con javascript)
  • No hacer includes desde la url (RFI)
  • No usar archivos .inc por que como no se ejecutan del lado del servidor se pueden ver y algunos colocan hay datos de coneccion
  • Encriptar contraseñas y si es MD5 mejor!
  • No permitir ver los directorios esto lo puedes solucionar colocando un index.html en la carpeta o desde el .htaccess agregar Options -Indexes

Como saber si mi web actual esta segura?

Existen programas que nos ayudan a ver el estado de seguridad de nuestro sitio web  uso y recomiendo es Acunetix Web Vulnerability Scanner muy bueno pero pueda que darte si tienes una web de mucho contenido pero veras que vale la pena.

Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+
Read more