J’essaie d’écrire un object en tant que JSON sur ma vue Asp.Net MVC en utilisant Razor, comme ceci:
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
Le problème est que, dans la sortie, le JSON est codé et mon navigateur ne l’aime pas. Par exemple:
var potentialAttendees = [{"Name":"Samuel Jack"},];
Comment puis-je faire en sorte que Razor émette un JSON non codé?
Tu fais:
@Html.Raw(Json.Encode(Model.PotentialAttendees))
Dans les versions antérieures à la version bêta 2, vous l’avez fait comme:
@(new HtmlSsortingng(Json.Encode(Model.PotentialAttendees)))
JsonConvert.SerializeObject de JsonConvert.SerializeObject
ne se comporte pas comme Json.Encode
et fait ce que @ david-k-egghead suggère vous ouvre aux attaques XSS .
Déposez ce code dans une vue Razor pour vérifier que l’utilisation de Json.Encode
est sûre et que Newtonsoft peut être sécurisé dans le contexte JavaScript, mais sans aucun travail supplémentaire.
" } } )); alert('jsonEncodePotentialAttendees passed XSS test: ' + jsonEncodePotentialAttendees[0].Name); " } }), addDoubleQuotes: true))); alert('safeNewtonsoftPotentialAttendees passed XSS test: ' + safeNewtonsoftPotentialAttendees[0].Name); " } })); alert('unsafeNewtonsoftPotentialAttendees passed XSS test: ' + unsafeNewtonsoftPotentialAttendees[0].Name);
Voir également:
Utiliser Newtonsoft