원클릭으로
security
Security patterns for droneroute — JWT auth guards, input validation, SQL injection prevention, and environment variable safety.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Security patterns for droneroute — JWT auth guards, input validation, SQL injection prevention, and environment variable safety.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
PR-based development workflow for droneroute. Use when implementing features, fixing bugs, or making any code changes. Covers branch creation, CI checks, changelog entries, and PR creation.
WCAG 2.1 AA accessibility patterns for droneroute — color contrast, ARIA, keyboard navigation, Leaflet map a11y, and Radix UI component checklist.
Playwright testing patterns for droneroute. Covers screenshot automation, test structure, and CI integration.
GitHub Issues tracking workflow for droneroute. Use when managing tasks, features, and bugs.
Before/after screenshot workflow for UI PRs. Covers capture techniques, annotation, and embedding in PRs and changelogs.
| name | security |
| description | Security patterns for droneroute — JWT auth guards, input validation, SQL injection prevention, and environment variable safety. |
Guide secure coding patterns for the droneroute Express backend, covering authentication checks, authorization, input validation, error handling, and environment variable safety.
// Middleware validates JWT and attaches user to req
// Route handler uses req.user.id for all DB queries
router.get("/missions", authMiddleware, async (req, res) => {
const missions = db.getMissionsByUser(req.user.id);
res.json(missions);
});
req.user.role === 'admin' in addition to JWT validationNever expose raw errors, stack traces, or internal paths to the client.
// BAD
res.status(500).json({ error: err.message, stack: err.stack });
// GOOD
console.error("Mission creation failed:", err);
res.status(500).json({ error: "Failed to create mission" });
.env files — they are in .gitignore/app/data/ mount in Docker* in productionThe backend uses better-sqlite3 with parameterized queries. Never use string concatenation for SQL queries.
// GOOD — parameterized
db.prepare("SELECT * FROM missions WHERE user_id = ?").all(userId);
// BAD — string concatenation
db.prepare(`SELECT * FROM missions WHERE user_id = '${userId}'`).all();