3 Stimmen

Wie werden Zeichenketten sicher geparst?

Wir wissen, dass die Verwendung von String-Konkatenation zur Erstellung von SQL-Abfragen ein Programm anfällig für SQL-Injection macht. Normalerweise umgehe ich das, indem ich Parameterfunktionen verwende, die von der API der verwendeten Datenbanksoftware bereitgestellt werden.

Aber ich habe nicht gehört, dass dies ein Problem bei der regulären Systemprogrammierung ist. Betrachten Sie den folgenden Code als Teil eines Programms, das es einem Benutzer erlaubt, nur in Dateien in seinem privaten Verzeichnis zu schreiben.

Scanner scanner = new Scanner(System.in);
String directoryName = "Bob";
String filePath = null;
String text = "some text";

System.out.print("Enter a file to write to: ");
filePath = scanner.nextLine();

// Write to the file in Bob's personal directory for this program (i.e. Bob/textfile.txt)
FileOutputStream file = new FileOutputStream(directoryName + "/" + filePath);
file.write(text.getBytes());

Ist die vorletzte Zeile eine Schwachstelle? Wenn ja, wie kann das Programm sicherer gemacht werden (insbesondere in Java, C++ und C#)? Eine Möglichkeit besteht darin, die Eingabe auf Escape-Zeichen zu überprüfen. Gibt es sonst noch etwas?

1voto

madhead Punkte 28496

Sie können das Benutzerverzeichnis mit System.getProperty("user.home") . Wenn Ihr Programm unter diesem Benutzer läuft und die Benutzerrechte korrekt verwaltet werden, dann sind keine Probleme zu erwarten. Sie können auch Pfad-Trennzeichen mit einer anderen Eigenschaft erhalten - file.separator . Und schließlich gibt es Methoden File.canRead() et File.canWrite() .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X