2016-06-22 3 views
0

У меня есть бэкэнд .NET с интерфейсом AngularJS. Это все работает (без JavaScript не выполняется), когда пользователь вводит свое имя какДолжен ли я закодировать мой Json от backend до AngularJs?

<script>alert('xss');</script> 

Данные передаются как Json, к моему бэкэнд Unencoded, я сохранить текст, введенный в базу данных, и отправить текст , как Json, unencoded обратно во внешний интерфейс, когда данные считываются.

Все это работает, как сказано, но, просматривая курс безопасности, он посоветовал кодировать Json.

В моем случае, лучше ли кодировать моего Json?

Это часть Json при сохранении и загрузке:

,"aanvragernaam":"<script>alert('xss');</script>"," 
+0

Это javascript-инъекция.если вы не пишете документ ('document.write'), вы должны быть в порядке **, но ** я настоятельно рекомендую использовать JSON в любом случае. –

+0

Хорошо, я не указал, что это действительно ясно, я уже использую Json (я отредактировал вопрос, чтобы указать это) – Michel

+0

Вы можете дезинфицировать входные данные, прежде чем отправлять данные на сервер. –

ответ

1

До тех пор, пока вы настраиваете контент-тип на application/json, тогда this content type will not be sniffed by browsers, потому что он не «известен». Поэтому это должно быть защищено от XSS.

Нет необходимости дополнительно кодировать его.

JSON Hijacking является еще одной уязвимостью с запросами GET, однако это not an issue in modern browsers.

Единственный риск, который я вижу, это DOM XSS. Пока вы не записываете значение «как есть» в DOM, тогда нет риска XSS. Если да, то вы должны закодировать HTML или использовать JQuery или JavaScript для правильной установки text/textContent по мере необходимости, чтобы браузер не интерпретировал его как скрипт. Обратите внимание, что риск здесь не <script>alert('xss')</script>, он должен быть чем-то вроде <img src=x onload="alert('xss');" /> для его выполнения при динамическом добавлении в документ.

0

Я думаю, вы должны encodeURI (имя), прежде чем отправить запрос на задний конец, чтобы сохранить его имя в базе данных.

И вы будете использовать функцию decodeURI, когда вы получите данные с задней стороны.

+0

Что бы это решить? – Michel

1

Возможно, вы захотите выполнить проверку ввода и отклонить скобки, так как имена редко содержат их. Однако это не является достаточным контролем безопасности, как будто мы хотим поддерживать другие типы данных (например, комментарии), возможно, нам придется поддерживать эти символы, и поэтому наш контроль не работает.

Риск наличия HTML (тегов скриптов и т. Д.) В JSON заключается в том, что злоумышленник может каким-то образом обмануть пользователя при загрузке и отображать его как HTML в браузере. Это было довольно просто в < IE9, поскольку эти браузеры не знали, что такое приложение Content-Type/json. Таким образом, браузер попытается угадать (перефразировать) контент. Однако этот тип обнюхивания можно отключить, используя заголовок X-Content-Type-Options: nosniff.

Вы можете усилить защиту путем добавления

Content-Disposition: attachment;filename=data.json 
X-Download-Options: NoOpen 

Если пользователь пытается открыть JSON непосредственно в окне браузера, файл будет загружен вместо того, чтобы быть отображены.

ИМХО не требуется кодирование в JSON.