Sanierungsstrategien
Verständnis der Eingabe-Sanierung
Die Eingabe-Sanierung ist der Prozess der Reinigung und Transformation von Benutzereingaben, um potenziell schädliche oder unerwünschte Zeichen zu entfernen, bevor sie verarbeitet werden. Sie geht über die Validierung hinaus, indem sie Eingaben aktiv modifiziert, um Sicherheit und Konsistenz zu gewährleisten.
Wichtige Sanierungsmethoden
1. Zeichenketten-Sanierung
#include <string>
#include <algorithm>
#include <cctype>
class StringSanitizer {
public:
// Entfernen von Sonderzeichen
static std::string removeSpecialChars(const std::string& input) {
std::string sanitized = input;
sanitized.erase(
std::remove_if(sanitized.begin(), sanitized.end(),
[](char c) {
return !(std::isalnum(c) || c == ' ');
}),
sanitized.end()
);
return sanitized;
}
// Leerzeichen entfernen
static std::string trim(const std::string& input) {
auto start = std::find_if_not(input.begin(), input.end(), ::isspace);
auto end = std::find_if_not(input.rbegin(), input.rend(), ::isspace).base();
return (start < end) ? std::string(start, end) : "";
}
};
2. HTML-Entkommen
class HTMLSanitizer {
public:
static std::string escapeHTML(const std::string& input) {
std::string sanitized;
for (char c : input) {
switch (c) {
case '&': sanitized += "&"; break;
case '<': sanitized += "<"; break;
case '>': sanitized += ">"; break;
case '"': sanitized += """; break;
case '\'': sanitized += "'"; break;
default: sanitized += c;
}
}
return sanitized;
}
};
Sanierungsablauf
flowchart TD
A[Rohdaten-Eingabe] --> B{Eingabe validieren}
B --> |Gültig| C[Sonderzeichen entfernen]
C --> D[Leerzeichen entfernen]
D --> E[HTML/Sonderzeichen entkommen]
E --> F[Verarbeitete Eingabe]
B --> |Ungültig| G[Eingabe ablehnen]
Vergleich der Sanierungsstrategien
Strategie |
Zweck |
Beispiel |
Zeichenentfernung |
Entfernen unsicherer Zeichen |
Entfernen von Sonderzeichen |
Entkommen |
Verhindern von Code-Injection |
HTML-Zeichen-Entkommen |
Normalisierung |
Standardisieren des Eingabeformats |
Umwandlung in Kleinbuchstaben |
Kürzung |
Begrenzung der Eingabelänge |
Kürzung auf maximale Zeichenanzahl |
Erweiterte Sanierungsmethoden
1. Eingabefilterung
class InputFilter {
public:
static std::string filterAlphanumeric(const std::string& input) {
std::string filtered;
std::copy_if(input.begin(), input.end(),
std::back_inserter(filtered),
[](char c) { return std::isalnum(c); }
);
return filtered;
}
static std::string limitLength(const std::string& input, size_t maxLength) {
return input.substr(0, maxLength);
}
};
2. Sanierung basierend auf regulären Ausdrücken
#include <regex>
class RegexSanitizer {
public:
static std::string sanitizeEmail(const std::string& email) {
std::regex email_regex(R"(^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$)");
if (std::regex_match(email, email_regex)) {
return email;
}
return "";
}
};
Sicherheitsüberlegungen
- Vertrauen Sie niemals Benutzereingaben.
- Wenden Sie mehrere Sanierungsstufen an.
- Verwenden Sie Standardbibliotheksfunktionen.
- Berücksichtigen Sie den Kontext bei der Sanierung.
- Protokollieren und überwachen Sie Sanierungsereignisse.
Umfassendes Beispiel
int main() {
std::string userInput = " Hello, <script>alert('XSS');</script> ";
// Sanierungs-Pipeline
std::string sanitized = StringSanitizer::trim(userInput);
sanitized = StringSanitizer::removeSpecialChars(sanitized);
sanitized = HTMLSanitizer::escapeHTML(sanitized);
std::cout << "Original: " << userInput << std::endl;
std::cout << "Sanitized: " << sanitized << std::endl;
return 0;
}
Fazit
Eine effektive Eingabe-Sanierung ist entscheidend für die Aufrechterhaltung der Anwendungssicherheit und die Vermeidung potenzieller Sicherheitslücken. Durch die Implementierung robuster Sanierungsstrategien können Entwickler die Risiken durch bösartige oder unerwartete Eingaben deutlich reduzieren.