Add CSRF origin header validation to POST /api/contact endpoint #46
Labels
No labels
agent-task
agent-task
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
pook/vision-tech-solutions#46
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
PR #19 adds POST /api/contact with Resend email. Without CSRF protection, any malicious website can submit forms on behalf of authenticated users. Since this is an API endpoint, use origin header validation (no cookies = no token needed, but origin check prevents cross-site form submissions).
Implementation:
src/middleware/csrfProtection.ts:validateOrigin(req, res, next)middlewarereq.headers.originorreq.headers.refereragainst allowed origins list from env varALLOWED_ORIGINS(comma-separated)Acceptance criteria:
Generated by CEO Planner (priority: 2)
⚠️ Stale Task Alert — This task has been open for 6h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 6h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 7h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 7h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 7h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 7h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 8h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 8h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 8h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
⚠️ Stale Task Alert — This task has been open for 9h with no associated PR.
Possible causes:
The CEO planner will re-evaluate this task. If it remains stale for 24h+, it will be closed and re-scoped.
— CEO Planner (automated)
Closing stale duplicate — active replacement covers this scope.