Media Pengembangan Web & App | by APPKEY

Pembuatan WebsiteBackendCegah SQL Injection dengan Cara Ampuh Ini

Cegah SQL Injection dengan Cara Ampuh Ini

-

Last Updated on March 10, 2022 by

Penyerangan database seringkali dilakukan oleh orang-orang yang tidak bertanggungjawab. Penyerangan database ini bisa merusak database Anda. Salah satu bentuk penyerangan database ini adalah SQL Injection.

Penyerangan database dengan teknik SQL Injection ini bisa sangat merugikan Anda para pemilik website. Oleh karena itu, kami memberikan beberapa cara untuk mencegah SQL Injection yang ampuh dan mudah.

Apa itu SQL Injection?

SQL Injection adalah salah satu teknik hacking yang paling seru dilakukan. Injection pada SQL biasanya terjadi ketika Anda meminta input dari pengguna, seperti nama pengguna/id pengguna mereka, dan alih-alih nama/id, pengguna memberi Anda pernyataan SQL yang tanpa sadar akan Anda jalankan di database Anda.

SQL Injection adalah penempatan kode berbahaya dalam pernyataan SQL, melalui input halaman web. Serangan injeksi pada SQL adalah salah satu kerentanan aplikasi web tertua, paling umum, dan paling berbahaya.

Injeksi SQL dapat memengaruhi situs web atau aplikasi web apa pun yang menggunakan database SQL seperti MySQL, Oracle, SQL Server, atau lainnya. Namun SQL Injection juga bisa diterapkan pada pencurian kartu kredit. Penjahat dapat menggunakan teknik hack ini untuk mendapatkan akses tidak sah ke data sensitif Anda: informasi pelanggan, data pribadi, rahasia dagang, kekayaan intelektual dan banyak lagi.

6 Cara Mengatasi SQL Injection

Jika Anda mendapat serangan injeksi SQL pada database Anda, tidak perlu khawatir! Anda bisa mengatasinya dengan 6 cara mengatasi SQL Injection di bawah ini.

1. Input Validation

Cara pertama mencegah serangan pada database adalah dengan melakukan input validation. Proses validasi bertujuan untuk memverifikasi apakah jenis input yang dikirimkan oleh pengguna yang diperbolehkan atau tidak.

Input validation atau validasi input memastikan bahwa itu adalah jenis, panjang, format yang diterima, dan sebagainya. Hanya nilai yang lolos validasi yang dapat diproses. Hal ini membantu melawan perintah apa pun yang dimasukkan ke dalam string input.

Validasi seharusnya tidak hanya diterapkan pada bidang yang memungkinkan pengguna mengetikkan input, artinya Anda juga harus menangani situasi berikut dalam ukuran yang sama:

  • Gunakan regular expression sebagai white list untuk data terstruktur (seperti nama, usia, pendapatan, respons survei, kode pos) untuk memastikan validasi input yang kuat.
  • Dalam hal kumpulan nilai tetap (seperti daftar drop-down, tombol radio), tentukan nilai mana yang dikembalikan. Data masukan harus sama persis dengan salah satu opsi yang ditawarkan.

Lihat contoh di bawah ini:

switch ($tableName) {
    case 'fooTable': return true;
    case 'barTable': return true;
    default: return new BadMessageException('unexpected value provided as table name');
}

Variabel $tableName kemudian dapat langsung ditambahkan—sekarang dikenal luas sebagai salah satu nilai legal dan yang diharapkan untuk nama tabel. Dalam kasus daftar drop-down, sangat mudah untuk memvalidasi data. Dengan asumsi Anda ingin pengguna memilih peringkat dari 1 hingga 5, ubah kode PHP menjadi seperti ini:

<?php
if(isset($_POST["selRating"]))
{
    $number = $_POST["selRating"];
    if((is_numeric($number)) && ($number > 0) && ($number < 6))
    {
        echo "Selected rating: " . $number;
    }
    else
        echo " Peringkat harus berupa angka antara 1 dan 5!";
}

Anda telah menambahkan dua pemeriksaan sederhana:

  • Harus berupa angka (fungsi is_numeric()).
  • Anda mengharuskan $number itu lebih besar dari 0 dan lebih kecil dari 6, yang membuat Anda memiliki kisaran 1-5.

