Mengatasi sql injection di php

Jangan sampai ketika di upload web aplikasi anda mendapatkan serangan SQL Injection dan mudah sekali di by pass admin, tentunya ini sangat merugikan anda, tentunya anda tidak ingin aplikasi anda di rusak oleh hacker script kiddies yang memang sedang gemar gemar nya uji coba ilmu yang di dapat dengan mempraktekkannya secara langsung.


Ada beberapa hal yang bisa anda lakukan untuk mencegah SQL Injection dan mencegah serangan by pass admin ke website anda yaitu adalah


</> menggunakan function mysqli_real_escape_string()
</> membuat password hashing (MD5 / SHA1)
</> menambahkan salt pada password
</> membuat nomor random dengan
</> membuat session check ketika user login

Aplikasi web biasanya yang rentan terhadap by pass admin biasanya tidak menggunakan fungsi mysqli_real_escape_string() jadi untuk mencegah bypass admin di aplikasi web yang sudah anda buat anda bisa, berikut adalah contoh script login yang menggunakan fungsi mysqli_real_escape_string().


<?php
include ("conn.php");
date_default_timezone_set('Asia/Jakarta');

session_start();

$username = $_POST['username'];
$password = sha1($_POST['password']);

$username = mysqli_real_escape_string($koneksi, $username);
$password = mysqli_real_escape_string($koneksi, $password);

if (empty($username) && empty($password)) {
    header('location:index.php?error=Username dan Password Kosong!');
} else if (empty($username)) {
    header('location:index.php?error=Username Kosong!');
} else if (empty($password)) {
    header('location:index.php?error=Password Kosong!');
}

$q = mysqli_query($koneksi, "select * from user where username='$username' and password='$password'");
$row = mysqli_fetch_array ($q);

if (mysqli_num_rows($q) == 1) {
    $_SESSION['user_id'] = $row['user_id'];
    $_SESSION['username'] = $username;
    $_SESSION['fullname'] = $row['fullname'];
    $_SESSION['email'] = $row['email'];
    $_SESSION['nama_usaha'] = $row['nama_usaha'];
    $_SESSION['alamat'] = $row['alamat'];
    $_SESSION['kota'] = $row['kota'];
    $_SESSION['telp'] = $row['telp'];
    $_SESSION['gambar'] = $row['gambar'];    
    $_SESSION['level']  = $row['level'];
    $_SESSION['a']  = $row['a'];
    $_SESSION['b']  = $row['b'];
    $_SESSION['c']  = $row['c'];
    $_SESSION['d']  = $row['d'];
    $_SESSION['e']  = $row['e'];
    $_SESSION['f']  = $row['f'];
    $_SESSION['g']  = $row['g'];
    $_SESSION['h']  = $row['h'];
    $_SESSION['i']  = $row['i'];
    
    if ($_SESSION['level'] == 'admin'){
        header('location:admin/index.php');
    } else if ($_SESSION['level'] == 'user'){
        header('location:admin/index.php');
    }
    
} else {
    header('location:index.php?error=Anda Belum Terdaftar!');
}
?>

dari script login di atas terlihat sebelum melakukan login  password di enkripsi lebih dulu kemudian baru pengecheckan dengan fungsi mysqli_real_escape_string() untuk mencegah terjadinya bypass admin.

dengan menambahkan fungsi tersebut bisa mencegah terjadinya By Pass Admin dan mencegah terjadinya SQL injection, semoga informasi singkat ini bisa bermanfaat untuk anda yang membacanya, jika artikel ini bermanfaat jangan sungkan untuk membagikannya.

Happy Coding & Programming

Share this post

Sehingga dapat secara langsung mengambil dan mengubah data yang disimpan dalam database Sebuah Website.

Sejarah Singkat SQL Injection

Pada Perkembangan awal dunia internet, membangun website sangatlah mudah,tanpa JavaScript, tanpa CSS, dan hanya sedikit gambar. Namun seiring popularitas web, kebutuhan akan teknologi yang lebih maju dan situs web dinamis semakin meningkat. Membuat Berkembangnya CGI dan bahasa server-side seperti ASP, JSP dan PHP.

