v3.1.0Secure by Default

Sicherheit in VelinScript

Sicherheit ist kein Feature, sondern eine Notwendigkeit. VelinScript verfolgt den Ansatz "Secure by Default" - unsichere Muster kompilieren oft gar nicht erst oder werden durch die Standardeinstellungen verhindert.

1. Authentifizierung & Autorisierung

VelinScript integriert Authentifizierung direkt in das Web-Framework, um sicherzustellen, dass Sicherheitslogik nicht vergessen wird.

Authentifizierung mit @Auth

Der einfachste Weg, einen Endpunkt zu schützen. VelinScript validiert Tokens automatisch.

@Controller("/api/profile")
struct ProfileController {

    // Nur für eingeloggte Benutzer erreichbar
    @Auth
    @GET("/")
    fn getProfile(user: User): User {
        return user; // 'user' wird automatisch injiziert
    }
}
RBAC (Rollenbasiert)
@Auth
@Role("admin")
@GET("/users")
fn listUsers(): List<User> { ... }
ABAC (Attributbasiert)
@Authorize(|user, req| {
    let doc = db.find(Doc, req.params.id);
    return doc.ownerId == user.id;
})

Manuelle Token-Verwaltung

@POST("/login")
fn login(creds: LoginDto): LoginResponse {
    let user = db.find(User, { email: creds.email });
    
    if (!user || !security.verifyPassword(creds.password, user.passwordHash)) {
        throw HttpError.Unauthorized("Falsche Zugangsdaten");
    }
    
    let auth = AuthService.new();
    let accessToken = auth.createToken({ sub: user.id, roles: user.roles });
    
    return LoginResponse { accessToken, refreshToken: auth.createRefreshToken(user.id) };
}

2. Schutz vor Angriffen

Rate Limiting

// Maximal 5 Login-Versuche pro Minute pro IP
@RateLimit(limit: 5, window: "1m")
@POST("/login")
fn login(...) { ... }

// Manuelles Throttling in der Logik
utils.throttle("sms_" + phone, "30s", || {
    smsGateway.send(phone, "Code: 1234");
});

SQL Injection Prävention

// SICHER: Parameter werden automatisch escaped
db.findMany(User, { name: userInput });

// SICHER: Auch bei Raw Queries durch Parameter-Binding
db.execute("SELECT * FROM users WHERE name = ?", [userInput]);

3. Verschlüsselung und Hashing

Argon2id Hashing

Standard für Passwörter (GPU-resistent).

let hash = security.hashPassword(pwd);
let isValid = security.verifyPassword(input, hash);

AES-256-GCM

Verschlüsselung für sensible Daten.

let enc = crypto.encrypt(data, key);
let plain = crypto.decrypt(enc, key);

4. AI-Code-Sicherheit

NEU v3.0.1

VelinScript führt umfassende Sicherheitsmaßnahmen für AI-generierten Code ein, um die Integrität Ihres Systems zu gewährleisten.

Prompt Sanitization
Verhindert Prompt-Injection ("Ignore previous instructions") durch automatische Validierung aller LLM-Inputs.
AI-Sandbox
AI-Code läuft in einer isolierten Sandbox. Kein Zugriff auf Filesystem, Systembefehle oder Netzwerk.
AI-Code-Review
Automatischer Review auf Syntax, Typen, Komplexität und gefährliche Patterns vor der Integration.

Aktivierung via CLI

velin compile --input app.velin \
  --ai-codegen \
  --ai-code-review \
  --ai-sandbox \
  --ai-provider openai

5. Sicherheitsscanner (SAST)

Der integrierte Scanner analysiert Ihren Quellcode auf bekannte Sicherheitsmuster, *bevor* Sie deployen.

# Gesamtes Projekt scannen
velin scan

# Ausgabebeispiel:
[CRITICAL] Hardcoded Secret found in src/config.velin:12
    let apiKey = "sk-1234567890abcdef";
    -> Use config.get("API_KEY") instead.
Hardcoded Secrets
Findet API-Keys & Passwörter
ReDoS Schutz
Erkennt gefährliche Regex-Patterns
Fehlende Auth
Warnt vor ungeschützten Routen
Veraltete Libs
Prüft auf bekannte CVEs