O.Source 1

Aus d.hack

Beschreibung

Die Anwendung MUSS Eingaben aus nicht vertrauenswürdigen Quellen vor deren Verwendung prüfen, um potenziell bösartige Werte vor der Verarbeitung herauszufiltern.

Kurzfassung

Prüfung von Eingaben vor Verwendung.

Anmerkungen

Prüftiefe


CHECK


Der Evaluator prüft, ob alle Eingaben aus nicht vertrauenswürdigen Quellen vor ihrer Verwendung dem Stand der Technik entsprechend geprüft werden. Eingaben meinen jegliche Art von Daten, die in die Anwendung hineinfließen. Das sind zum Beispiel Nutzereingaben, Eingaben aus Drittanbieterkomponenten etc.

Lösungsansätze

Implementierung

Input Validation

Whitelisting Validation
Whitelisting Validation ERLAUBT nur eine gewisse Palette an Eingaben, die der Applikation bereits bekannt sind.
# Definiere eine Funktion für die Whitelisting-Validierung
def validate_input(input_value):
    # Definiere eine Liste von erlaubten Zeichen
    whitelist = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')

    # Überprüfe, ob alle Zeichen in der Eingabe in der Whitelist enthalten sind
    for char in input_value:
        if char not in whitelist:
            return False
    
    # Rückgabe True, wenn die Eingabe den Validierungsregeln entspricht
    return True

# Beispielaufruf der Validierungsfunktion
input_value = "Hello123"
if validate_input(input_value):
    print("Eingabe gültig.")
else:
    print("Ungültige Eingabe.")
Blacklisting Validation
Blacklisting Validation besitzt eine Auswahl an Eingaben, die explizit VERBOTEN sind.
package main

import (
	"fmt"
	"strings"
)

// Funktion zur Überprüfung von Eingaben anhand einer Blacklist
func isBlacklisted(input string, blacklist []string) bool {
	for _, blacklistedWord := range blacklist {
		if strings.Contains(input, blacklistedWord) {
			return true
		}
	}
	return false
}

func main() {
	// Definiere eine Blacklist von verbotenen Wörtern oder Zeichenfolgen
	blacklist := []string{"spam", "malicious", "dangerous"}

	// Beispiel für eine Benutzereingabe
	userInput := "This is a spam message."

	// Überprüfe, ob die Benutzereingabe auf der Blacklist steht
	if isBlacklisted(userInput, blacklist) {
		fmt.Println("Die Eingabe enthält verbotene Wörter.")
	} else {
		fmt.Println("Die Eingabe ist in Ordnung.")
	}
}

Escape Untrusted Data

Escape Untrusted Data bezieht sich vor Allem auf den Schutz vor Cross-Site-Scripting (XSS). Hierbei ist es wichtig potenziell gefährliche Zeichen oder Symbole aus der Applikation zu entfernen oder zu maskieren. Dabei können eine Vielzahl an guten Frameworks oder Bibliotheken helfen:


Name Technologie
OWASP ESAPI (Enterprise Security API) Java & JavaScript
DOMPurify JavaScript
Helmet JavaScript
HTMLPurifier PHP
Content Security Policy (CSP) Security Header


Parameterized Queries

Parameterized Queries sollen SQL-Injections vorbeugen, indem sie die SQL-Queries parametrisieren und Abfragen dadurch nicht direkt in die Datenbank gesendet werden. In Java kann dazu beispielsweise PreparedStatements genutzt werden.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ParametrizedQueryExample {
    public static void main(String[] args) {
        // Verbindung zur Datenbank herstellen
        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password")) {
            // SQL-Abfrage mit Platzhaltern für Parameter
            String sql = "SELECT * FROM users WHERE username = ?";
            
            // Vorbereiten der parametrisierten Abfrage
            try (PreparedStatement statement = connection.prepareStatement(sql)) {
                // Wert für den Parameter setzen
                statement.setString(1, "john_doe");
                
                // Ausführen der Abfrage
                try (ResultSet resultSet = statement.executeQuery()) {
                    // Verarbeitung der Abfrageergebnisse
                    while (resultSet.next()) {
                        String username = resultSet.getString("username");
                        String email = resultSet.getString("email");
                        System.out.println("Username: " + username + ", Email: " + email);
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
Input Sanitization
Input Sanitization bezeichnet den Prozess der Bereinigung von Eingabedaten. Anders als die Validation zielt die Sanitization nicht darauf ab die Gültigkeit von Daten ab, sondern versucht die Sicherheit der Anwendung zu gewährleisten, indem potenziell gefährliche Eingaben neutralisiert werden.
// Funktion zur Validierung und Bereinigung einer E-Mail-Adresse
function validateAndSanitizeEmail(email) {
    // Validierung: Überprüfe, ob die E-Mail-Adresse ein gültiges Format hat
    if (!isValidEmailFormat(email)) {
        return null; // Ungültige E-Mail-Adresse, Rückgabe von null
    }

    // Sanitization: Bereinige die E-Mail-Adresse von potenziell schädlichen Zeichen
    var sanitizedEmail = sanitizeEmail(email);

    return sanitizedEmail;
}

// Funktion zur Überprüfung des E-Mail-Formats
function isValidEmailFormat(email) {
    // Einfache Überprüfung des E-Mail-Formats mit einem regulären Ausdruck
    var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailRegex.test(email);
}

// Funktion zur Bereinigung einer E-Mail-Adresse von potenziell schädlichen Zeichen
function sanitizeEmail(email) {
    // Verwendung von JavaScript's replace()-Funktion mit einem regulären Ausdruck,
    // um potenziell schädliche Zeichen zu entfernen
    var sanitizedEmail = email.replace(/[^\w\s@.-]/g, '');
    return sanitizedEmail;
}

// Beispielaufruf der Validierungs- und Bereinigungsfunktion für eine E-Mail-Adresse
var userInputEmail = "example@mail.com<script>alert('XSS');</script>";
var sanitizedEmail = validateAndSanitizeEmail(userInputEmail);
console.log("Sanitized Email: " + sanitizedEmail);

Security Headers

Security Headers sollen zusätzlich Angriffe auf eine Webanwendung verhindern, indem sie zusätzliche Sicherheitsschichten auf die HTTP-Kommunikation zwischen Client und Server hinzufügen. Bekannte Sicherheitsheader sind beispielsweise:
  1. Content-Security-Policy (CSP)
  2. X-Content-Type-Options
  3. Referrer-Policy
  4. Strict-Transport-Security (HSTS)
  5. X-Frame-Options
  6. Permission-Policy
  7. X-XSS-Protection

Validierung

Siehe auch

Arch_5

Weblinks

Einzelnachweise und Ressourcen

Justin Clarke: SQL Injection Attacks and Defense Clarke, J. (2009). SQL Injection Attacks and Defense. Elsevier Inc. [ISBN 978-1-59749-424-3]

Robert Seacord: Input Validation and Data Sanitization Seacord, R. (Manager). (2015, April 28). Input Validation and Data Sanitization. Abrufdatum: 30.04.2024.