Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
bf1c95d
Insert image in planeringsfasen.md
karinisaksson May 27, 2026
cc0ab50
Säkerhetsrisker och krav tillagda
karinisaksson May 27, 2026
1bf2ba2
La till en som jag missat
karinisaksson May 28, 2026
b5fa02b
La till en som jag missat
karinisaksson May 28, 2026
ff8bea8
kommentarer till säkerhetskrav 3, 4 och 10
karinisaksson Jun 2, 2026
81eebbe
lösenordshashning
karinisaksson Jun 2, 2026
1591003
implementerat ändringar för krav 3
karinisaksson Jun 2, 2026
3269b3a
säkerhetskrav 3 och 4 implementerade
karinisaksson Jun 2, 2026
7ec0317
säkerhetskrav 10
karinisaksson Jun 2, 2026
4954700
fix säkerhetskrav 10
karinisaksson Jun 2, 2026
f41cfb2
säkerhetskrav 5
karinisaksson Jun 3, 2026
ed47d05
säkerhetskrav 9
karinisaksson Jun 3, 2026
9b025a6
ändrade till min egna databas
karinisaksson Jun 3, 2026
8a910e7
säkerhetskrav 3
karinisaksson Jun 5, 2026
bb1fb62
säklerhetskrav 1
karinisaksson Jun 5, 2026
88b4a59
uppdaterade säkerhetskrav 6
karinisaksson Jun 5, 2026
a877d91
la till console.log för att testa ägarskapskontroll
karinisaksson Jun 5, 2026
6f2c491
Förtydliganden
karinisaksson Jun 7, 2026
9212fde
småfix av stavningar
karinisaksson Jun 7, 2026
06a308e
tillägg av ej fixade krav i readme
karinisaksson Jun 7, 2026
b2e1478
sammanfattat gjorda ändringar i filen fas2
karinisaksson Jun 8, 2026
9bfae0d
fixade stavfel
karinisaksson Jun 8, 2026
63fe4e6
förtydligande
karinisaksson Jun 8, 2026
1d2815d
Merge branch 'main' of https://github.com/karinisaksson/yh-message-ap…
karinisaksson Jun 8, 2026
d0d463e
förtyligande krav 1
karinisaksson Jun 8, 2026
514593e
fas 3: åtgärdade sårbarheter med ratelimiter
karinisaksson Jun 9, 2026
104e2f0
fas 3: förtdligade generalLimiter
karinisaksson Jun 9, 2026
dedd1e7
fas 3: generalLimiter i rätt ordning
karinisaksson Jun 9, 2026
8533755
fas 3: CORS-config
karinisaksson Jun 9, 2026
d10ec93
fas 3: generallimiter på alla endpoints
karinisaksson Jun 9, 2026
b04b508
Bump jsonwebtoken from 8.5.1 to 9.0.0 in /backend
dependabot[bot] Jun 9, 2026
1c2a83e
Merge pull request #1 from karinisaksson/dependabot/npm_and_yarn/back…
karinisaksson Jun 9, 2026
a6e2d1a
fas 3: uppdaterade bcrypt till v6 to för att ta bort tar-dependency
karinisaksson Jun 9, 2026
24a87af
Uppgraderade Vite för att fixa dependabot security alarms
karinisaksson Jun 10, 2026
2466c96
Run npm audit fix to resolve qs vulnerability
karinisaksson Jun 10, 2026
918b478
Specificerade JWT-algoritmen
karinisaksson Jun 11, 2026
38b4234
granskningsfasen
karinisaksson Jun 11, 2026
28a69e7
granskningsfasen
karinisaksson Jun 11, 2026
438d637
granskningsfasen
karinisaksson Jun 11, 2026
46466f8
granskningsfasen
karinisaksson Jun 11, 2026
bea045f
granskningsfasen
karinisaksson Jun 11, 2026
f619bb5
slutsats
karinisaksson Jun 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
# yh-message-app-fullstack
# yh-message-app-fullstack
Lagt till en fil med sammanfattning över de ändringar och förslag jag gjort för att uppfylla säkerhetskraven. Se filen fas2.md
2 changes: 1 addition & 1 deletion backend/middleware/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export const authenticateUser = async (req, res, next) => {
return res.status(401).json({ success: false, message: "No token provided" })
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET)
const decoded = jwt.verify(token, process.env.JWT_SECRET, { algorithms: ["HS256"] }) //fas 3: Låser verifieringen till algoritmen HS256 så att tokens inte kan godkännas med "none"-algoritm eller annan algoritm.
const user = await User.findById(decoded.userId)
if (!user) {
return res.status(401).json({ success: false, message: "User not found" })
Expand Down
17 changes: 17 additions & 0 deletions backend/middleware/rateLimiter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import rateLimit from "express-rate-limit"

export const loginLimiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 5,
message: { success: false, message: "Too many login attempts, please try again after 15 minutes" }
})

// Säkerhetskrav 6. Här har jag lagt in en funktion loginLimiter som använder express-rate-limit för att begränsa antalet inloggningsförsök till 5 per 15 minuter. Sedan använder jag loginLimiter som middleware i server.js: app.post("/login") för att tillämpa denna begränsning på inloggningsförsöken.


// fas 3: Efter att ha använt CodeQL och hittat sårbarheter la jag till ytterligare en limiter för att använda på övriga endpoints som gör databasanrop. Annars kan en angripare skicka tusentals requests per sekund och överlasta databas/server. Satte ett högre tak än loginLimiter eftersom 5 anrop på 15 minuter skulle göra appen oanvändbar på tex /messages GET/POST/PATCH/DELETE.
export const generalLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minuter
max: 100, // 100 requests per 15 min per IP
message: { success: false, message: "Too many requests, please try again later" }
})
7 changes: 5 additions & 2 deletions backend/models/Message.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import mongoose from "mongoose"

// Här stoppas att databasen sparar inlägg som är för korta eller för långa. Del av säkerhetskrav 10.
const messageSchema = new mongoose.Schema({
message: {
type: String,
required: true
required: true,
minlength: 3,
maxlength: 140
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
},
createdAt: {
createdAt: {
type: Date,
default: Date.now,
},
Expand Down
Loading