Zeichenfolgen in einer SQL-Abfrage werden normalerweise von einfachen Anführungszeichen umgeben. Z. B.
INSERT INTO tbl (html) VALUES ('html');
Aber wenn der HTML-String selbst auch ein einfaches Anführungszeichen enthält, würde dies die SQL-Abfrage beschädigen:
INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');
Sie sehen es bereits im Syntax-Highlighter, der SQL-Wert endet direkt vor foo
und der SQL-Interpreter kann nicht verstehen, was danach kommt. SQL-Syntaxfehler!
Aber das ist nicht das einzige, es macht auch die Türen weit offen für SQL-Injektionen (Beispiele hier ).
Sie müssen die SQL wirklich während bereinigen Erstellen der SQL-Abfrage. Wie das geht, hängt von der Programmiersprache ab, die Sie zum Ausführen des SQL verwenden. Wenn es sich beispielsweise um PHP handelt, benötigen Sie mysql_real_escape_string()
:
$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";
Eine Alternative in PHP ist die Verwendung von vorbereiteten Anweisungen , es übernimmt das SQL-Escape für Sie.
Wenn Sie Java verwenden (JDBC
), dann brauchen Sie PreparedStatement
:
String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);
Aktualisieren :Es stellt sich heraus, dass Sie tatsächlich Java verwenden. Sie müssen den Code wie folgt ändern:
String sql = "INSERT INTO website (URL, phishing, source_code, active) VALUES (?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, URL);
preparedStatement.setString(2, phishingState);
preparedStatement.setString(3, sourceCode);
preparedStatement.setString(4, webSiteState);
preparedStatement.executeUpdate();
Vergessen Sie nicht, mit JDBC-Ressourcen richtig umzugehen. Sie können diesen Artikel finden nützlich, um einige Einblicke zu erhalten, wie man grundlegende JDBC-Sachen richtig macht. Hoffe das hilft.