Sejak saat itu Situs web berubah dan mulai menyimpan inputan hasil pengguna dan konten situs dalam basis data. Oleh karena itu tidak mengherankan bahwa setiap bahasa scripting server-side yang populer menambahkan SQL database Sebagai pendukung tempat menyimpanya data.

Oleh Sebab itu banyak sekali peretas yang memanfaatkan hal ini untuk memasukan virus mereka ke dalam server database dan kemudian dapat di gunakan untuk Keperluan mereka.

Apa itu SQL Injection ?

SQL Injection adalah kerentanan keamanan web yang memungkinkan penyerang mengganggu queri yang dibuat aplikasi ke basis datanya. Biasanya memungkinkan hacker untuk melihat data yang biasanya tidak dapat mereka ambil. Dalam banyak kasus, hacker dapat memodifikasi atau menghapus data , yang dapat menyebabkan perubahan terus-menerus pada konten atau perilaku aplikasi.

Dalam beberapa situasi, hacker dapat meningkatkan serangan SQL Injection untuk mengkompromikan server yang mendasarinya atau infrastruktur back-end lainnya.

Apa Yang terjadi jika Serangan SQL injection berhasil ?

Serangan SQL Injection yang berhasil dapat mengakibatkan akses tidak sah ke data sensitif, seperti kata sandi, detail kartu kredit, atau informasi pengguna pribadi. Banyak pelanggaran kehilangan data profil tinggi dalam beberapa tahun terakhir adalah akibat dari serangan injeksi SQL, yang menyebabkan kerusakan reputasi dan denda peraturan. Dalam beberapa kasus,Hacker dapat memperoleh backdoor persisten ke dalam sistem.

Contoh SQL injection

Ada berbagai macam kerentanan, serangan, dan teknik injeksi SQL, yang muncul dalam situasi yang berbeda. Beberapa contoh injeksi SQL umum meliputi:

  • Retrieving hidden data, di mana Anda dapat memodifikasi queri SQL untuk mengembalikan hasil tambahan.
  • Subverting application logic, di mana Anda dapat mengubah kueri untuk mengganggu logika aplikasi.
  • UNION attacks,di mana Anda dapat mengambil data dari tabel database yang berbeda.
  • Examining the database, di mana Anda dapat mengekstrak informasi tentang versi dan struktur database
  • Blind SQL injection, di mana hasil kueri yang Anda kontrol tidak dikembalikan dalam respons aplikasi.

Cara Mengatasi SQL Injection

Bahasa server-side tidak dapat menentukan apakah string queri SQL salah format. Yang bisa mereka lakukan hanyalah mengirim string ke server database dan menunggu respons yang ditafsirkan.

Jadi, harus ada cara untuk membersihkan input pengguna dan memastikan injeksi SQL tidak dapat dilakukan. ada banyak cara untuk membersihkan input pengguna, mulai dari menerapkan addlashes() PHP secara global ke semuanya, hingga menerapkan sanitasi ke variabel “clean” pada saat merakit SQL query itu sendiri, seperti membungkus $_GET[‘id’] di atas dalam fungsi mysql_escape_string() PHP. Namun, menerapkan sanitasi pada queri itu sendiri adalah praktik pengkodean yang sangat buruk dan sulit untuk dipertahankan atau dilacak. Di sinilah sistem database telah menggunakan penggunaan pernyataan yang disiapkan.

Di bawah Ini adalah beberapa Cara untuk mengatasi SQL injection :

1. Lakukan Validasi Sebelum User menginput

Langkah pertama yang umum untuk mencegah serangan injeksi SQL adalah memvalidasi input pengguna. Pertama, identifikasi pernyataan SQL yang penting dan buat daftar whitelist untuk semua pernyataan SQL yang valid, dengan mengabaikan pernyataan yang tidak valid dari queri. Proses ini dikenal sebagai validasi input atau desain ulang queri.

Selain itu, Anda harus mengonfigurasi input untuk data pengguna berdasarkan konteks. Misalnya, bidang input untuk alamat email dapat difilter untuk memungkinkan hanya karakter dalam alamat email, seperti karakter “@” yang diperlukan. Demikian pula, nomor telepon dan nomor Identitas hanya boleh difilter untuk memungkinkan jumlah digit tertentu untuk masing-masing.

