# Создание непривилегированного пользователя для службы Node.js
adduser --disabled-login nodejsUser
FROM node:18-alpine
RUN addgroup adx && adduser -S -G adx adx
WORKDIR /usr/src/app/backend
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
USER adx
EXPOSE 5000
CMD ["npm", "start"]
# Обновление пакетов и устранение уязвимостей
npm update && npm audit fix
# Установка интерфейса командной строки Snyk и сканирование проекта
npm install -g snyk
snyk auth
snyk test
const express = require('express');
const session = require('express-session')
app.use(session({
// задаем для куков сеанса пользовательское название
name: 'siteSessionId',
// надежный секретный ключ для шифрования сеанса
secret: 'complex_secret_key',
// Дополнительные настройки сеанса...
}));
const helmet = require('helmet');
app.use(helmet({
// Здесь пользовательская конфигурация Helmet
}));
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 минут
max: 100, // Ограничиваем каждый IP-адрес до 100 запросов на windowMs
});
app.use(limiter);
const bcrypt = require('bcrypt');
const saltRounds = 10;
// Хэширование пароля
bcrypt.hash('userPassword', saltRounds, function(err, hash) {
// Сохраняем хэш в базе данных паролей.
});
app.use((err, req, res, next) => {
res.status(500).json({ error: "Internal Server Error" });
});
const apmTool = require('apm-tool-of-choice');
apmTool.start({
// Параметры конфигурации
});
app.use((req, res, next) => {
if (!req.secure) {
return res.redirect(`https://${req.headers.host}${req.url}`);
}
next();
});
const { body, validationResult } = require('express-validator');
app.post('/register', [
body('email').isEmail(),
body('password').isLength({ min: 5 })
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// Реализовываем логику регистрации
});
npm install eslint eslint-plugin-security --save-dev
{
"extends": ["eslint:recommended", "plugin:security/recommended"],
"plugins": ["security"]
}
npx eslint .