2010-11-02 7 views
10

Récemment, j'ai commencé à creuser dans la fonction ajax de jquery. J'ai apporté beaucoup d'améliorations, mais je ne suis pas sûr sur un point. Comment sécuriser mes appels ajax ..Sécurisation des appels jquery ajax

Par exemple, ce code pour la suppression d'un lien:

// 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; 
}); 

Comme le montre l'exemple ajaxsave.php prend soin de supprimer le lien avec le matchin POST linkid. À ma connaissance, il est possible de soumettre un formulaire de publication à une URL externe. Ce qui signifie que tout le monde serait capable de regarder mon code source et de faire leurs propres formulaires en choisissant leur propre linkid. De cette façon, ils peuvent supprimer tous les liens qu'ils veulent.

Comment sécuriser mon code? - Http référent dans ajaxsave.php? Les scripts Curl pourraient ruiner cela. - Utilisation de session ou de cookies sur la page appelant la fonction ajax? Enregistrer la session dans une base de données et la vérifier dans ajaxsave.php?

Pouvez-vous m'aider? Comment faites-vous cela d'une manière élégante. Ou ce qui est "normal" sur tous ces sites ajax modernes ..

Répondre

11

Cela pourrait être trop tard pour être utile, mais la réponse est simple:

En ajaxsave.php, vous devez vérifier que la requête provient d'un utilisateur authentifié (connecté) et autorisé (a la permission de supprimer ce lien). Si vous ne faites pas ces choses, votre site est définitivement menacé.En option, vous pouvez simplement décider que tous les utilisateurs authentifiés sont dignes de confiance et capables de supprimer tout ce qu'ils veulent. Cependant, vous devez toujours vérifier l'authentification dans ajaxsave.php.

7

Vous devez gérer cela sur le serveur, peu importe ce que vous faites sur le client (c'est-à-dire le navigateur). La conception d'applications Web de base traite de l'authentification et de l'autorisation. Le premier est «Êtes-vous qui vous dites que vous êtes», manipulé en vous connectant, et le dernier est «avez-vous la permission de faire ce que vous essayez de faire». Vous devez gérer l'autorisation sur le serveur - la première chose que vous devriez faire est de vérifier que l'utilisateur a l'autorisation appropriée pour faire ce qu'ils essaient de faire.

Lorsque vous dites 'À ma connaissance, il est possible de soumettre un formulaire de publication à une adresse URL externe. Ce qui signifie que tout le monde serait capable de regarder mon code source et de faire leurs propres formulaires en choisissant leur propre linkid. De cette façon, ils peuvent supprimer tous les liens qu'ils veulent. Êtes-vous inquiet que quelqu'un puisse regarder votre javascript, voir une URL, puis mettre en place un formulaire sur leur propre site Web qui pointe vers votre URL? Cela n'est pas possible en raison de la même politique d'origine que tous les navigateurs implémentent. La même politique d'origine signifie que si vous êtes sur www.example.com, vous ne pouvez pas faire une requête ajax sur www.example2.com (entre autres choses). Donc, quelqu'un ne peut pas configurer www.example2.com et ensuite essayer de poster sur www.example.com (votre site) avec ajax. Vous pourriez le faire avec n'importe quel nombre d'autres outils si. Par exemple, rien n'empêche un utilisateur de taper une URL dans son navigateur et d'essayer de manipuler votre système. Disons, par exemple, vous pouvez supprimer un utilisateur à

www.example.com/user/delete/20

qui signifie supprimer l'utilisateur id 20. Dès que je vois, je pouvais entrer dans la navigateur

www.example.com/user/delete/21

même si vous me avez pas fourni un lien vers cette URL. Donc, comme je l'ai dit au départ, vous devez vous assurer que je les privilèges nécessaires pour supprimer l'utilisateur 21.

+0

Merci pour votre réponse. C'est exactement mon inquiétude. Et ce n'est pas possible? Vos exemples de visite de ces URL ne fonctionneront pas car les données sont passées en POST et non en GET. Mening que ajaxsave.php ne supprime pas une chose si elle ne reçoit pas le format POST prober. Et le site où il est possible de supprimer ces liens via ajax est, bien sûr, protégé par mot de passe. Mon inquiétude concernait la forme post à l'URL externe. –

+0

@ s0mmer, ce n'est pas possible avec Ajax, mais très possible et facile d'écrire un script en utilisant wget ou curl. – hvgotcodes

+0

@hvgotcodes Comment puis-je empêcher cela? –

0

Eh bien, je vais vous dire d'une façon. Vous pouvez authentifier les demandes entrantes

avec fonction de vérification de session à l'intérieur du service.

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