Data yang diterima dari pihak eksternal harus divalidasi. Aturan ini tidak hanya berlaku untuk input yang diberikan oleh pengguna Internet tetapi juga untuk pemasok, mitra, vendor, atau regulator. Vendor ini dapat diserang dan mengirim data yang salah bahkan tanpa sepengetahuan mereka.

2. Parameter queries

Parameter queries atau kueri berparameter adalah sarana untuk melakukan pra-kompilasi pernyataan SQL sehingga Anda kemudian dapat menyediakan parameter agar pernyataan dapat dieksekusi. Metode ini memungkinkan database untuk mengenali kode dan membedakannya dari data input.

Masukan pengguna secara otomatis dikutip dan masukan yang diberikan tidak akan menyebabkan perubahan maksud, jadi gaya pengkodean ini membantu mengurangi serangan injeksi SQL.

Dimungkinkan untuk menggunakan kueri berparameter dengan ekstensi MySQLi, tetapi PHP 5.1 menyajikan pendekatan yang lebih baik saat bekerja dengan database: Objek Data PHP (PDO). PDO mengadopsi metode yang menyederhanakan penggunaan kueri berparameter.

Selain itu, ini membuat kode lebih mudah dibaca dan lebih portabel karena beroperasi pada beberapa database, bukan hanya MySQL. Kode ini menggunakan PDO dengan kueri berparameter untuk mencegah kerentanan injeksi SQL:

<?php
$id = $_GET['id'];
$db_connection = new PDO('mysql:host=localhost;dbname=contoh_sql_injection', 'dbuser', 'dbpasswd');
//mempersiapkan kueri
$sql = "SELECT username 
            FROM users
            WHERE id = :id";
$query = $db_connection->prepare($sql);
$query->bindParam(':id', $id);
$query->execute();
//seperti ini hasilnya
$query->setFetchMode(PDO::FETCH_ASSOC);
$result = $query->fetchColumn();
print(htmlentities($result));

3. Stored Procedures

Stored Procedures (SP) mengharuskan pengembang untuk mengelompokkan satu atau lebih pernyataan SQL ke dalam unit logis untuk membuat rencana eksekusi. Eksekusi selanjutnya memungkinkan pernyataan untuk diparameterisasi secara otomatis.

Sederhananya, ini adalah jenis kode yang dapat disimpan untuk nanti dan digunakan berkali-kali. Jadi, kapan pun Anda perlu menjalankan kueri, alih-alih menulisnya berulang-ulang, Anda bisa memanggil prosedur tersimpan.

Berikut adalah proses pembuatan stored procedure di server MySQL. Misalnya, Anda memiliki tabel seperti ini:

