SQLクエリの文字列は、通常、一重引用符で囲まれています。例:
INSERT INTO tbl (html) VALUES ('html');
ただし、HTML文字列自体にも一重引用符が含まれていると、SQLクエリが壊れます。
INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');
すでに構文ハイライトに表示されています。SQL値はfoo
の直前で終了します。 そしてSQLインタプリタはその後何が起こるかを理解できません。 SQL構文エラー!
しかし、それだけでなく、ドアを広く配置することもできます。 SQLインジェクション を利用できます (ここに例 。
の間にSQLをサニタイズする必要があります。 SQLクエリを作成します。その方法は、SQLの実行に使用しているプログラミング言語によって異なります。たとえばPHPの場合は、 mysql_real_escape_string()
:
$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";
PHPの代替手段は、プリペアドステートメント を使用することです。 、SQLエスケープを処理します。
Javaを使用している場合( JDBC
)、次に、 PreparedStatement
が必要です。
:
String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);
更新 :実際にJavaを使用していることがわかりました。次のようにコードを変更する必要があります:
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();
JDBCリソースを適切に処理することを忘れないでください。 この記事 が見つかります。 基本的なJDBCを適切な方法で実行する方法についての洞察を得るのに役立ちます。これがお役に立てば幸いです。