Używam deserializera JSON Newtonsoft. Jak można wyczyścić JSON dla XSS (cross site scripting)? Czyszczenie łańcucha JSON przed serializowaniem lub pisaniem jakiegoś niestandardowego konwertera/odkażania? Jeśli tak, nie jestem w 100% pewien, jak najlepiej to podejść.czyszczenie JSON dla XSS przed deserializacją
Poniżej znajduje się przykład JSON, który ma niebezpieczny skrypt wstrzyknięty i wymaga "czyszczenia". Chcę chcieć to zarządzać, zanim odserializuję to. Ale musimy wziąć pod uwagę wszystkie rodzaje scenariuszy XSS, w tym kodowany skrypt BASE64 itp., Dlatego problem jest bardziej złożony niż zastąpienie prostego ciągu REGEX.
{ "MyVar" : "hello<script>bad script code</script>world" }
Oto migawki z moich Deserializatora (JSON -> Object):
public T Deserialize<T>(string json)
{
T obj;
var JSON = cleanJSON(json); //OPTION 1 sanitize here
var customConverter = new JSONSanitizer();// OPTION 2 create a custom converter
obj = JsonConvert.DeserializeObject<T>(json, customConverter);
return obj;
}
JSON jest wysyłany z 3 interfejs partia UI, więc jest to dość widoczna, stąd walidacji po stronie serwera. Stamtąd staje się serializowany do wszystkich rodzajów obiektów i jest zwykle przechowywany w DB, później do pobrania i wyprowadzenia bezpośrednio w interfejsie opartym na HTML, więc wtrysk skryptu musi zostać złagodzony.
Zaktualizowałem moje pytanie, aby rozwiązać problem "oczyścić". – MarzSocks
To zależy od kontekstu. Czy możesz podać trochę szczegółów dotyczących sposobu wyświetlania danych? Czy będzie zawierał dane URL? Czy zostanie umieszczony bezpośrednio w kodzie HTML? Czy będzie dostępny tylko z javascript? czy to jest atrybut HTML? Zapobieganie XSS naprawdę zależy od kontekstu. – Gray
JSON jest publikowany z interfejsu użytkownika innej firmy, więc jest dość wyeksponowany, a zatem po walidacji po stronie serwera. Stamtąd jest serializowany do wszystkich rodzajów obiektów i zwykle przechowywany w DB, później do pobrania i wyprowadzenia bezpośrednio w interfejsie opartym na HTML, więc tagi skryptów muszą być kontrolowane. Idealnie chcesz go wyczyścić, zanim jeszcze wejdzie w warstwę logiczną aplikacji, a serializator jest jedynym miejscem, w którym można je wszystkie rządzić. :-) – MarzSocks