adansinacento
adansinacento
AdanSinAcento
350 posts
{Pizza, Cine, Code, Pensamientos.Random()}
Don't wanna be here? Send us removal request.
adansinacento · 6 years ago
Text
My emo phase will end when i die
29K notes · View notes
adansinacento · 6 years ago
Text
Tumblr media
23K notes · View notes
adansinacento · 8 years ago
Text
Intentando mantener la seguridad con llamadas AJAX
Yo debería estar escribiendo código en lugar de esto, pero pensé en escribirlo para distraerme un poco.
Así que, mi cuñado me pide que le desarrolle un pequeño sitio administrativo para su empresa, que es una escuela de idiomas, pero me pide que cuide mucho el asunto de la seguridad, dado que en el sitio maneja mucha información personal de sus alumnos.
Yo sé muy poco de seguridad de la información (no te enseñan nada de técnicas de seguridad en la escuela) pero le digo que vale, que yo me encargo, que haré lo que pueda.
Conforme avanza el desarrollo, cada que añado un nuevo feature al sitio me pregunto ¿Cómo alguien más listo que yo podría usar este nuevo feature para robarle a mi cuñado la valiosísima información de sus alumnos?
La mayoría de las veces termino añadiendo un if() y caso cerrado. Let's hope for the best... El problema vino cuando comencé a hacer AJAX requests porque naturalmente uso (con mucha frecuencia) el método $.ajax() de jQuery y termino llamando a un script de php hospedado en algún rincón mi server. Entonces, alguien más listo que yo, podría browsear entre mis archivos .js y terminar dando con la ruta, el método e incluso con los parámetros de cada script de php de manera que fácilmente podrían usar algún software externo (o inclusive el mismo browser) para hacer un GET a "la/ruta/de/el/script.php?params=servidos" Y por la naturaleza (y el propósito) de AJAX la mayoría de esos scripts revelarían información importante. Así comenzó la búsqueda y la misíon, intentar hacer de los AJAX requests algo seguro para el cliente. Empecemos con una definición, por si hay alguien perdido. ¿Qué es AJAX? AJAX (Wikipedia mediante) es el acrónimo de Asynchronous JavaScript And XML. Solo para dejar las cosas claras: en este ejemplo voy a usar Php en el server side Es una técnica de desarrollo que permite la interacción del Client Side con el Server Side en tiempo real sin tener que hacer un page reload. Bueno, eso de
"En tiempo real"
no es tan certero, porque después de todo de ahí viene la primer A de AJAX: asíncrono, esto es, JavaScript corre el código, ejecuta las llamadas AJAX y sigue con lo suyo sin esperar respuesta (la cual de cualquier manera llegará, eventualmente, tarda lo que tardaría cualquier otro server request) En fin, dejemos un momento lo básico y dediquémonos a lo que nos importa: mantener seguros esos server request a menú abierto. Las ideas más obvias ya las cubrí (o eso espero) y de hecho lo hacía desde antes: por ejemplo, verificar el inicio de sesión en los scripts de php para AJAX de la misma manera que lo hago con el resto de los .php del sitio... De nuevo solucionado con un if() que evalúa las variables de $_SESSION[] fácil, pero aun siento muy vulnerable ese sistema, ya que un usuario puede loggearse, darle los valores correctos a todas las variables de $_SESSION[] que necesite y después comenzar a meterse con scripts que no le incumben y que simplemente no debería estar viendo. O bien, aunque no lo necesito yo en este proyecto imaginemos por ejemplo que necesito verificar que el mail del usuario no ha sido registrado antes, para poder hacer INSERT de esos datos en la DB. Ahí estoy en una situación difícil, ya que hacer esto con page requests sería una falta de respeto al UX, la mejor manera, sería un request AJAX que llame a un script, reciba el correo en cuestion por GET o POST verifique en la DB y devuelva, por ejemplo
"El mail ya fue registrado"
O si no
"El mail está disponible"
para cuando sea el caso apropiado. Imaginemos entonces que un hacker se da cuenta de este sistema y comienza a explotarlo debidamente. Un par de horas haciendo requests con algún bot (o desde el mismísimo browser) y ya tiene en su poder todos los mails de tu base de datos, listos para ofertar al mejor postor. La primer opción que me viene a la mente (no sé si la mejor, díganme ustedes, que son los expertos) sería regular el número de requests que el script puede servir, explico: Digamos que al cargar la página, PHP crea una variable de tipo $_SESSION[] y le asigna un valor, 10 por ejemplo. Entonces en el script de Php que sirve al AJAX modifica la variable, restándole 1 y solo sirve el request en caso de que la variable valga más que 0. Naturalmente en caso de no serlo haces la respuesta necesaria indicándole al usuario que debe de hacer un reload manual para poder serguirse valiendo de esa opción, así con el reload la variable vuelve a ser 10 y está lista para volver a ser disminuida a 0, hasta el siguiente reload ad infinitum. Este método puede servir para dificultar el proceso de hacking y te quitas de encima a algunos bots, asegurándote también de que el request solo se haga desde un browser que ha servido tu sitio. Solo por no dejar así las cosas escribo un pequeño ejemplo de como implementaría yo esta acción. En el php principal (que para esta acción llamaremos ClientSide.php) se incluiría:
<?php session_start(); $_SESSION["AJAXreq"] = 10; ?>
Y más adelante:
$.ajax({ url: "ServerSide.php", dataType: "json", data: { mail: request.term }, success: function(data) { alert(data); } });
Y como ya habrán notado mi otro php (el que sirve el AJAX request) se llama ServerSide.php e incluiría (entre otras) estas líneas de código
<?php session_start(); if ($_SESSION["AJAXreq"] > 0){ /* Código para verificar si el mail existe en la DB */ echo "El mail " . (($MailRegistrado == true) ? "ya fue registrado" : "está disponible"); $_SESSION["AJAXreq"]--; } else { echo "Por favor recarga la página para poder seguir verificando"; } ?>
Aunque el código podría llevarse a optimización, esta es una manera sencilla de por lo menos no dejar todas las puertas abiertas. Y así como este hay muchos métodos que podriamos utilizar:
Pensemos en, por ejemplo no solo servir 10 request en cada page reload, sino que limitarlos a 10 por hora, o algo así
Realizar alguna confirmación humana despues de cierto número de requests
Ralentizar el tiempo de respuesta acorde al número de requests
Crear un token en ClientSide.php y verificarlo en ServerSide.php
Más casos recomendados son: Checar el HTTP ORIGIN (aunque esto no ayuda si los request son hechos desde el browser, en tu sitio) o Intenta ocultar tus funciones de JavaScript guardándolas en un archivo .php en lugar de en un .js, para que así puedas medir el nivel de acceso del usuario (en cierta medida). En fin estas son solo un par de ideas, bastante simplonas, pero espero que a alguien le sean de ayuda; además, genuinamente estoy en búsqueda de mas métodos para asegurar el sitio, siéntanse libres de contactarme. Que tengan felices y seguros AJAX requests AdanSinAcento
2 notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
261 notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
91K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
Seiji Mamiya
246K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
Johto Pokédex
23K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
6M notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
13K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
I can’t believe Pokémon Sun & Moon came out 38 years ago. Feels like it’s only been a few months.
1K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
Gluten Free Vegan Protein Pancakes are a healthier no refined flour stack of pancakes!  Thick yet fluffy pancakes bursting with sweet wild blueberries, you’d never know they are packed with 7grams of fiber and 30grams of protein per serving!
Click here for the recipe!
Really nice recipes. Every hour.
Show me what you cooked!
333 notes · View notes
adansinacento · 8 years ago
Text
heterosexuals are so weird we had to sing for russian class today and the singing teacher said that only the peopel she interpreted as boys were allowed to sing one verse because it was talking about how muh the narrator loved a pine tree and pine trees are gramatically feminine she was threatened by the thought that we could be gay for a tree
26K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
155K notes · View notes
adansinacento · 8 years ago
Text
someone: wait why can’t you hang out later?
me: 
Tumblr media
488K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
23K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
95K notes · View notes
adansinacento · 8 years ago
Photo
Tumblr media
43K notes · View notes