2010-11-02 22 views
10

Recientemente comencé a profundizar en la función ajax de jquery. He hecho muchas mejoras, pero estoy inseguro en un punto. Cómo proteger mis llamadas ajax ..Asegurando jquery ajax calls

Por ejemplo, este código para eliminar un enlace:

// Delete link 
$('.delete_update').live("click",function() { 
    var ID = $(this).attr("id"); 
    var dataString = 'linkid='+ ID; 

    if(confirm('<?php echo _("Are you sure you want to delete this link?");?>')) { 

     $.ajax({ 
      type: "POST", 
      url: "ajaxsave.php", 
      data: dataString, 
      cache: false, 
      success: function(html){ 
       $(".bar"+ID).fadeOut('slow', function() {$(this).remove();}); 
      } 
     }); 

    } 
    return false; 
}); 

Como muestra el ejemplo ajaxsave.php se encarga de borrar el enlace con el linkid POSTAL matchin. Que yo sepa, es posible enviar un formulario de publicación a una url externa. Lo que significa que todo el mundo podría ver mi código fuente y hacer sus propios formularios de publicación eligiendo su propio linkid. De esa forma pueden eliminar todos los enlaces que deseen.

¿Cómo puedo proteger mi código? - Http referente en ajaxsave.php? Los scripts Curl podrían arruinar eso. - ¿Utiliza una sesión o cookies en la página que llama a la función ajax? ¿Guardar la sesión en una base de datos y buscarla en ajaxsave.php?

¿Me puede ayudar? ¿Cómo se hace esto de una manera elegante? O lo que es "normal" en todos estos sitios modernos de Ajax.

Respuesta

11

Este podría ser demasiado tarde para ser útil, pero la respuesta simple es la siguiente:

En ajaxsave.php, debe verificar que la solicitud proviene de un usuario autenticado (conectado) y autorizado (tiene permiso para eliminar este enlace). Si no está haciendo esas cosas, entonces su sitio está definitivamente en riesgo.

Opcionalmente puede simplemente decidir que todos los usuarios autenticados son dignos de confianza y capaz de eliminar lo que quieran. Sin embargo, todavía necesita verificar la autenticación en ajaxsave.php.

7

Debe manejar esto en el servidor, sin importar lo que haga en el cliente (es decir, el navegador). El diseño básico de aplicaciones web se refiere a la autenticación frente a la autorización. El primero es 'Eres tú quien dices que eres', manejado al iniciar sesión, y el último es '¿tienes permiso para hacer lo que estás tratando de hacer'? Usted debe manejar la autorización en el servidor: lo primero que debe hacer es verificar que el usuario tenga la autorización adecuada para hacer lo que está tratando de hacer.

cuando diga 'A mi entender, es posible enviar un formulario de publicación a una url externa. Lo que significa que todo el mundo podría ver mi código fuente y hacer sus propios formularios de publicación eligiendo su propio linkid. De esa forma pueden eliminar todos los enlaces que deseen '. ¿Le preocupa que alguien pueda ver su javascript, ver una url y luego configurar un formulario en su propio sitio web que apunta a su url? Esto no es posible debido a la misma política de origen, que implementan todos los navegadores. La misma política de origen significa que si se encuentra en www.example.com, no puede realizar una solicitud de Ajax a www.example2.com (entre otras cosas). Entonces alguien no pudo configurar www.example2.com y luego tratar de publicar en www.example.com (su sitio) con ajax. Sin embargo, podrías hacerlo con cualquier cantidad de otras herramientas.

Por ejemplo, nada impide que un usuario escriba una URL en su navegador y trate de manipular su sistema. Digamos por ejemplo, puede eliminar un usuario en

www.example.com/user/delete/20

lo que significa eliminar el usuario con id 20. Tan pronto como veo que, tan sólo pudiera escribir en el navegador

www.example.com/user/delete/21

a pesar de que no me ha proporcionado un enlace a esa URL. Así que como he dicho al principio, es necesario asegurarse de que tengo los privilegios necesarios para eliminar el usuario 21.

+0

Gracias por su respuesta. Esa es exactamente mi preocupación. Y esto no es posible? Sus ejemplos al visitar esas URL no funcionarán porque los datos se pasan como POST y no como GET. Mencionando que ajaxsave.php no borrará nada si no recibe el formato POST de prober. Y el sitio donde es posible eliminar estos enlaces a través de ajax está, por supuesto, protegido con contraseña. Mi preocupación era sobre el formulario de publicación a la URL externa. –

+0

@ s0mmer, no es posible con el Ajax, pero muy posible y fácil de escribir un guión usando wget o curl. – hvgotcodes

+0

@hvgotcodes ¿Cómo puedo prevenir esto? –

0

Bueno, te voy a decir una sola manera. Puede autenticar las peticiones entrantes

con un chequeo de la sesión dentro de la función de servicio.

if ((UserID!=0)||(UserID!= null)) 
    { 
     //delete action code 
    }