Foros del Web » Programando para Internet » PHP »

Evitar inyección de código de PHP por medio de AJAX

Estas en el tema de Evitar inyección de código de PHP por medio de AJAX en el foro de PHP en Foros del Web. Buenos días a tod@s!!! Veréis, estoy desarrollando un juego usando HTML, javascript, PHP y MySQL. Como sabéis se pueden ejecutar funciones de javascript desde la ...
  #1 (permalink)  
Antiguo 17/11/2009, 06:53
 
Fecha de Ingreso: diciembre-2008
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 0
Evitar inyección de código de PHP por medio de AJAX

Buenos días a tod@s!!!

Veréis, estoy desarrollando un juego usando HTML, javascript, PHP y MySQL. Como sabéis se pueden ejecutar funciones de javascript desde la barra de direcciones o desde un debuger.

El problema es que un usuario un poco avispao o con ganas de molestar, podría ejecutar una función que yo he programado en javascript en cualquier momento.

Pongo un ejemplo, supongamos que tengo una función javascript que se llame sumarPuntos() y que tenga que ejecutarla cada X tiempo o al pulsar un botón. Es fácil saber que existe esa función. Si el usuario la descubre, podría "hacer trampas" en el juego. Si esa función emplea AJAX para actualizar unos datos mediante PHP en una base de datos, el problema es más grave. Aunque el usuario no sepa los parámetros que hay que pasar al PHP, podría ejecutar la función javascript.

¿Podría evitar de alguna forma que el usuario ejecutara ese arvhivo PHP a su antojo? Desde javascript no sé si es posible evitarlo (ya lo he preguntado en el foro correspondiente), pero y ¿con PHP?

Gracias, un saludo!!!

P.D: He planteado este problema también en el foro de javascript, pues lo que pregunto es si hay forma de resolverlo usando PHP en este caso o usando javascript en el otro post.
  #2 (permalink)  
Antiguo 17/11/2009, 07:00
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Evitar inyección de código de PHP por medio de AJAX

Esta claro que cualquier codigo en html o javascript lo van a poder ver, asi que lo que sea que haya que comprobar o restringir lo tienes que hacer en php.

Por ejemplo, un jugador podria ir y ejecutar sumarPuntos() a su antojo, pero ese sumarPuntos() luego chequea en PHP si ese jugador tiene turnos suficientes como para reailzar esa accion, y asi no habria problema.

Limita todas las acciones por tiempo o por turnos, o al menos asi hice yo en mi juego, saludos
  #3 (permalink)  
Antiguo 17/11/2009, 07:15
 
Fecha de Ingreso: diciembre-2008
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Evitar inyección de código de PHP por medio de AJAX

Mmm no me parece la forma más adecuada de poder evitarlo... ¿cómo sé cuando se podría ejecutar la sentencia SQL? Creo que no entiendo muy bien la forma que te refieres sobre cómo poder evitarlo, ¿puedes explicármelo mejor?

¿Te refieres a que antes de ejecutar la consulta, comprobar una fecha y compararla con la actual? Si por ejemplo quiero ejecutar la función cada 5 segs, tendría que comprobar que la fecha actual es mayor que la fecha guardada de la última ejecución... ¿es eso?

¿No hay otra forma menos complicada?
  #4 (permalink)  
Antiguo 17/11/2009, 07:43
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Evitar inyección de código de PHP por medio de AJAX

Me parece muy interesante el tema.. se me ocurre que puedes crear sesiones con un cierto codigo AKJSIJ985as89sBN para asi actualizar puntos con el php, por mas que ejecuten la funcion JS el PHP no hará el update.. se entiende? esas sesiones las vas renovando continuamente..


Saludos
  #5 (permalink)  
Antiguo 17/11/2009, 07:56
 
Fecha de Ingreso: diciembre-2008
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Evitar inyección de código de PHP por medio de AJAX

McBlink gracias por tu aporte. Me parece una idea similar al de controlar por medio de la fecha actual y la de ultima actualización.

Aunque uso sesiones para controlar si el usuario se ha logeado, no soy un experto en sesiones. Por eso me parece una idea más compleja que la anterior. ¿Cómo vas renovando las sesiones?
  #6 (permalink)  
Antiguo 17/11/2009, 08:12
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Evitar inyección de código de PHP por medio de AJAX

A ver, creo que lo que tu quieres hacer es que mientras un jugador este logueado, vaya ganando algo ¿no?

Primero te digo que hacer que cada 5 seg cada jugador envie una modificacion a la base de datos puede ser mortal para cuando tengas 500 jugadores...

