redos prevention

This commit is contained in:
Michael C
2021-06-25 15:57:41 -04:00
parent f2490beea2
commit b06a6fbb51
3 changed files with 128 additions and 22 deletions

View File

@@ -12,15 +12,17 @@ export async function getUserID(req: Request, res: Response) {
}
// escape [_ % \] to avoid ReDOS
userName = userName.replace('\\', '\\\\')
.replace('_', '\\_')
.replace('%', '\\%')
userName = userName.replace(/\\/g, '\\\\')
.replace(/_/g, '\\_')
.replace(/%/g, '\\%');
// add wildcard to variable
userName = `%${userName}%`
userName = `%${userName}%`;
// LIMIT to reduce overhead
// ESCAPE to escape LIKE wildcards
try {
let rows = await db.prepare('all', `SELECT "userName", "userID" FROM "userNames"
WHERE "userName" LIKE ? LIMIT 10`, [userName]);
WHERE "userName" LIKE ? ESCAPE '\\' LIMIT 10`, [userName]);
if (rows.length === 0) {
res.sendStatus(404);
return;