String dalam kueri SQL -biasanya- dikelilingi oleh tanda kutip tunggal. Mis.
INSERT INTO tbl (html) VALUES ('html');
Tetapi jika string HTML itu sendiri juga berisi tanda kutip tunggal, itu akan merusak kueri SQL:
INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');
Anda sudah melihatnya di penyorot sintaks, nilai SQL berakhir tepat sebelum foo
dan juru bahasa SQL tidak dapat memahami apa yang terjadi setelahnya. Kesalahan Sintaks SQL!
Tapi itu bukan satu-satunya, itu juga membuat pintu lebar terbuka untuk suntikan SQL (contoh di sini ).
Anda benar-benar perlu membersihkan SQL selama membangun kueri SQL. Cara melakukannya tergantung pada bahasa pemrograman yang Anda gunakan untuk menjalankan SQL. Jika misalnya PHP, Anda memerlukan mysql_real_escape_string()
:
$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";
Alternatif dalam PHP menggunakan pernyataan yang disiapkan , ini akan menangani pelolosan SQL untuk Anda.
Jika Anda menggunakan Java (JDBC
), maka Anda memerlukan PreparedStatement
:
String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);
Perbarui :ternyata Anda benar-benar menggunakan Java. Anda harus mengubah kode sebagai berikut:
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();
Jangan lupa untuk menangani sumber daya JDBC dengan benar. Anda dapat menemukan artikel ini berguna untuk mendapatkan beberapa wawasan bagaimana melakukan hal-hal dasar JDBC dengan cara yang benar. Semoga membantu.