Vue.js
Create and build Vue.js project
Структура проекта
assets - любые ассеты, импортируемые в компоненты components - все компоненты, за исключением главного view mixins - часть js кода, используемого в нескольких компонентах router - все пути в приложении: н-р, /dashboard, /search store (optional) - translations (optional) - локаль utils (optional) views -
Security
CSTI / SSTI
В приложениях Vue.js присутствует возможность использовать шаблоны, как и в Angular, через {{}}
. Больше об эксплуатации CSTI, полезных нагрузках и обходе WAF и фильтров, используя особенности Vue.js можно прочесть в блоге PortSwigger.
Пример data binding'а:
По умолчанию этот механизм защищен (автоматически кодируются данные), но в случае CSTI или отключения кодирования (через атрибут v-html
) получаем XSS. Соотв, через этот атрибут мы можем попытаться выкрутить html injection в xss.
Использование Render Functions
Render Function:
Render function with JSX:
Injecting URLs
В качестве Mitigation поможет sanitize-url. Но санитизация должна проходитить на стороне сервера.
Никогда не используем непроверенные данные в templates
Injecting Styles
Небезопасно давать возможность инжектиться в userProvidedStyles, тк это все равно, что такой код:
Правильно давать доступ только к отдельным полям:
Injecting JavaScript
Все элементы <script> не будут отрендерены Vue.js, но надо быть внимательными при инжекте параметров в функции onclick, onfocus, onmouseenter, ... Инжект в эти атрибуты несет потенциальный риск, и этого стоит избегать.
Server-Side Rendering (SSR)
По умолчанию Vue.js рендерит все в браузере, но есть возможность производить рендеринг форм на стороне сервера.
Ключевые слова для поиска по коду:
Существуют верхнеуровневые решения для SSR: Nuxt, Quasar, Vite SSR.
Last updated