Фреймворк Marko предоставляет современную платформу для построения реактивных веб-приложений на JavaScript. Особое внимание уделяется не только производительности и удобству разработки, но и безопасности, в частности защите конфиденциальной информации пользователей.
Marko поддерживает изолированное выполнение шаблонов. Это позволяет четко разделять данные, передаваемые сервером, и данные, доступные на клиенте. Передача конфиденциальной информации на клиент должна быть минимальной и строго контролируемой.
input объекты:
Марко-шаблоны получают данные через объект input.
Критически важно, чтобы чувствительные данные не
включались в input, который будет сериализован и отправлен
в браузер.// Пример безопасного подхода
app.get('/profile', async (req, res) => {
const userData = await getUserData(req.user.id); // Конфиденциальные данные
const safeData = { username: userData.username }; // Только безопасные поля
res.marko(template, { input: safeData });
});
Marko автоматически экранирует HTML-содержимое, что снижает риск межсайтовых скриптовых атак (XSS). Однако для вставки динамического HTML важно использовать специальные методы:
dangerouslySetInnerHTML требует осознанного подхода и
проверки содержимого.<div>
${data.username} <!-- безопасно экранируется -->
</div>
Для передачи конфиденциальной информации между клиентом и сервером применяются JWT-токены, сессионные идентификаторы или другие формы шифрования. Marko совместим с любыми стандартными библиотеками Node.js для этих целей.
import jwt from 'jsonwebtoken';
const token = jwt.sign({ userId: user.id }, process.env.SECRET_KEY, { expiresIn: '1h' });
res.cookie('auth', token, { httpOnly: true, secure: true });
Marko не предоставляет встроенного механизма аутентификации, но тесно интегрируется с Express, Koa и другими серверами Node.js. Основные принципы:
app.get('/admin', checkAdmin, (req, res) => {
res.marko(adminTemplate, { input: adminSafeData });
});
Все действия, связанные с конфиденциальными данными, должны быть логированы на сервере. Это позволяет выявлять попытки несанкционированного доступа или утечки данных.
state и props для
передачи только необходимых данных на клиент.<user-profile input={username: user.username} /> <!-- только безопасные данные -->
Эти методы позволяют строить на Marko приложения, которые безопасно работают с пользовательскими данными, соблюдая современные стандарты защиты конфиденциальной информации.