Skip to content

Commit 21798c7

Browse files
fix: sanitize user input and add lean() to fix community skill filter
1 parent 00f525c commit 21798c7

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

src/controllers/communityController.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ const FormResponse = require('../models/hgnFormResponse');
33
const communityMemberController = function () {
44
const getCommunityMembers = async function (req, res) {
55
try {
6-
const query = {};
7-
const { search, skills, sortOrder = 'asc' } = req.query;
6+
const { search, skills } = req.query;
7+
8+
// Validate sortOrder against an allowlist to prevent injection
9+
const sortOrder = req.query.sortOrder === 'desc' ? 'desc' : 'asc';
810

11+
const query = {};
912
if (search) {
10-
query['userInfo.name'] = { $regex: search, $options: 'i' };
13+
// Escape regex special characters to prevent ReDoS
14+
const escapedSearch = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
15+
query['userInfo.name'] = { $regex: escapedSearch, $options: 'i' };
1116
}
1217

1318
// Use .lean() to get plain JS objects so Object.entries() works correctly on subdocuments
@@ -34,7 +39,6 @@ const communityMemberController = function () {
3439

3540
const structuredMembers = formResponses.map((member) => {
3641
const { userInfo, frontend, backend, general } = member;
37-
3842
return {
3943
_id: member._id,
4044
name: userInfo?.name || 'N/A',

0 commit comments

Comments
 (0)