Accueil > .Net, ASP.Net, C#, JQuery, MVC2 > [C# 4 MVC2 JQuery] Appeler une action depuis JQuery – Part 2

[C# 4 MVC2 JQuery] Appeler une action depuis JQuery – Part 2

Je reviens un peu sur ce que j’avais noté dans Appeler une action depuis JQuery.

Après un audit de sécurité, il s’est avéré que JSon, tel qu’utilisé, pouvait entrainer une faille. Dans notre cas, elle est catégorisée sous « Piratage de Javascript », avec une classification WASC « Divulgation d’informations : Fuite d’informations« .

Du coup, je me suis penché sur le problème et j’ai trouvé Asp.Net MVC 2 JsonRequestBehavior.AllowGet.

J’ai donc modifié mon code en conséquence :

function GetProviders(input){
        $.ajax({
            type: "POST",
            url: "<%: Url.Content("~/Controller/GetEvents") %>",
            data: { date: input },
            dataType: "json",
            async: true,
            cache: false,
            success: function (msg) {
                $("#InputSelect").empty();
                $.each(msg, function (index, item) {
                    $("#InputSelect").get(0).options[$("#InputSelect").get(0).options.length] = new Option(item.Name, item.Code);
                });
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                // ...
            }
        });
    }
    $(document).ready(function () {
        $("#InputDate").live('blur', function () {
            var date = $("#InputDate").val();
            if (date != "") {
                GetProviders(date);
            }
        });
        $("#InputDate").blur();
    });

A noter ici l’utilisation de Url.Content.
Ca permet, ni plus ni moins, de s’affranchir des problèmes de résolutions des URL.
Je m’explique : en local, je travaille avec des URL du type : http://localhost:8080/Controller/Action.
Cependant, sur le serveur de production, les URL sont du type : http://domain/projet/Controller/Action.
On a un niveau supplémentaire et là, c’est vite le drame !🙂
Du coup, Url.Content permet de résoudre automatiquement les URL à partir de l’élément racine : « ~ » veut donc dire http://localhost:8080 ou http://domain/projet, suivant l’environnement.

Et là, on peu enlever le JsonRequestBehavior.AllowGet :

        [HttpPost]
        public JsonResult GetPrestataires(string date)
        {
            List<Provider> list = new List<Provider>();
            // Traitements
            return Json(list);
        }

Je mettrais à jour en fonction du résultat du nouvel audit.
Et pis je ferais aussi un retour un peu plus général sur la sécurité en présentant différents sites utiles, dans un autre billet.

EDIT du 11 / 02

Après un audit différentiel, il apparait que la faille est corrigée !
Donc, la méthode $.ajax est à utiliser en lieu et place de $.getJSON.
Pour la petite histoire, l’utilitaire avait détecté 19 failles, l’audit différentiel a indiqué quelles avaient toutes été corrigées \o/

Catégories :.Net, ASP.Net, C#, JQuery, MVC2
  1. Aucun commentaire pour l’instant.
  1. 17/01/2012 à 19:51

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :