Как защитить от инъекций при использовании KnockoutJS?

Наша компания планировала использовать Knockoutjs, но я нашел эту ссылку, обсуждая проблемы безопасности в KnockoutJS. Они говорят, что люди могут легко вводить вредоносный код в атрибут привязки данных.

Например:

<script src="http://knockoutjs.com/downloads/knockout-2.3.0.js"></script>
<div data-bind="x:alert(1)" />
<script> 
    ko.applyBindings();
</script>

У меня нет очень хорошего понимания об атаках XSS, и я не знаю, сколько способов люди могут вводить вредоносный код на веб-сайт.

  • Может ли кто-нибудь сказать мне, когда страница будет отображаться на клиентском ПК, а затем, как люди могут ввести этот <div data-bind="x:alert(1)" /> только для того, чтобы заставить его работать? Может ли кто-нибудь сказать мне, как хакеры могут вводить это на страницу, открытую в браузере?

  • Может ли кто-нибудь сказать мне, какие другие проблемы безопасности существуют для knockoutjs?

Если это не очень безопасно, я не буду использовать его.

Я также получил ссылки, немного обсуждая, как лучше защитить нокауты:

Кто-нибудь знает, как получить полностью защищенные нокауты? Потому что я видел учебник для KnockoutJS и чувствовал, что кривая обучения невелика.

Ответ 1

"Защита нокаута" - это не то, как вы предотвращаете XSS.

Вы должны управлять своим XSS-экспонатом в первую очередь, независимо от того, как вы привязываете данные к элементам вашего приложения и которые начинаются с защиты вашей страницы, которая в первую очередь привязана к нокауту:

  • Подтвердите ввод, который повлияет на возврат этой конкретной веб-страницы Элемент списка

  • Не разрешать пользователям выводить html-выход, предоставляемый пользователями без сначала дезинфицируя его

  • Не позволяйте не доверенным третьим сторонам доставлять script ссылки или ссылки с третьих сторон, которые вы не доверие.

Полный список способов предотвращения XSS находится здесь:

https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

Вы заметите, что "не использовать нокаут" не входит ни в один из этих списков, и что большинство проблем связаны с управлением пользовательским вводом и тем, как оно заканчивается в коде script. То же самое можно сказать и о том, как пользовательский ввод заканчивается в вашей привязке к нокауту.

Управление вашей нокаут-экспозицией с помощью защищенного механизма привязки, с которым вы связаны выше, уменьшит вашу потенциальную площадь атаки.

Но если у вас есть вредоносная часть html, возвращенная вашим сервером или связанная на вашей странице, независимо от того, есть ли у вас нокаут или нет, у вас проблема с XSS.