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.