O.Arch 9: Unterschied zwischen den Versionen
D.hack (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
D.hack (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 233: | Zeile 233: | ||
[https://owasp-top-10-proactive-controls-2018.readthedocs.io/en/latest/c5-validate-all-inputs.html C5: Validate All Inputs] C5: Validate All Inputs, aufgerufen am 07.05.2024{{#set: has Literacy=C5: Validate All Inputs}} | [https://owasp-top-10-proactive-controls-2018.readthedocs.io/en/latest/c5-validate-all-inputs.html C5: Validate All Inputs] C5: Validate All Inputs, aufgerufen am 07.05.2024{{#set: has Literacy=C5: Validate All Inputs}} | ||
{{#set:Status=angelegt}} | |||
[[Category:CHECK]] | [[Category:CHECK]] | ||
[[Category: Arch]] | [[Category: Arch]] |
Aktuelle Version vom 6. August 2024, 13:31 Uhr
Beschreibung
Die Web-Anwendung SOLL HTTP-Server-Header nutzen, die dem aktuellen Stand der Technik entsprechen und die Sicherheit der Anwendung erhöhen. Dazu gehören unter anderem HTTP Strict Transport Security (HSTS), Content Security Policy (CSP) und X-Frame-Options.
Kurzfassung
Verwendung von dem Stand der Technik entsprechenden HTTP-Server-Headern.
Testcharakteristik
Prüftiefe
Bezeichnung | Mindestanforderungen an die Prüfung |
---|---|
CHECK | Der Evaluator validiert (englisch „check“, analog zu Begriffsverwendung in der Common Criteria Evaluation Methodology) die vom Hersteller beschriebene Maßnahme im Hinblick auf ihre Wirksamkeit und räumt bestehende Zweifel (Plausibilitätsprüfung) aus, ob der Prüfaspekt und die damit verbundene Sicherheitsproblematik umfassend durch die beschriebenen Maßnahmen adressiert wird. Hierbei MUSS der Evaluator den aktuellen Stand der Technik für die jeweilige Plattform mitberücksichtigen. Die Validierung KANN weitergehende Schritte, wie z.B. eine Quelltextanalyse, umfassen, falls der Evaluator diese für eine umfassende Einschätzung benötigt. |
Ergänzende Informationen für Evaluatoren
Der Evaluator prüft, ob entsprechende HTTP-Server-Header verwendet werden. Falls keine dem Stand der Technik entsprechenden HTTP-Server-Header verwendet werden, ist dies in der Risikobewertung zu berücksichtigen.
Lösungsansätze
Implementierung
Best Practices und Standards
- Input Validation
-
- Whitelisting Validation
- Whitelisting Validation ERLAUBT nur eine gewisse Palette an Eingaben, die der Applikation bereits bekannt sind. Gemäß der OWASP gilt Whitelisting Validation als der empfohlene Minimalansatz [1].
# Python
# 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. Aufgrund der Fehleranfälligkeit dieser Methode rät die OWASP von der Blacklisting Validation ab [2].
// GOLang
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.")
}
}
Allgemein sollte die Input Validation stets serverseitig angewendet werden, um Sicherheitsrisiken entgegenzuwirken.
- 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 [3].
// Java
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 auf die Gültigkeit von Daten ab, sondern versucht die Sicherheit der Anwendung zu gewährleisten, indem potenziell gefährliche Eingaben neutralisiert werden [4].
// JavaScript
// 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);
Tools
- 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
- Security Headers
- Security Headers sind HTTP-Header, die auf Webseiten und Webanwendungen verwendet werden, um die Sicherheit und den Schutz vor verschiedenen Arten von Angriffen und Schwachstellen zu verbessern. Sie bieten eine wichtige Sicherheitsebene, um Benutzer und Daten vor Bedrohungen zu schützen [5].
Siehe auch
Weblinks
Ressourcen und Einzelnachweise
[6] Bundesamt für Sicherheit in der Informationstechnik & Referat DI 24. (2024a). Technische Richtlinie TR-03161: Anforderungen an Anwendungen im Gesundheitswesen Teil 2: Web-Anwendungen. https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR03161/BSI-TR-03161-2.pdf?__blob=publicationFile&v=8
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.
C5: Validate All Inputs C5: Validate All Inputs, aufgerufen am 07.05.2024