Recientemente, mi amigo en el trabajo quería pedir algo de comida para el almuerzo de un sitio web que usualmente ordenamos. El sitio permite al visitante convertirse en miembro del sitio al registrarse y luego iniciar sesión.
Al convertirse en miembro, básicamente pueden realizar un seguimiento de sus pedidos, lo que le permite obtener "puntos de bonificación". Similar a muchas cosas, al menos aquí en los EE. UU., Donde puede obtener material gratuito basado en puntos.
Debido a que a menudo compramos en este sitio, tuvimos algunos puntos para obtener comida gratis. Sin embargo, no tuvimos suficiente para obtener un par de pizzas grandes, solo alrededor de 20 puntos. El tipo con el que trabajo es un desarrollador principiante que se concentra en las interfaces de usuario. Tengo un poco más de experiencia y sé un poco más sobre el código del lado del servidor / cliente, así como las bases de datos. Al realizar el pedido, discutimos cómo sitios como el que estábamos en las entradas de sanitización, así como una discusión sobre los sitios que validan datos en el lado del cliente y del servidor.
Como quería ver algunas cosas, pude mostrarle desde este sitio que sí, de hecho, se estaban validando en el lado del cliente y del lado del servidor cuando ordenó elementos regulares de su menú. Como estábamos en la página de puntos de bonificación, donde puede agregar elementos utilizando sus puntos, noté un código muy cuestionable en el lado del cliente. Noté algunas llamadas ajax bastante extrañas que simplemente pasaban el costo (en puntos por un artículo) así como los puntos de los usuarios registrados. De esta manera podrían hacer un cheque if(userPoints >= neededPoints){ //allow adding for free } else { //don't! }
.
El problema es que esto puede ser fácilmente comprometido. Con toda seguridad, podría hacer la llamada ajax y permitirme obtener el artículo incluso si no tuviera ningún punto. Seguramente pensé que cuando "envié" mi pedido, el lado del servidor detectaría esto ... así que mi amigo me dijo que lo intentara. Lo probamos y pasamos por ... condujimos hasta la pizzería y, efectivamente, la comida estaba hecha. Eso sí, terminé dándole a este lugar local lo que normalmente nos costaría pedir la pizza. Como esta era una cadena local, no sabían cuál era el problema y les dije que me pondría en contacto con la sucursal corporativa para remediar la situación. Nadie me ha vuelto a llamar. ¿Debo seguir comunicándome con la oficina corporativa y enviar correos electrónicos que indiquen que su sitio era vulnerable? ¿Qué puedo hacer para transmitir el mensaje de que tienen un problema que debe solucionarse lo antes posible?
Tenga en cuenta que el "dupe" existente al que alguien vinculado no me ayuda, ya que no puedo comunicarme con los desarrolladores.