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?