Angularjs + предотвращение межсайтовых скриптингов

Является ли Angularjs заботой об атаке XSS. Я прочитал, что ng-bind заботится. Но когда я пытаюсь выполнить образец, чтобы проверить это, он позволяет мне вставлять теги html в тип ввода с помощью ng-model... он не избегал тегов Html.

У меня есть много элементов ввода на нашей странице, которые связывают с ng-model, что я должен сделать, чтобы убедиться, что я вводил теги html, angular игнорирует теги html/scrip.

ех.

<input id="name" ng-model="name"></input>

если я вводим

'Hello, <b>World</b>!'

$scope.name содержит то же самое, что я ввел, не исключал теги. то есть

  var val = $scope.name;
  console.log(val); 

печатает как таковой

'Hello, <b>World</b>!'

Пожалуйста, дайте мне знать, как решить это в angularjs.

благодарственное

Ответы

Ответ 1

Посмотрите здесь: http://docs.angularjs.org/api/ngSanitize/service/$sanitize

Если вы хотите использовать escape ng-bind, он будет отображать тег без интерпретации следующим образом:

Hello <b>World</b> не нравится Hello World!

Вы понимаете? поэтому ng-bind безопасен, потому что он не заботится о тегах HTML.

Если вы хотите, чтобы ваши HTML-теги были интерпретированы, но безопасно просто используйте ng-bind-html!

Например, если вы хотите отобразить эту строку:

'Hello <b>World</b><input type="text" />'

Результат будет: Hello World, но без ввода, потому что компилятор AngularJS использует службу $sanitize и проверяет белый список элементов HTML, а iput не разрешен.

Возможно, ng-bind-html - это то, что вы ищете.

Если вы просто хотите быть уверенным, что пользователь не может помещать теги html в ваш ввод, просто используйте директиву ng-pattern на ваших входах!

http://docs.angularjs.org/api/ng/directive/input

Требуется регулярное выражение для допустимых символов на вашем входе!

Надеюсь, это поможет!

Ответ 2

Я не верю, что AngularJS имеет стандартную проверку входных данных по умолчанию, что и является вашим тестовым упражнением. Таким образом, пользователь может в значительной степени вводить все, что им нравится. Это неудивительно: "белые списки" очень специфичны для домена, а Angular - это инфраструктура, предназначенная для широкого диапазона доменов.

Основной защитой от XSS является правильная кодировка всех ненадежных данных (см. https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_(XSS)). Это, Angular делает по умолчанию.

Нижняя строка заключается в том, что AngularJS предназначен для защиты от XSS по умолчанию, никаких специальных действий не требуется. Вы можете проверить некоторые основные сценарии, пытаясь вывести то, что вы вводите в представление, используя стандартную нотацию {{scopevariable}}.

Я нашел подробный анализ уязвимости AngularJS XSS: https://code.google.com/p/mustache-security/wiki/AngularJS. В конце комментариев есть ссылка на документ google с дальнейшим обсуждением и ответом команды Angular.