SQL injection · Injeksi SQL
When input becomes a command
- Many apps build a database query by gluing the user's input into a string. That is dangerous.
- If an attacker types SQL as their input, it can become part of the query. This is SQL injection — the most famous web attack.
Ketika input menjadi perintah
- Banyak aplikasi membangun kueri database dengan menyambungkan input pengguna ke dalam string. Itu berbahaya.
- Jika penyerang mengetik SQL sebagai input mereka, hal itu bisa menjadi bagian dari kueri. Ini adalah SQL injection — serangan web paling terkenal.
See the attack
- Imagine a login that checks
... WHERE name = '<whatever you typed>'. - An attacker types
' OR '1'='1as the name. The query becomes:
'1'='1'is always true, so the database returns every user. The login is bypassed. Run it and see.
Melihat serangan
- Bayangkan sebuah login yang memeriksa
... WHERE name = '<whatever you typed>'. - Penyerang mengetik
' OR '1'='1sebagai nama. Query menjadi:
SELECT * FROM users WHERE name = '' OR '1'='1';
'1'='1'selalu benar, sehingga database mengembalikan semua pengguna. Login dilewati. Jalankan dan lihat sendiri.
The fix: parameterised queries
- Never glue user input into SQL. Use parameterised queries (also called prepared statements).
- The database treats the input strictly as a value, never as code — so
' OR '1'='1is just a (failed) name to look up. - Also apply least privilege: the web app's database account should only do what it needs.
Perbaikan: query terparameterisasi
- Jangan pernah menyambungkan input pengguna ke dalam SQL. Gunakan query terparameterisasi (juga disebut prepared statements).
- Database memperlakukan input secara ketat sebagai nilai, bukan kode — jadi
' OR '1'='1hanyalah nama (yang gagal) untuk dicari. - Terapkan juga hak akses minimum: akun database aplikasi web hanya boleh melakukan apa yang dibutuhkan.
Your turn
- Below, write a precise, safe query that returns only bob by his
id. That is the spirit of a parameterised lookup.
Covers: A-Level data security; web application security.
Giliran Anda
- Di bawah ini, tulis query yang tepat dan aman yang hanya mengembalikan bob berdasarkan
id-nya. Itulah esensi dari pencarian terparameterisasi.
Mencakup: Keamanan data A-Level; keamanan aplikasi web.
Common mistakes
- Never build a query by joining raw user input into the text.
- Use parameterised queries so input can never change the query.
Kesalahan umum
- Jangan pernah membangun query dengan menggabungkan input mentah pengguna ke dalam teks.
- Gunakan query terparameterisasi agar input tidak pernah mengubah query.
First, run the attack and see the damage. The app glued the attacker's input into the query, so the condition became name = '' OR '1'='1'. Complete the query exactly like that and see every user leak out. · Pertama, jalankan serangan dan lihat kerusakannya. Aplikasi menyematkan input penyerang ke dalam kueri, sehingga kondisinya menjadi name = '' OR '1'='1'. Lengkapi kueri persis seperti itu dan lihat semua pengguna bocor keluar.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
A safe lookup uses a precise condition. Change the query to return only bob's row, by adding WHERE id = 2. · Pencarian aman menggunakan kondisi yang presisi. Ubah kueri agar mengembalikan hanya baris bob, dengan menambahkan WHERE id = 2.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.