Rewrite database access for exercises

This commit is contained in:
2024-11-13 13:56:44 +01:00
parent 24f44e73f4
commit 0911cdbe5c
2 changed files with 56 additions and 54 deletions

View File

@@ -23,10 +23,33 @@
} }
] ]
}, },
{
"nameDe": "Broken Access Control",
"nameEn": "Broken Access Control",
"groupNr": 1,
"exercises": [
{
"nameDe": "Hilfe-Seite aufrufen",
"nameEn": "Access Help Page",
"exerciseNr": 1,
"descriptionDe": "Manipuliere die URL so, dass du die Hilfe-Seite erreichen kannst",
"descriptionEn": "Manipulate the URL and access the help page",
"solved": false
},
{
"nameDe": "Das ausgebuchte Konzert buchen",
"nameEn": "Book the unavailable concert",
"exerciseNr": 2,
"descriptionDe": "Manipuliere die URL so, dass du das ausgebuchte Konzert aufrufen kannst und buche ein Ticket dafür",
"descriptionEn": "Manipulate the URL and access the sold out concert and buy a ticket",
"solved": false
}
]
},
{ {
"nameDe": "SQL Injections", "nameDe": "SQL Injections",
"nameEn": "SQL Injections", "nameEn": "SQL Injections",
"groupNr": 1, "groupNr": 2,
"exercises": [ "exercises": [
{ {
"nameDe": "Accountnamen auslesen", "nameDe": "Accountnamen auslesen",
@@ -54,29 +77,6 @@
} }
] ]
}, },
{
"nameDe": "Broken Access Control",
"nameEn": "Broken Access Control",
"groupNr": 2,
"exercises": [
{
"nameDe": "Admin-Panel aufrufen",
"nameEn": "Access Admin Panel",
"exerciseNr": 1,
"descriptionDe": "Manipuliere die URL so, dass du das Admin-Panel erreichen kannst",
"descriptionEn": "Manipulate the URL and access the admin panel",
"solved": false
},
{
"nameDe": "Das versteckte Konzert buchen",
"nameEn": "Book the hidden concert",
"exerciseNr": 2,
"descriptionDe": "Manipuliere die URL so, dass du das ausgebuchte Konzert aufrufen kannst und buche ein Ticket dafür",
"descriptionEn": "Manipulate the URL and access the sold out concert and buy a ticket",
"solved": false
}
]
},
{ {
"nameDe": "Cross-Site Scripting (XSS)", "nameDe": "Cross-Site Scripting (XSS)",
"nameEn": "Cross-Site Scripting (XSS)", "nameEn": "Cross-Site Scripting (XSS)",

View File

@@ -5,6 +5,7 @@ import { Address } from "../models/user/address.model";
import { Payment } from "../models/user/payment.model"; import { Payment } from "../models/user/payment.model";
import { AccountRole } from "../models/user/accountRole.model"; import { AccountRole } from "../models/user/accountRole.model";
import { Exercise } from "../models/exercises/exercise.model"; import { Exercise } from "../models/exercises/exercise.model";
import { sequelize } from "../database";
export const account = Router() export const account = Router()
@@ -18,37 +19,38 @@ account.get("/", (req: Request, res: Response) => {
}) })
// Login user // Login user
account.post("/login", (req: Request, res: Response) => { account.post("/login", async (req: Request, res: Response) => {
Account.findOne({ // Using raw SQL code for SQL injections!
where: { username: req.body.username }, // todo: Inner join
include: [ Address, Payment, AccountRole ], const [results, metadata] =
attributes: { await sequelize.query(
exclude: [ "SELECT * FROM Accounts " +
"accountRoleId" "INNER JOIN Addresses ON Accounts.id=Addresses.accountId " +
] "WHERE (username='" + req.body.username +
} "' AND password='" + req.body.password + "')")
})
.then(account => { // Mechanism to check exercise solved
if (account != null) { if (results.length > 1) {
if (account.dataValues.password == req.body.password) { Exercise.update(
// Status: 200 OK { solved: true },
res.status(200).json(account) {
} else { where: {
// Status: 401 Unauthorized nameEn: "Register"
res.status(401).json({ }
code: 401,
message: "Unauthorized"
})
} }
} else { )
// Status: 400 Bad request }
res.status(400).json({
code: 400, if (results.length != 0) {
message: "Bad Request" // Status: 200 OK
}) res.status(200).json(results[0])
} } else {
} // Status: 401 Unauthorized
) res.status(401).json({
code: 401,
message: "Unauthorized"
})
}
}) })
// Creating a new user // Creating a new user