Anda harus fokus pada beberapa aspek-aspek bahasa SQL dari perspektif Web app pena tester. Artikel ini menyajikan dasar-dasar mentah karena terkait dengan upaya uji pena dan serangan SQL Injection.
Satu catatan tentang terminologi: permintaan tidak terbatas pada permintaan data. Permintaan tersebut dapat meminta informasi dari DB, menulis data baru ke DB, memperbarui informasi yang ada di DB, atau menghapus catatan dari DB.
The SQL keywords to focus on are listed in the following table: SQL dengan kata kunci untuk fokus pada tercantum pada tabel berikut ini:
[b]
5 user06 passwd06
SELECT
Pernyataan SELECT yang mewakili paling dasar bentuk meminta data dari DB. Requesting data is a form of query — your code will SELECT information FROM a DB table. Meminta data adalah bentuk permintaan - kode Anda akan SELECT informasi dari sebuah DB tabel. Sebagai contoh berikut adalah nama tabel dan main_tbl terdapat tiga kolom bernama id, pengguna, dan lulus.
Perhatikan bahwa tabel adalah kontainer yang berada di dalam DB dimana data sebenarnya disimpan. Database dapat memiliki tabel dan tabel dapat menyimpan data. Tabel terdiri dari baris dan kolom, dimana kolom mendikte jenis data dan menyimpan data baris yang tepat sesuai dengan peraturan kolom.
Dasar permintaan (dan hasil) meminta semua data dari tabel yang diberikan adalah sebagai berikut:
SELECT * FROM main_tbl
id username password
1 user01 passwd01
2 user02 passwd02
3 user03 passwd03
4 user04 passwd034
Permintaan ini dapat difokuskan untuk menarik data dari satu kolom (column) atau lebih dengan menentukan kolom nama:
SELECT username, pass FROM main_tbl
Username pass
user01 passwd01
user02 passwd02
user03 passwd03
user04 passwd034
Perintah Modifiers yang tersedia untuk memperluas kekuasaan SQL pernyataan yang disajikan. Sebagian besar dari program tersebut dapat dipadukan untuk membuat logika Boolean.
Perintah SQL Modifiers & Fungsi
WHERE - Digunakan terutama dengan SELECT, INSERT, dan DELETE untuk menentukan kriteria tingkatan untuk sebuah tindakan
AND - operator Boolean Logic
OR - operator Boolean Logic
NOT - operator Boolean Logic
LIKE - Memfasilitasi query berdasarkan approximations
BETWEEN - Memfasilitasi query berdasarkan rentang
GROUP BY - Memfasilitasi pengelompokan dari hasil pencarian
VALUES - Digunakan dengan INSERT dan UPDATE untuk menentukan nilai-nilai yang akan dimasukkan atau diupdate.
Terakhir permintaan contoh dapat lebih mengasah oleh penyaringan data melalui ketentuan WHERE sehingga kondisi spesifik yang dicari:
SELECT username, pass FROM main_tbl WHERE id > 3
Username pass
user04 passwd034
Hal ini pada gilirannya akan lebih mengasah dengan menambahkan lebih kriteria di ketentuan WHERE:
SELECT username, pass FROM main_tbl WHERE id > 2 OR (id <> 3) \
Username pass
user03 passwd03
user04 passwd034
Jadi mulai melihat bahwa proses di sini, contoh terakhir ini akan membaca dalam bahasa Inggris seperti ini:
Select the columns user and pass from the table main_tbl where the id value is greater than 2 or the id value is less than 5 and greater than
Dalam SQL, angka data yang disampaikan ke server seperti, sedangkan string pass harus dengan tanda kutip di awal dan di akhir.
INSERT
Contoh pernyataan INSERT akan dibaca sebagai berikut:
INSERT INTO main_tbl (id, username, pass) NILAI (201, 'username', 'userpass')
DELETE
Contoh pernyataan DELETE untuk menghapus baris ditambahkan dalam contoh INSERT akan membaca seperti ini:
DELETE FROM main_tbl WHERE id = 201 AND username = 'username'
UPDATE
Contoh UPDATE pernyataan untuk memperbarui baris ditambahkan dalam INSERT contoh akan dibaca sebagai berikut:
UPDATE main_tbl SET username = 'newname' WHERE id = 201 AND username = 'username'
UNION
UNION mengharuskan semua kolom yang sesuai dari tipe data yang sama. Selain itu, diketahui bahwa bila menggunakan UNION, hanya nilai-nilai yang berbeda kembali. Sehingga jika aspek yang berbeda yang diterapkan pada hasil unionized query:
SELECT username, pass FROM main_tbl WHERE id > 2
UNION
SELECT username, pass FROM other_tbl WHERE id > 2
Username pass
user03 passwd03
user04 passwd034
user05 passwd05
user06 passwd06
UNION juga datang dalam bentuk UNION ALL dimana fungsi yang sama diberikan tetapi semua hasil yang relevan dikembalikan, yang bertentangan dengan standar UNION yang hanya kembali nilai-nilai berbeda:
SELECT username, pass FROM main_tbl WHERE id > 2
UNION ALL
SELECT username, pass FROM other_tbl WHERE id > 2
Username pass
user03 passwd03
user04 passwd034
user03 passwd03
user05 passwd05
user06 passwd06
MySQL dari 4 versi sebelumnya tidak mendukung fungsi UNION.
DROP
Dengan DROP, Anda dapat menghapus indeks, tabel, atau seluruh DB. Dari sebuah pena pengujian perspektif indeks aspek ini tidak terlalu menarik, tetapi yang dua lainnya adalah tidak berbahaya. Contoh masing-masing akan terlihat seperti ini:
DROP TABLE main_tbl
DROP DATABASE DB_Name
CREATE
CREATE digunakan untuk membuat tabel, seluruh DBS, dan indeks. Indeks tidak terlalu menarik dari perspektif pengujian pena, namun membuat meja dan DBS seperti ini:
CREATE TABLE table_name
( column_name1 data_type, column_name2 data_type, ... )
CREATE DATABASE database_name
ALTER
ALTER digunakan untuk menambah atau menghapus kolom dari tabel DB. Pernyataan seperti ini:
ALTER TABLE main_tbl ADD column_name data_type
ALTER TABLE main_tbl DROP COLUMN column_name
KARAKTER KHUSUS
Tabel berikut ini berisi karakter khusus SQL Anda, perlu berhati-hati dalam referensi untuk melakukan serangan SQL Injection:
SQL Character & Description
- - Satu baris komentar. Semua data setelah diabaikan sebagai komentar.
% - Wildcard simbol yang digunakan untuk menyesuaikan string peramaan kriteria tertentu.
'- Bagian dari string encapsulation equation, tanda ini buat menutup masukan pengguna.
"- Bagian dari string encapsulation equation.
; - Berakhir satu pernyataan SQL dan mulai yang baru.
# - Satu baris komentar untuk MySQL. Semua data setelah diabaikan sebagai komentar.
/* ... */ - Beberapa baris komentar.
+ - Penambahan, rangkaian (tergantung pada konteks penggunaan).
| | - Rangkaian.
@ variabel - variabel lokal.
, @ variabel - menambahkan variabel dan memungkinkan Anda mengetahui apakah prosedur yang disimpan sedang dipanggil.
@ @ variabel - variabel global.
PRINT - Angkatan kesalahan generasi.
PRINT @ @ variabel - Exposes terkena untuk mendapatkan informasi, biasanya melalui kesalahan.
1 = 1 - Logic yang memaksa kondisi TRUE.