flawopen.com/SQL Injection/Java

SQL Injection in Java

Kritis CWE-89 Draft — pending review
Language: English Português (Brasil) Español Français Deutsch Русский 简体中文 日本語 हिन्दी 한국어 Bahasa Indonesia
Penjelasan sederhana

Bayangkan formulir yang hanya meminta nomor tiket. Peretas memasukkan teks jebakan sehingga sistem menampilkan seluruh tiket pengguna lain.

Istilah penting di halaman ini
output encoding
Converting special markup characters into safe entities so browsers display them as text rather than script.

Apa yang terjadi

SQL Injection in Java occurs when unvalidated strings are concatenated into JDBC Statement or HQL/JPQL queries.

Dampak dunia nyata

In 2005, the Samy XSS worm infected over 1 million user profiles on MySpace in under 20 hours, forcing the platform offline.

Documented historical AppSec case study.

Rentan vs. Diperbaiki

VULNERABLE
// userId comes straight from the request
String query = "SELECT * FROM users "
    + "WHERE id = " + userId;
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
FIXED
// value is bound, never concatenated
String query = "SELECT * FROM users WHERE id = ?";
PreparedStatement stmt =
    connection.prepareStatement(query);
stmt.setString(1, userId);
ResultSet rs = stmt.executeQuery();

Mengapa perbaikan ini berhasil

PreparedStatement precompiles the query structure in the database engine, binding parameter values separately.

Jebakan spesifik bahasa

MyBatis: ${} vs #{}

#{} uses safe parameterized binding, while ${} performs raw string substitution.

Hibernate HQL/JPQL

Concatenating HQL queries is just as dangerous as raw SQL. Always use setParameter().

Kesalahpahaman umum

"Stored procedures prevent injection"

Only if the stored procedure itself uses parameters rather than dynamic EXECUTE strings.

Cara memeriksa apakah Anda terpengaruh

grep -rn "createStatement().*executeQuery(.*+" --include="*.java" .
Run SpotBugs with the FindSecBugs plugin in CI to catch SQL_INJECTION_JDBC automatically.

Daftar periksa pencegahan

Pertanyaan Umum

Is Spring Data JPA safe?

Derived queries (@Query) are safe if method parameters are bound with :param or ?1.

Referensi

Lihat juga: Cross-Site Scripting Command InjectionPath Traversal