Skip to content

Commit 7c160e5

Browse files
committed
feat(security): Integrate helmet for enhanced security headers and update dependencies
1 parent 5b98e94 commit 7c160e5

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

server/app.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import express from "express";
22
import cors from "cors";
3+
import helmet from "helmet";
34
import authRoutes from "./routes/authRoutes.js";
45
import profileRoutes from "./routes/profileRoutes.js";
56
import challengeRoutes from "./routes/challengeRoutes.js";
@@ -22,6 +23,31 @@ const app = express();
2223

2324
app.use(cors({ origin: process.env.CLIENT_URL, credentials: true }));
2425

26+
// Security headers
27+
app.use(helmet({
28+
contentSecurityPolicy: {
29+
directives: {
30+
defaultSrc: ["'self'"],
31+
styleSrc: ["'self'", "'unsafe-inline'", "https://fonts.googleapis.com"],
32+
fontSrc: ["'self'", "https://fonts.gstatic.com"],
33+
imgSrc: ["'self'", "data:", "https:"],
34+
scriptSrc: ["'self'"],
35+
connectSrc: ["'self'", "https:"],
36+
frameSrc: ["'none'"],
37+
objectSrc: ["'none'"],
38+
upgradeInsecureRequests: [],
39+
},
40+
},
41+
hsts: {
42+
maxAge: 31536000,
43+
includeSubDomains: true,
44+
preload: true
45+
},
46+
noSniff: true,
47+
xssFilter: true,
48+
referrerPolicy: { policy: "strict-origin-when-cross-origin" }
49+
}));
50+
2551
app.use(express.json({ limit: '2mb' }));
2652

2753
app.use(express.urlencoded({ limit: '2mb', extended: false }));

server/lib/dbIndexes.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import mongoose from "mongoose";
33
// Drop and recreate all performance indexes
44
export const createOptimalIndexes = async () => {
55
try {
6-
console.log('Setting up database indexes...');
6+
// console.log('Setting up database indexes...');
77

88
const usersCollection = mongoose.connection.db.collection('users');
99
const challengesCollection = mongoose.connection.db.collection('challenges');
@@ -37,7 +37,7 @@ export const createOptimalIndexes = async () => {
3737
await challengesCollection.createIndex({ title: 'text', category: 'text' }, { name: 'challenge_search_idx' });
3838
await challengesCollection.createIndex({ solvedUsers: 1 }, { sparse: true, name: 'solved_users_idx' });
3939

40-
console.log('Database indexes created successfully');
40+
// console.log('Database indexes created successfully');
4141

4242
} catch (error) {
4343
console.error('Error setting up database indexes:', error);

server/package-lock.json

Lines changed: 13 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"dotenv": "^16.4.7",
2929
"express": "^4.21.2",
3030
"express-session": "^1.18.1",
31+
"helmet": "^8.1.0",
3132
"jsonwebtoken": "^9.0.2",
3233
"moment-timezone": "^0.5.48",
3334
"mongoose": "^8.12.2",

0 commit comments

Comments
 (0)