Was macht convex-security-audit?
Tiefgehende Sicherheitsüberprüfungsmuster für Autorisierungslogik, Datenzugriffsgrenzen, Aktionsisolierung, Ratenbegrenzung und Schutz sensibler Operationen
Übersicht
Diese Skill bietet eine umfassende Sammlung von Sicherheitsprüfungsmustern für Convex-Projekte. Sie hilft Entwicklern und Sicherheitsexperten dabei, häufige Angriffspunkte zu identifizieren und zu beheben, indem sie bewährte Verfahren für die wichtigsten Sicherheitsaspekte bereitstellt.
Überprüfungsbereiche
Autorisierungslogik
- Überprüfung von
ctx.auth-Aufrufen in Queries, Mutations und Actions - Sicherstellung korrekter Benutzeridentifikation und Rollenüberprüfung
- Validierung von Berechtigungsprüfungen in allen geschützten Funktionen
Datenzugriffsgrenzen
- Analyse von Datenbankabfragen auf unbeabsichtigte Datenlecks
- Sicherstellung, dass Abfragen nur Daten innerhalb des Benutzerkontexts zurückgeben
- Prüfung von Index- und Filterbedingungen auf Sicherheitslücken
Aktionsisolierung
- Überprüfung von Actions auf Nebeneffekte und deren Kontrolle
- Sicherstellung, dass Actions keine sensiblen Operationen ohne Autorisierung ausführen
- Validierung der Isolierung von schreibenden und lesenden Operationen
Ratenbegrenzung
- Implementierung von Ratenbegrenzungsmustern für öffentliche Endpunkte
- Schutz vor Brute-Force-Angriffen und übermäßigen API-Aufrufen
- Konfiguration von Limits basierend auf Benutzerrollen und Aktionstypen
Schutz sensibler Operationen
- Identifizierung und Absicherung von Operationen mit sensiblen Daten (z. B. Zahlungen, persönliche Informationen)
- Implementierung zusätzlicher Sicherheitsebenen wie Zwei-Faktor-Authentifizierung
- Überprüfung der Protokollierungs- und Überwachungsmechanismen
Verwendung
Fügen Sie diese Skill zu Ihrem convex.json oder Ihrer Konfigurationsdatei hinzu, um die Sicherheitsprüfungen in Ihren CI/CD-Pipeline zu integrieren. Beispiel:
{
"skills": {
"waynesutton/convex-security-audit": {
"version": "latest"
}
}
}
Beispielprüfungen
1. Autorisierung in einer Mutation
export const deleteUser = mutation({
args: { userId: v.id("users") },
handler: async (ctx, args) => {
const identity = await ctx.auth.getUserIdentity();
if (identity === null) {
throw new Error("Nicht authentifiziert");
}
// Nur der Benutzer selbst oder ein Admin darf löschen
if (identity.subject !== args.userId && identity.role !== "admin") {
throw new Error("Nicht autorisiert");
}
await ctx.db.delete(args.userId);
},
});
2. Datenzugriffsgrenze in einer Query
export const getUserProfile = query({
args: { userId: v.id("users") },
handler: async (ctx, args) => {
const identity = await ctx.auth.getUserIdentity();
// Nur der Benutzer selbst darf sein Profil sehen
if (identity?.subject !== args.userId) {
throw new Error("Zugriff verweigert");
}
return await ctx.db.get(args.userId);
},
});
Fazit
Durch die Anwendung dieser Sicherheitsüberprüfungsmuster können Sie die Sicherheit Ihrer Convex-Anwendung erheblich verbessern und häufige Schwachstellen vermeiden. Integrieren Sie diese Prüfungen in Ihren Entwicklungsprozess, um Sicherheitslücken frühzeitig zu erkennen und zu beheben.