2. Membatasi Read-Access 

perlindungan injeksi SQL paling rendah adalah mengonfigurasi read-access ke database. Jika organisasi Anda hanya membutuhkan pengguna aktif yang menggunakan read-access, itu pasti lebih mudah untuk di konfigurasikan. langkah tambahan ini sangat penting untuk menghentikan hacker mengubah informasi yang disimpan.

3. Membuat Example dan Explanation SQL statement

Tidak ada sistem basis data utama yang beroperasi seperti printf . MySQL, secara langsung, membutuhkan setidaknya dua perintah (yang pertama PPREPARE dan kedua EKSEKUSI). PHP, melalui PDO library juga memerlukan pendekatan susun yang serupa, seperti berikut ini:

1

$stmt = $dbh->prepare("SELECT * FROM users WHERE USERNAME = ? AND PASSWORD = ?");$stmt->execute(array($username, $password));

4. Jangan Bagikan User database

Ketika anda memiliki akses ke sebuah database website maka simpanlah user dan password dari database tersebut.

Anda jangan pernah membagikan atau membicarakan user dan password database ini. Karena jika ada yang mengetahuinya maka bisa menyebabkan terhack nya sistem database anda.

5. Menggunakan Parameter Queri

Sebagian besar contoh injeksi SQL dapat dicegah dengan menggunakan berparameter Queri (juga dikenal sebagai pernyataan yang disiapkan).

Kode berikut rentan terhadap injeksi SQL karena input pengguna digabungkan langsung ke dalam kueri:

1

2

3

String query = "SELECT * FROM products WHERE category = '"+ input + "'";

Statement statement = connection.createStatement();

ResultSet resultSet = statement.executeQuery(query);

Kode ini dapat dengan mudah ditulis ulang dengan cara mencegah input pengguna mengganggu struktur queri:

1

2

3

PreparedStatement statement = connection.prepareStatement("SELECT * FROM products WHERE category = ?");

statement.setString(1, input);

ResultSet resultSet = statement.executeQuery();

Parameter Queri dapat digunakan untuk situasi apa pun di mana input yang tidak tepercaya muncul sebagai data dalam queri, termasuk WHERE klausa dan nilai statement INSERT atau UPDATE.

Kesimpulan

SQL injection sebenarnya bisa dengan mudah di atasi asalkan anda tidak membuat celah para hacker untuk bisa memasukan Virusnya kedalam Database .

Demikian Pembahasan Terkait Apa Itu SQL Injection dan Bagamaina Cara Mengatasinya, semoga bisa bermanfaat 🙂

Kenapa SQL injection bisa terjadi?

SQL Injection adalah salah satu teknik peretasan dengan cara menyalahgunakan celah keamanan yang ada di lapisan SQL berbasis data suatu aplikasi. Terbentuknya celah tersebut akibat input yang tidak difilter dengan benar dalam pembuatannya, sehingga terciptalah celah yang bisa disalahgunakan.

Teknik apa yang digunakan untuk membantu mengurangi serangan injeksi SQL?

Gunakan parameterized queries Gaya pengkodean ini membantu mengurangi serangan injeksi SQL. Input dari pengguna secara otomatis diquoted dan tidak akan menyebabkan perubahan tujuan. Disarankan untuk menggunakan parameterized queries dengan PHP 5.1 saat bekerja dengan database.

Apa itu SQL injection Bagaimana cara kerja SQL injection?

SQL Injection (SQLi) merupakan jenis serangan injeksi yang memungkinkan untuk mengeksekusi statement SQL yang berbahaya. Statement yang digunakan ini dapat mengontrol server database di belakang aplikasi web.

Blind SQL injection itu apa?

Blind-boolean-based SQL Injection. Teknik ini merupakan salah satu teknik yang bergantung pada pengiriman query SQL ke database yang memaksa aplikasi untuk mengirimkan nilai balikan yang berbeda bergantung pada apakah query balikan yang diberikan TRUE atau FALSE.