sql >> Databáze >  >> RDS >> Mysql

Uložte HTML do databáze MySQL

Řetězce v dotazu SQL jsou - obvykle - obklopeny jednoduchými uvozovkami. Např.

INSERT INTO tbl (html) VALUES ('html');

Pokud však samotný řetězec HTML obsahuje také jedinou uvozovku, došlo by k porušení SQL dotazu:

INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');

Už to vidíte ve zvýrazňovači syntaxe, hodnota SQL končí těsně před foo a interpret SQL nemůže pochopit, co přijde potom. Chyba syntaxe SQL!

Ale to není jediné, díky tomu jsou dveře široké otevřít pro injekce SQL (příklady zde ).

Opravdu budete muset dezinfikovat SQL během sestavování SQL dotazu. Jak to udělat, závisí na programovacím jazyce, který používáte ke spuštění SQL. Pokud je to například PHP, budete potřebovat mysql_real_escape_string() :

$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";

Alternativou v PHP je použití připravené příkazy , zvládne únik SQL za vás.

Pokud používáte Javu (JDBC ), pak potřebujete PreparedStatement :

String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);

Aktualizovat :ukázalo se, že ve skutečnosti používáte Javu. Budete muset změnit kód následovně:

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();

Nezapomeňte správně zacházet se zdroji JDBC. Můžete najít tento článek užitečné, abyste získali nějaké postřehy, jak dělat základní věci JDBC správným způsobem. Doufám, že to pomůže.



  1. MySQL:Sjednocení levého spojení s pravým spojením

  2. Jak zjistit, kdy byla v Oracle vytvořena konkrétní tabulka?

  3. Navrhování nepřekrývajících se událostí data a času

  4. Minimální protokolování pomocí INSERT…SELECT do tabulek haldy