Pemrograman back-end
Diperkenalkan| English | Makna |
|---|---|
| route/ruːt/ | rute |
| validate input/ˈvælɪdeɪt ˈɪnpʊt/ | validasi input |
| status/ˈsteɪtəs/ | kode status |
| SQL injection/ˌes kjuː ˈel ɪnˈdʒekʃn/ | injeksi SQL |
| parameterised query/ˌpærəˈmetəraɪzd ˈkwɪərɪ/ | query terparameterisasi |
String pencarian mengubah kueri
- Pencarian nama menerima
' OR 1=1 --. Jika kode menempelkannya ke SQL, teks tersebut mungkin mengubah kondisi alih-alih tetap sebagai nama. - Rute memetakan metode dan jalur permintaan ke penanganannya. Jaga kontrak rute tetap jelas sebelum mengimplementasikan pencarian.
Periksa bentuk dan izin
- Validasi input berarti memeriksa nilai yang diperlukan, tipe, panjang yang diizinkan, dan rentang. Periksa izin pemanggil secara terpisah.
- Status menggambarkan hasil: 200 untuk pencarian ini berhasil, 400 untuk input tidak valid, dan 404 untuk sumber daya yang hilang. Kegagalan izin memerlukan kebijakan aplikasi yang disepakati; mereka bukan otomatis merupakan input buruk.
Cocokkan hasil-hasil ini sesuai kontrak rute pelajaran.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Arti-arti ini sendiri tidak mendefinisikan bagaimana kegagalan izin pribadi harus direpresentasikan.
Simpan nilai di luar teks SQL
- Injeksi SQL terjadi ketika teks yang tidak terpercaya menjadi bagian dari sintaks SQL. Query terparameterisasi mengikat nilai secara terpisah dari pernyataan.
- Penanda tempat mengikat nilai, bukan nama tabel sembarangan atau arah pengurutan. Pilih identifikasi semacam itu dari daftar izinkan server-side yang tetap jika sebuah rute membutuhkannya.
Pencarian mana yang menjaga nama yang dikirim terpisah dari sintaks SQL?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Pengikatan nilai menjaganya terpisah dari pernyataan tetap.
Jelaskan apa yang berubah dengan mengikat nama ke placeholder SQL.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Pernyataan tetap tetap sementara nilai yang diikat terpisah tetap merupakan data.
Placeholder nilai dapat secara aman mewakili nama tabel atau arah pengurutan apa pun.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Placeholder mengikat nilai. Pilih pengidentifikasi dinamis dari daftar izin sisi server yang tetap.
Jalankan contoh lokal lengkap
- Simpan dan jalankan contoh Python ini menggunakan SQLite. String yang tidak biasa disimpan sebagai nama, lalu dicari sebagai nilai yang diikat.
- Hasilnya hanya berisi baris dengan nama tersebut. Pengikatan mencegah nilai ini menjadi sintaks SQL; hal itu tidak menetapkan izin atau menjadikan setiap aplikasi aman.
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT)")
name = "' OR 1=1 --"
con.executemany("INSERT INTO students VALUES (?, ?)", [(1, "Mei"), (2, name)])
rows = con.execute("SELECT id FROM students WHERE name = ?", (name,)).fetchall()
print(rows) # [(2,)]
con.close()
Apa yang dicetak oleh contoh SQLite lengkap?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
String tidak biasa disimpan dan kemudian cocok sebagai nama literal.
Pertahankan kegagalan agar berguna dan pribadi
- Berikan browser pesan jelas yang dapat ditindaklanjuti, seperti bidang yang tidak valid atau kegagalan sementara. Jangan kembalikan kesalahan SQL mentah, kredensial pribadi, atau jejak tumpukan (stack traces).
- Catat detail diagnostik hanya dalam log terlindungi dengan nilai sensitif yang dihapus. Catat cukup konteks untuk menyelidiki tanpa menyalin seluruh badan permintaan pribadi.
Kembalikan error database mentah kepada pengunjung biasa agar mereka dapat melakukan debug SQL.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Kembalikan pesan aman yang berguna; lindungi log diagnostik dan hapus nilai sensitif.
Verifikasi lebih dari sekadar jalur sukses
- Periksa input yang valid, yang hilang, yang salah tipe, dan yang terlalu besar; akses yang ditolak; kecocokan kosong; dan kegagalan database yang disimulasikan. Nyatakan hasil yang diharapkan untuk setiap kasus.
- Pertahankan setiap nilai dinamis tetap terikat, termasuk nilai dropdown. Daftar browser tidak mencegah seseorang mengirim nilai berbeda secara langsung.
Validasi permintaan, otorisasikan pemanggil, dan ikat nilai data. Ini menyelesaikan masalah yang berbeda; tidak ada yang menggantikan yang lain.
Input eksternal mana yang memerlukan pengecekan server yang sesuai? Pilih semua yang berlaku.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Nilai eksternal yang tampak biasa tetap bisa memiliki tipe, panjang, atau izin yang salah.
Sebuah kueri terparameterisasi, tetapi pemanggil apa pun dapat membaca baris siswa pribadi. Apa yang masih kurang?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Pengikatan mencegah injeksi nilai; hal itu tidak mengotorisasi pemanggil.