Marko — это современный фреймворк для построения веб-приложений с высокими требованиями к производительности. Несмотря на удобство и скорость разработки, безопасность приложений остаётся критическим аспектом, который необходимо учитывать на всех этапах работы. Уязвимости могут возникать как на стороне клиента, так и на стороне сервера, поэтому важно понимать механизмы защиты, встроенные в Marko, и практики безопасного программирования.
Одной из наиболее распространённых угроз веб-приложений является межсайтовый скриптинг (XSS). В Marko вывод переменных в шаблоны осуществляется с автоматическим экранированием HTML. Это значит, что:
<div>${userInput}</div>
значение переменной userInput будет безопасно
преобразовано, и любые теги или скрипты не будут выполнены в
браузере.
Важно помнить:
${}.raw или unsafeHTML снимает
защиту, поэтому данные должны быть строго проверены и очищены перед
вставкой:<div>${unsafeHTML(safeContent)}</div>
где safeContent проходит проверку на допустимые
HTML-теги.
Cross-Site Request Forgery (CSRF) представляет собой подделку запросов от доверенного пользователя. Для защиты в Marko-приложениях, построенных на Node.js и Express, рекомендуется использовать middleware, генерирующее токены:
const csurf = require('csurf');
app.use(csurf());
В шаблонах Marko токен вставляется в форму:
<form method="POST">
<input type="hidden" name="_csrf" value="${csrfToken}">
...
</form>
При каждом POST-запросе сервер проверяет токен, что предотвращает несанкционированные действия.
Любые данные, получаемые от пользователей, должны проходить валидацию и санитайзинг. Это касается как форм, так и API-запросов. В Marko, совместно с Node.js, применяются следующие практики:
Joi или Yup для
строгой схемной валидации данных.validator.js,
особенно для ввода, который будет отображаться на страницах.multer) для предотвращения атак через файловую
систему.Фреймворк Marko не навязывает собственную систему аутентификации, но
совместим с популярными библиотеками для Node.js, такими как
Passport.js. Безопасная реализация включает:
Пример middleware для проверки авторизации:
function isAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.status(401).send('Unauthorized');
}
При работе с Marko важно учитывать правильное хранение и отображение чувствительных данных:
CSP — мощный инструмент для защиты от XSS и атак на клиентской стороне. В Marko-приложении можно настроить CSP через заголовки HTTP:
app.use((req, res, next) => {
res.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self'");
next();
});
Это ограничивает источники скриптов, стилей и медиа, что снижает риск выполнения вредоносного кода.
Безопасность также зависит от того, как приложение реагирует на ошибки:
При интеграции с внешними сервисами:
Эти принципы формируют надёжный фундамент для построения безопасных приложений на Marko, минимизируя риски уязвимостей и атак.