2010-01-13 7 views
0

est le coffre-fort suivant?jquery ajax - question de sécurité

index.html

<div id="loader">loading...</div> 
    <div onclick="foo()">click me</div> 
    <div id="change"></div> 
    <script> 
     function foo(){ 
      jQuery.ajax({ 
       url: 'get.html', 
       success: function(txt){ 
        var x = $('#loader').html(txt) 
       x=$('loader').find('script').html() 
       eval(x) 
      } 
     }) 
    } 
    </script> 

get.html

en théorie
<div>Header</div> 
<script> 
    function newfoo(){ 
     $('#change').html('hello world') 
    } 
</script> 

cela devrait fonctionner ....

Note: ci-dessus peut ne pas fonctionner c'est une démonstration que ... Ma question est: comme le newFoo() ne sera pas exécuté par lui-même quand le get.html est chargé à cause de raisons de sécurité ... l'alternative ci-dessus serait-elle une menace pour la sécurité?

Répondre

2

Le code, comme ça, est pas sécurisé car il peut être facilement utilisé à partir de tout serveur en définissant la cible d'un <script> à son URL. Ainsi, toute personne intéressée peut appeler ce script à partir de n'importe quel serveur. Pas très sécurisé.

Cependant, il existe des solutions de contournement. La méthode gmail consiste à ajouter while (1) au début de la fonction renvoyée, puis à l'enlever sur le client avant d'exécuter le code. Comme <script> exécutera automatiquement le code, personne d'autre que les scripts s'exécutant localement ne pourra utiliser ce code.

2

En supposant que vous pouvez toujours faire confiance à la source (dans votre cas, get.html), il sera sécurisé, mais personnellement, j'évite toujours Eval si je peux. Cela vous ouvre aux attaques par injection si quelqu'un parvient à transmettre de mauvaises données.

Voir aussi: a good SO question about eval