Lab Injeksi SQL
Berjalan secara lokal di browser AndaLihat bagaimana penyusunan SQL yang tidak aman mengubah kueri dan bagaimana pengikatan menjaga nilai tetap sebagai data
Lab edukasi defensif: kueri hanya dijalankan pada data palsu bawaan di database SQLite dalam memori. Tidak ada URL atau target eksternal.
Input
Satu pernyataan SQL dengan {{value}} tepat satu kali di posisi nilai pengguna.
Anggap ini input tak tepercaya dari formulir, URL, atau permintaan API.
Data seed (palsu): users(id, email, role) berisi 5 baris dan orders(id, user_id, amount) berisi 6 baris. Setiap sisi memakai salinannya sendiri.
Apa yang dilakukan SQL Injection Safety Lab
SQL Injection Safety Lab menampilkan secara berdampingan apa yang terjadi saat nilai yang dikendalikan pengguna ditempel ke teks SQL dibandingkan saat diikat sebagai parameter. Kueri tidak aman menyorot karakter nilai yang dibaca sebagai SQL (tanda kutip yang ditutup, kondisi OR tambahan, komentar, klausa ekstra), sedangkan kueri berparameter menjaga teks SQL tetap dan menampilkan nilai secara terpisah sebagai data. Ini alat belajar defensif, bukan pemindai kerentanan: tidak ada input URL dan tidak ada target eksternal.
Cara menggunakan
- 1.Muat contoh atau tulis satu pernyataan SQL yang berisi {{value}} tepat satu kali.
- 2.Ketik nilai yang dikendalikan pengguna. Kueri tidak aman, kueri berparameter, dan penjelasan diperbarui saat Anda mengetik.
- 3.Pilih Jalankan perbandingan untuk mengeksekusi kedua kueri pada data seed palsu di sandbox SQLite dalam memori dan membandingkan baris yang dikembalikan atau diubah.
- 4.Buka Kode aman untuk menyalin versi berparameter bagi PostgreSQL, MySQL, SQLite, atau SQL Server dalam SQL, JavaScript/TypeScript, Python, PHP, Java, atau Go.
- 5.Reset database mengembalikan data seed setelah operasi penulisan.
Mengikat nilai dan allow-list untuk identifier
Nilai harus masuk ke parameter: PostgreSQL memakai $1, MySQL dan SQLite memakai ?, SQL Server memakai @p1, dan driver punya konvensinya sendiri seperti %s di psycopg atau :name di PDO. Lab mengikuti setiap driver saat membuat kode. Nama tabel, nama kolom, dan kolom ORDER BY tidak bisa diikat, sehingga jalur aman memetakan input ke identifier tetap dari allow-list dan menolak selainnya. Tab Pemeriksa kode memindai kode yang ditempel untuk SQL yang diinterpolasi, diformat, atau digabungkan dan melaporkan setiap kecocokan sebagai potensi risiko injeksi SQL, karena tidak melacak asal nilai.
Sandbox, batasan, dan privasi
Hanya SQLite yang dijalankan, di dalam Web Worker menggunakan build WebAssembly sql.js yang di-host sendiri. Setiap sisi perbandingan memakai salinan users dan orders palsu di memorinya sendiri, sehingga penulisan tidak aman tidak pernah memengaruhi hasil yang aman. Satu pernyataan dijalankan per sisi; pernyataan bertumpuk dilaporkan, bukan dijalankan. Kueri dihentikan setelah 3 detik, hasil menampilkan paling banyak 100 baris dan 16 kolom, template dibatasi 4.000 karakter dan nilai 500 karakter. Cuplikan PostgreSQL, MySQL, dan SQL Server hanya sebagai referensi. Template, nilai, dan kode tetap di browser Anda dan tidak pernah dikirim ke server atau analitik.