CREATE TABLE `salary` (
          `empid` int(11) NOT NULL,
          `sal` int(11) DEFAULT NULL,
          PRIMARY KEY (`empid`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Misalkan ada seorang karyawan yang perlu mendapatkan data agregat gaji perusahaan dari tabel itu. Pertama, Anda perlu membuat pengguna ‘tr’:

Artikel Terkait  Cara Mengimplementasikan efek Shimmer Flutter dengan Mudah
CREATE USER 'tr'@'localhost' IDENTIFIED BY 'passsaya';

SP dibuat sebagai berikut:

DELIMITER $$
        
CREATE PROCEDURE `avg_sal`(out avg_sal decimal)
BEGIN
    select avg(sal) into avg_sal from salary;
END

Proses mengeluarkan perintah membuat avg_sal SP dan akan disimpan dalam database siap dipanggil. Untuk memanggil SP dari aplikasi PHP, Anda dapat menggunakan PDO:

$db_connection = new PDO('mysql:host=localhost;dbname=hris', 'tr', 'mypass');
        $query = $db_connection->exec('call avg_sal(@out)');
        $res = $query->query('select @out')->fetchAll();
        print_r($res);

$res akan menampilkan gaji rata-rata sesuai permintaan pengguna. Kemudian, pengguna dapat melakukan proses output dengan PHP. SP sekarang menghubungkan pengguna (karyawan) dan tabel salary atau gaji yang tidak dapat diakses langsung oleh pengguna, menjadikannya aset penting dalam keamanan database.

4. Escaping

Selalu gunakan fungsi character-escaping functions untuk input yang disediakan pengguna yang disediakan oleh setiap sistem manajemen basis data (DBMS). Hal ini dilakukan untuk memastikan DBMS tidak pernah bingung dengan pernyataan SQL yang disediakan oleh pengembang.

Misalnya, gunakan mysql_real_escape_string() dalam PHP untuk menghindari karakter yang dapat mengarah ke perintah SQL yang tidak diinginkan. Versi yang dimodifikasi untuk skenario pintasan masuk akan terlihat seperti berikut:

$db_connection = mysqli_connect("localhost", "user", "password", "db");
        $username = mysqli_real_escape_string($db_connection, $_POST['username']);
        $password = mysqli_real_escape_string($db_connection, $_POST['password']);
        $query = "SELECT * FROM users WHERE username = '" . $username. "' AND password = '" . $password . "'";

Sebelumnya, kode Anda akan rentan untuk menambahkan karakter escape (\) di depan tanda kutip tunggal. Namun, memiliki perubahan kecil ini akan melindungi dari pengguna yang tidak sah dan mengurangi SQL Injection.

5. Menghindari hak administratif

Cara kelima menghindari serangan injeksi SQL adalah dengan tidak menghubungkan aplikasi Anda ke database menggunakan akun dengan akses root. Ini harus dilakukan hanya jika benar-benar diperlukan karena penyerang dapat memperoleh akses ke seluruh sistem.

Bahkan server akun non-administratif dapat menempatkan risiko pada suatu aplikasi, terlebih lagi jika server basis data digunakan oleh banyak aplikasi dan basis data. Untuk alasan itu, lebih baik untuk menerapkan hak istimewa paling rendah pada database untuk mempertahankan aplikasi terhadap injeksi SQL.

Pastikan bahwa setiap aplikasi memiliki kredensial basis datanya sendiri dan kredensial tersebut memiliki hak minimum yang dibutuhkan aplikasi. Daripada mencoba menentukan hak akses mana yang harus Anda ambil, fokuslah untuk mengidentifikasi hak akses atau izin yang lebih tinggi yang dibutuhkan aplikasi Anda.

Jika pengguna hanya membutuhkan akses ke beberapa bagian, Anda dapat membuat mode yang secara ketat melayani fungsi ini.

Artikel Terkait  Panda adalah : Bagaimanakah Cara Kerjanya di Bahasa Phyton? Yuk Simak!

6. Web Application Firewall

Salah satu praktik terbaik untuk mengidentifikasi serangan injeksi SQL adalah memiliki Web Application Firewall (WAF). WAF yang beroperasi di depan server web memantau lalu lintas yang masuk dan keluar dari server web dan mengidentifikasi pola yang merupakan ancaman. Pada dasarnya, ini adalah penghalang antara aplikasi web dan Internet.

WAF beroperasi melalui aturan keamanan web yang dapat disesuaikan dan ditentukan. Rangkaian kebijakan ini menginformasikan kepada WAF kelemahan dan perilaku lalu lintas apa yang harus dicari. Jadi, berdasarkan informasi itu, WAF akan terus memantau aplikasi dan permintaan GET dan POST yang diterimanya untuk menemukan dan memblokir lalu lintas berbahaya.

Nilai WAF sebagian berasal dari kemudahan penerapan modifikasi kebijakan. Kebijakan baru dapat ditambahkan dalam waktu singkat, memungkinkan penerapan aturan yang cepat dan respons insiden yang cepat.

WAF memberikan perlindungan yang efisien dari sejumlah serangan keamanan berbahaya seperti:

  • SQL Injection
  • Cross-site scripting (XSS)
  • Session hijacking
  • Serangan penolakan layanan (DDoS) terdistribusi
  • Keracunan kue
  • Cookie poisoning

Seiring dengan manfaat ini, WAF juga menawarkan:

  • Perlindungan otomatis dari berbagai ancaman yang dikenal dan tidak dikenal, dengan tidak hanya kebijakan default yang kuat tetapi juga perbaikan untuk arsitektur WAF spesifik Anda
  • Pemantauan keamanan aplikasi waktu nyata dan pencatatan lalu lintas HTTP yang kuat yang memungkinkan Anda melihat apa yang terjadi secara instan
  • Mempertimbangkan manfaatnya, bahkan selain mencegah serangan injeksi SQL, WAF harus selalu dianggap sebagai bagian dari strategi pertahanan keamanan web yang mendalam.

Itulah beberapa teknik pencegahan SQL injection yang bisa Anda coba lakukan untuk mencegah serangan pada database Anda. Jika Anda ingin tahu lebih banyak cara lain untuk mencegah serangan database, kunjungi Web App di https://appkey.id/ untuk dapatkan informasi terbaru seputar pengembangan website lainnya.

 


Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.

Jasa Pembuatan Aplikasi

Jasa Pembuatan Website

Jasa Pembuatan Paket Aplikasi

Jasa Pembuatan Internet Marketing

Mau posting artikel iklan?

Yuk klik dan ikuti ketentuan layanan dari kami, dapatkan penawaran paket dengan harga terbaik!

Subscribe Sekarang

Dapatkan beragam informasi menarik tentang Website, Aplikasi, Desain, Video dan API langsung melalui email Anda. Subscribe sekarang dan terus belajar bersama kami!

Kategori

Blog Post Ranking 10

Contoh PHP Curl : 10 Hal Luar Biasa yang dapat Anda Kembangkan dengan Curl

Meningkatnya jumlah aplikasi yang pindah ke web telah membuat "HTTP Scripting" lebih sering diminta dan diinginkan. Untuk dapat secara...

Encoding Adalah : Proses Komunikasi Encoding dan Decoding

Jika kita dapat melihat percakapan antar komputer, mungkin akan terlihat seperti ini: "010110111011101011010010110". Bahasa ini disebut dengan biner, encoding...

Looping Adalah Algoritma Perulangan: Berikut Contohnya

Jika anda sudah mendalami atau sedang mendalami dunia pemrograman terdapat sebuah konsep yang dapat memudahkan anda dalam menyusun struktur...

Rekomendasi 7 Aplikasi Pembuat Animasi 3D Terbaik. Ayo Cek!

Apakah Anda bercita-cita untuk menjadi seorang animator profesional? Belajar membuat animasi kini sudah menjadi hal mudah yang bisa dilakukan...

Metadata Adalah? Fungsi dan Jenis-Jenis Metadata

Pernah mendengar istilah metadata? Mungkin, kita sering mendengar istilah metadata. Tetapi, banyak dari kita yang belum tahu arti dari metadata...

Cara Membuat Aplikasi di Playstore dengan Mudah

Membuat aplikasi di Playstore bisa Anda lakukan dengan mudah. Terdapat beberapa situs yang bisa membantu Anda untuk membuat aplikasi...

4 Cara Mengatasi Autentikasi Google Play Store dengan Cepat dan Mudah

Apakah Anda sedang mengalami masalah autentikasi Google Play Store? Permasalahan autentikasi Google Play Store adalah permasalahan umum sering dialami...

Ini Cara Mudah Membuat Redirect PHP | Seri Belajar PHP

Fungsi redirect PHP sangat banyak digunakan dalam kehidupan berwebsite alias mengelola website. Script redirect PHP banyak dipergunakan oleh user...

Cara Mudah Menambahkan Lokasi Alamat Bisnis Anda di Google Maps

Saat ingin hunting tempat makan atau tempat nongkrong terbaru, tak jarang beberapa dari Anda biasanya mendapatkan informasi terkini melalui...

Rekomendasi 10 Aplikasi Coding Android Terbaik

Ketersediaan aplikasi coding Android memang banyak dicari oleh orang-orang yang sedang atau akan memulai untuk membuat aplikasi android. Jika...

Bisnis

Online Service

Peluang Bisnis

Model Bisnis

Entrepreneurship

Uang

Ketrampilan

Outsourcing

Monetize

Pemasaran

SEO

Internet Marketing

Dasar Pemasaran

Strategi Pemasaran

Situs Web Analitik

Iklan

Teknologi

Teknologi Terbaru

AI

Komputer

Jaringan

Paling Sering dibaca
Mungkin Anda Menyukainya