149 votes

Comment puis-je écrire Json non encodée à mon avis à l’aide de rasoir ?

Je suis en train d’écrire un objet au format JSON, à mon avis de MVC Asp.Net à l’aide de rasoir, comme suit :

Le problème est que dans la sortie, le JSON est codé, et mon navigateur ne l’aime pas. Par exemple :

Comment puis-je obtenir Razor pour émettre JSON non codé ?

187voto

Lorenzo Points 12167

Vraiment :

Dans les versions antérieures à la version bêta 2 vous avez fait ça :

41voto

Jeremy Cook Points 2236

Newtonsoft de l' JsonConvert.SerializeObject ne se comportent pas de la même chose que Json.Encode et de faire ce que @david-k-tête d'oeuf suggère vous ouvre à des attaques XSS.

Déposer ce code dans un Rasoir pour voir que l'utilisation d' Json.Encode sûre, et que Newtonsoft peut être faite sans danger dans le contexte JavaScript, mais n'est pas sans un certain travail supplémentaire.

<script>
    var jsonEncodePotentialAttendees = @Html.Raw(Json.Encode(
        new[] { new { Name = "Samuel Jack</script><script>alert('jsonEncodePotentialAttendees failed XSS test')</script>" } }
    ));
    alert('jsonEncodePotentialAttendees passed XSS test: ' + jsonEncodePotentialAttendees[0].Name);
</script>
<script>
    var safeNewtonsoftPotentialAttendees = JSON.parse(@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(
        new[] { new { Name = "Samuel Jack</script><script>alert('safeNewtonsoftPotentialAttendees failed XSS test')</script>" } }), addDoubleQuotes: true)));
    alert('safeNewtonsoftPotentialAttendees passed XSS test: ' + safeNewtonsoftPotentialAttendees[0].Name);
</script>
<script>
    var unsafeNewtonsoftPotentialAttendees = @Html.Raw(JsonConvert.SerializeObject(
        new[] { new { Name = "Samuel Jack</script><script>alert('unsafeNewtonsoftPotentialAttendees failed XSS test')</script>" } }));
    alert('unsafeNewtonsoftPotentialAttendees passed XSS test: ' + unsafeNewtonsoftPotentialAttendees[0].Name);
</script>

Voir aussi:

11voto

David K Egghead Points 4564

À l’aide de Newtonsoft

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X