Puntuación alta seguridad

  • dudeking
  • Student
  • Student
  • Avatar de Usuario
  • Registrado: Jul 30, 2006
  • Mensajes: 95
  • Loc: UK, Middlands
  • Status: Offline

Nota Julio 12th, 2009, 9:20 am

Está bien que he escrito unos cuantos juegos usando javascript, y por las altas puntuaciones que he usado AJAX para enviar el marcador a una página PHP que almacena el resultado en una base de datos. Tengo la seguridad está bien lo que el usuario tiene que estar conectado, no hay manera altera las calificaciones de otros usuarios, pero cuando se ha identificado todavía es posible inyectar resultados.

Código: [ Select ]
if($_GET['sessionID'] == $user->data['session_id'])
    {
        $score = $_GET['score'];
        $username = $user->data['username_clean'];
    
        if($username != 'anonymous')
        {
            $sql = "SELECT score FROM games_batball WHERE username = '$username' ORDER BY score DESC";
            $result = mysql_query($sql);
            $row = mysql_fetch_assoc($result);
            if($row['score'] < $score)
            {
                $sql = "INSERT INTO games_batball (username, score) VALUES ('$username', '$score')";
                $result = mysql_query($sql);
                $message = 'Your Score Was Added';
            }
            else
            {
                $message = 'Your older score of '.$row['score'].' was higher.';
            }
        }
    }
  1. if($_GET['sessionID'] == $user->data['session_id'])
  2.     {
  3.         $score = $_GET['score'];
  4.         $username = $user->data['username_clean'];
  5.     
  6.         if($username != 'anonymous')
  7.         {
  8.             $sql = "SELECT score FROM games_batball WHERE username = '$username' ORDER BY score DESC";
  9.             $result = mysql_query($sql);
  10.             $row = mysql_fetch_assoc($result);
  11.             if($row['score'] < $score)
  12.             {
  13.                 $sql = "INSERT INTO games_batball (username, score) VALUES ('$username', '$score')";
  14.                 $result = mysql_query($sql);
  15.                 $message = 'Your Score Was Added';
  16.             }
  17.             else
  18.             {
  19.                 $message = 'Your older score of '.$row['score'].' was higher.';
  20.             }
  21.         }
  22.     }


Puedo utilizar PHP para pasar el identificador de sesión en el juego y luego, cuando AJAX envía la puntuación también envía el identificador de sesión que se utiliza para asegurar que el usuario está conectado y lo que son. Pero aún podría alterar el Javascipt...

Código: [ Select ]
xmlhttp.open("GET", "score.php?score=" + score + "&sessionID=" + id, true);


y cambiar la puntuación de la variable de que cada vez que les gusta, ¿cómo puedo asegurar esto?


Gracias, Eddie
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Julio 12th, 2009, 9:20 am

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13458
  • Loc: Florida
  • Status: Offline

Nota Julio 12th, 2009, 1:18 pm

Sólo hay una manera de garantizar resultados del juego. No realizar ningún juego de la lógica en el navegador. En la medida en que el navegador hace incluso un cálculo utilizado para determinar la puntuación, la puntuación puede ser manipulado.

El navegador no puede contar el servidor de nada, sólo puede preguntar el servidor lo que debe mostrar para el jugador.
Strong with this one, the sudo is.
  • dudeking
  • Student
  • Student
  • Avatar de Usuario
  • Registrado: Jul 30, 2006
  • Mensajes: 95
  • Loc: UK, Middlands
  • Status: Offline

Nota Julio 12th, 2009, 1:27 pm

Hummm...bien...Supongo malos sólo hay que tratar de ocultar los archivos y las variables en el código JavaScript para que sea más difícil de elaborar.

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 124 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC