Mysql
 sql >> Datenbank >  >> RDS >> Mysql

HTML in MySQL-Datenbank speichern

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.