La idea de comprobar la hora podria ser asi: Con la funcion time() obtenemos la fecha actual en segundos, es muy util esta funcion para hacer cosas de estas. Bien, añadele un campo en la tabla de jugadores llamado TIME, entonces cuando vayas a sumar puntos a dicho jugador comprueba que el time() actual menos el TIME grabado sea mayor a..... 5 segundos, de ser asi, sumamos los puntos y grabamos time() en TIME del jugador.

Otra idea mucho mas liviana para la base de datos es usar un crontab configurado en tu servidor, si no sabes como va esto dime y te explico un poco aunque no soy un experto
  #7 (permalink)  
Antiguo 17/11/2009, 18:59
 
Fecha de Ingreso: diciembre-2008
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Evitar inyección de código de PHP por medio de AJAX

Hola.

Sí. A ver lo de las peticiones cada 5 seg al servidor... ya había pensado que podía ser mortal XD... pero no se me ocurre otra cosa. Necesito ejecutar una actualización cada cierto tiempo (poco, por ej. cada 5 seg) en la BBDD.

Me explico más detalladamente. Necesito que el usuario cuando inicie el juego (no cuando inicie sesión) pulsando un botón, se dispare la acción anterior y vaya sumando puntos cada 5 segs. Después de cerrar el juego, se debería de parar la acción.

Lo ideal sería que está acción se realizara desde el servidor. O sea el usuario hace una petición inicial que dispara la acción y después sin que haga más peticiones, el servidor haga estas actualizaciones automáticamente. Después el usuario puede hacer otra petición y cancelar la acción. Sé que esto no es posible hacerlo mediante AJAX, por eso había pensado en el setInterval...

Lo del crontab no sé lo que es... voy a investigar sobre ello. Gracias a todos por vuestra dedicación.
  #8 (permalink)  
Antiguo 17/11/2009, 19:45
 
Fecha de Ingreso: diciembre-2008
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Evitar inyección de código de PHP por medio de AJAX

Vale he estado investigando sobre crontab.

- En primer lugar, trabajo sobre windows (el equivalente sería el adm. de tareas supongo).
- Creo que el crontab ejecuta un comando con un intervalo de diferencia de al menos 1 min y yo quiero que se ejecute la acción cada pocos segs.
- Para ejecutar un administrador de tareas en mi pc lo tengo claro, pero en un hosting no tengo ni idea de cómo se haría, ¿tienes que crear algún fichero especial de configuración o algo similar?.
  #9 (permalink)  
Antiguo 17/11/2009, 21:08
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Evitar inyección de código de PHP por medio de AJAX

bueno, deberias pensar si te merece la pena ir contabilizando cada 5 segundos, o si realizar cada minuto 12 veces lo que se haga en 5 segundos...

Sobre crontab soy tambien muy nuevo, casi que me dijeron paso a paso como hacer. PRimero en el panel de control de mi hosting (hostgator.com) , hay una seccion concreta de Cronjobs, ahi se configura muy facil, un ejemplo:

Minute: 00
Hour: 08
Day: *
Month: *
Year: *
Command: /home/usuario/public_html/carpeta/archivo.sh


Esto ejecutaria archivo.sh todos los dias a las 08:00. ¿Que contiene ese archivo.sh? Pues son comandos en linux, puedes desde ejecutar algun ejecutable, hacer copia de seguridad de la base de datos, hasta ejecutar un .php que es lo que nos interesa, por ejemplo:

#!/bin/sh
php /home/usuario/public_html/carpeta/acciones.php >& /home/usuario/public_html/carpeta/acciones.txt


Eso ejecuta acciones.php, que es donde tu tendrias que realizar el update en mysql sumando los puntos a aquellos jugadores cuyo TIME sea muy reciente... siempre que vayamos actualizando el TIME de cada jugador cada poquito tiempo...

Lo ultimo de >& /home/usuario/public_html/carpeta/acciones.txt lo que hace es grabar en el txt la salida que produzca la ejecucion de acciones.php, por si hay algun error y quieres comprobar que es lo que ocurre.
  #10 (permalink)  
Antiguo 18/11/2009, 19:02
 
Fecha de Ingreso: diciembre-2008
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Evitar inyección de código de PHP por medio de AJAX

Claro como el agua Vun.

Ahora lo que necesito es un hosting (de momento gratuito) que soporte tareas programadas. El que tengo ahora no lo hace.

Muchas gracias por tus respuestas.
  #11 (permalink)  
Antiguo 18/11/2009, 19:26
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Evitar inyección de código de PHP por medio de AJAX

De nada, me gusta ver programadores de juegos de estos por navegador, que aunque sean mi competencia tenemos que comerle terreno a esas empresas alemanas que hacen juegos tan poco originales :Þ
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:34.