{"id":8570,"date":"2023-12-13T00:19:08","date_gmt":"2023-12-12T16:19:08","guid":{"rendered":"https:\/\/jurnalpost.com\/read\/?p=8570"},"modified":"2023-12-13T00:19:08","modified_gmt":"2023-12-12T16:19:08","slug":"ancaman-sql-injection-terhadap-data-dan-privasi-dalam-sistem","status":"publish","type":"post","link":"https:\/\/jurnalpost.com\/read\/ancaman-sql-injection-terhadap-data-dan-privasi-dalam-sistem\/8570\/","title":{"rendered":"Ancaman SQL Injection terhadap Data dan Privasi dalam Sistem"},"content":{"rendered":"<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-8571\" src=\"https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar1-75.jpg\" alt=\"\" width=\"350\" height=\"199\" srcset=\"https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar1-75.jpg 350w, https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar1-75-300x171.jpg 300w, https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar1-75-150x85.jpg 150w\" sizes=\"(max-width: 350px) 100vw, 350px\" \/><\/p>\n<p>Oleh: <strong>Dzikri Maulana<\/strong><\/p>\n<p><strong>Apa Itu SQL Injection?<\/strong><br \/>\nSQL injection adalah teknik penyerangan yang dilakukan dengan cara memanipulasi input yang diterima oleh aplikasi web sehingga penyerang dapat menyisipkan atau &#8220;menyuntikkan&#8221; perintah SQL berbahaya ke dalam perintah SQL yang dijalankan oleh database.<br \/>\nHal ini sangat mungkin terjadi apabila adanya celah kerentanan pada input yang diterima oleh sistem, dikarenakan:<\/p>\n<p>\u25cf Input yang Rentan<br \/>\nPenyerang mengirimkan input yang dimodifikasi kemudian dijalankan oleh aplikasi. Ini dapat mencakup penggunaan karakter khusus, seperti tanda kutip tunggal (&#8216;) atau karakter pemisah titik koma (;), untuk mengakhiri perintah SQL yang ada dan menyisipkan perintah SQL berbahaya.<\/p>\n<p>\u25cf Aplikasi Web yang Tidak Aman<br \/>\nApabila inputan rentan dikirim ke sistem tanpa melalui proses validasi, membersihkan, atau memproses input, dapat membuat perintah SQL yang berbahaya dapat dengan mudah disisipkan. Kegagalan validasi input dapat membuat suatu sistem dapat menjadi sasaran empuk serangan ini.<\/p>\n<p><strong>Dampak Serangan<\/strong><br \/>\nSerangan SQL injection dapat menimbulkan dampak yang serius bagi aplikasi web dan penggunanya, antara lain:<br \/>\n\u25cf Mengakses, mencuri, dan data dalam database.<br \/>\n\u25cf Membocorkan informasi sensitif seperti kata sandi atau data pribadi.<br \/>\n\u25cf Mengubah, menghapus, atau merusak data yang ada dalam database.<br \/>\n\u25cf Mengeksploitasi izin database untuk menjalankan tindakan yang tidak diizinkan.<br \/>\n\u25cf Mengambil alih server atau sistem dalam kasus yang ekstrem.<br \/>\nBagaimana SQL Injection Terjadi<\/p>\n<p>1. <strong>Menentukan Target<\/strong><br \/>\nSerangan SQL injection dimulai dengan menentukan target. Target serangan ini biasanya adalah aplikasi web yang menerima input dari pengguna. Input ini bisa berupa formulir pencarian, kolom pengguna, URL, atau parameter input lainnya yang diterima oleh aplikasi dan akhirnya digunakan dalam perintah SQL.<\/p>\n<p>Secara acak, peretas dapat mencari website yang berkemungkinan mempunyai kerentanan SQL Injection dengan cara melakukan Google Dorking. Google Dorking adalah teknik pencarian informasi di internet menggunakan mesin pencari Google dengan menggunakan sintaks khusus. Teknik ini dapat digunakan untuk mencari informasi yang lebih mendalam dan spesifik, bahkan informasi yang tidak dipublikasikan secara terbuka.<\/p>\n<p>2. <strong>Eksploitasi<\/strong><br \/>\nPeretas akan mencoba memasukkan input yang telah dimodifikasi untuk mengeksploitasi kerentanan SQL injection. Input ini biasanya berupa karakter khusus yang dapat digunakan untuk mengendalikan perintah SQL yang dijalankan.<\/p>\n<p><strong>Contoh SQL Injection Sederhana<\/strong><br \/>\nMisalkan ada kolom pencarian di situs web yang memungkinkan pengguna untuk mencari berdasarkan nama pengguna. Jika pengguna memasukkan nama pengguna &#8216; OR 1=1 &#8211;, perintah SQL yang dieksekusi oleh aplikasi mungkin terlihat seperti ini:<br \/>\nSELECT FROM users WHERE username = &#8221; OR 1=1 &#8211;&#8216; AND password = &#8216;&#8230;&#8217;<\/p>\n<p>Perintah SQL di atas akan mengembalikan semua baris dalam tabel pengguna karena kondisi 1=1 selalu benar, dan &#8212; adalah komentar yang mengakhiri perintah SQL sehingga kondisi setelahnya diabaikan. Ini memungkinkan penyerang untuk mengakses data semua pengguna.<\/p>\n<p><strong>Google Dorking<\/strong><br \/>\nGoogle Dorking adalah teknik pencarian informasi di internet menggunakan mesin pencari Google dengan menggunakan sintaks khusus. Teknik ini dapat digunakan untuk mencari informasi yang lebih mendalam dan spesifik, bahkan informasi yang tidak dipublikasikan secara terbuka.<\/p>\n<p>a. Sintaksis Google Dorking<br \/>\nGoogle Dorking menggunakan berbagai sintaksis khusus untuk melakukan pencarian. Sintaksis-sintaksis tersebut dapat digunakan untuk mencari informasi berdasarkan berbagai kriteria, seperti:<br \/>\n\u25cf site: Mencari halaman web di domain tertentu.<br \/>\nsite:example.com<br \/>\n\u25cf intitle: Mencari halaman web yang judulnya mengandung string tertentu.<br \/>\nintitle:&#8221;kata yang ingin dicari pada judul&#8221;<br \/>\n\u25cf inurl: Mencari halaman web yang tautannya mengandung string tertentu.<br \/>\ninurl:&#8221;login.php&#8221;<br \/>\n\u25cf filetype: Mencari halaman web yang memiliki ekstensi file tertentu.<br \/>\nfiletype:php<br \/>\n\u25cf link: Mencari halaman web yang direferensikan oleh halaman web lain.<br \/>\nlink:example.com<br \/>\n\u25cf cache: Mencari versi cache halaman web tertentu.<br \/>\ncache:example.com<\/p>\n<p>Dalam konteks pembahasan ini, Google Dorking digunakan untuk mencari situs yang mempunyai kemungkinan kerentanan SQL injection, Berikut adalah beberapa contoh penggunaan Google Dorking:<\/p>\n<p>Cari halaman web yang pada tautannya terdapat &#8220;php?id=&#8221;<br \/>\ninurl:&#8221;php?id=&#8221;<\/p>\n<p>Ini bertujuan untuk mencari halaman web dengan bahasa pemrograman PHP yang mempunyai parameter, dengan harapan parameter dapat menyebabkan kerentanan SQL Injection<\/p>\n<p><strong>Blind SQL Injection<\/strong><br \/>\nBlind SQL Injection Blind SQL Injection adalah salah sebuah teknik SQL injection yang dimana berbeda pada biasanya. Jika SQL Injection, saat kita melakukan injection akan menampilkan sebuah hasil, namun pada Blind SQL Injection tidak menampilkan hasil apapun. Dengan kata lain, attacker harus mencoba setiap kemungkinan untuk mendapatkan hasil tersebut.<\/p>\n<p>Ada dua jenis Blind SQL Injection: Content-based Blind SQL Injection Time-based Blind SQL Injection Content-Based Blind SQL Injection Contohnya, jika kita membuka halaman web e-commerce, lalu mengakses salah satu item di web tersebut maka akan menampilkan URL sebagai berikut:<\/p>\n<p>\u25cf http:\/\/www.ecommerce.com\/item.php?id=10<br \/>\nKode SQL yang digunakan pada request ini:<br \/>\n\u25cf SELECT column_name, column_name2 FROM table_name WHERE id = 10;<br \/>\nContent-Based Blind SQL Injection Attacker bisa saja memanipulasi request nya seperti berikut:<br \/>\n\u25cf http:\/\/www.ecommerce.com\/item.php?id=10 and 1=2<br \/>\nKode SQL yang digunakan pada request ini berubah menjadi:<br \/>\n\u25cf SELECT column_name2 FROM table_name WHERE id = 10 and 1=2;<br \/>\n\u25cf SELECT name, about, price FROM store_table WHERE id = 10 and 1=2;<br \/>\nContent-Based Blind SQL Injection Lalu attacker memanipulasi request nya seperti berikut:<br \/>\n\u25cf http:\/\/www.ecommerce.com\/item.php?id=10 and 1=1<br \/>\nKode SQL yang digunakan pada request ini berubah menjadi:<br \/>\n\u25cf SELECT column_name2 FROM table_name WHERE id = 10 and 1=1;<br \/>\n\u25cf SELECT name, about, price FROM store_table WHERE id = 10 and 1=1;<br \/>\nTime-Based Blind SQL Injection Contohnya adalah sebagai berikut:<br \/>\n\u25cf http:\/\/www.ecommerce.com\/item.php?id=10 and if(1=1, sleep(10), false)<br \/>\nSaat melakukan Time-Based Blind SQL Injection, attacker membuat database melakukan operasi yang membutuhkan waktu yang lama. Jika database tidak merespon dengan segera, maka ada kerentanan terhadap Blind SQL Injection.<br \/>\nPenanganan yang Kurang Tepat untuk Mengatasi SQL Injection<\/p>\n<p>Ada beberapa penanganan yang dapat dilakukan untuk mengatasi SQL injection. Namun, ada beberapa penanganan yang kurang tepat dan dapat menyebabkan serangan SQL injection tetap terjadi.<\/p>\n<p>\u25cf Pengamanan dengan pembatasan input pada halaman HTML<br \/>\nSalah satu penanganan yang kurang tepat untuk mengatasi SQL injection adalah dengan membatasi input pada halaman HTML. Penanganan ini dilakukan dengan cara menggunakan atribut `type` pada elemen input untuk membatasi jenis input yang dapat dimasukkan oleh pengguna.<br \/>\nMisalnya, untuk membatasi input hanya berupa pilihan angka, kita dapat menggunakan elemen1&lt; \/option&gt;<\/p>\n<p>Penanganan ini kurang tepat karena tidak dapat mencegah penyerang untuk memasukkan karakter khusus dengan cara memanipulasinya dengan inspect element ataupun memanipulasi lalu lintas jaringan, contohnya dengan BurpSuite.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-8572\" src=\"https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar2-8.png\" alt=\"\" width=\"549\" height=\"559\" srcset=\"https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar2-8.png 549w, https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar2-8-295x300.png 295w, https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar2-8-150x153.png 150w, https:\/\/jurnalpost.com\/read\/wp-content\/uploads\/2023\/12\/Gambar2-8-300x305.png 300w\" sizes=\"(max-width: 549px) 100vw, 549px\" \/><\/p>\n<p>\u25cf Mengamankan dengan membatasi output melalui query SQL<\/p>\n<p>Penanganan yang kurang tepat lainnya adalah dengan membatasi output melalui query SQL. Penanganan ini dilakukan dengan cara mengubah query sql, misalkan membuat query sql yang memastikan hanya ada 1 outputan yang muncul, hal ini tentu kurang efektif, mengingat peretas bisa memanipulasi query tersebut<br \/>\n$query = &#8220;SELECT first_name, last_name FROM users WHERE user_id = &#8216;$id&#8217; LIMIT 1;&#8221;;<br \/>\nperetas dapat memanipulasinya dengan menonaktifkan kode setelah inputan menggunakan sintaks \u2018- &#8211; \u2018<br \/>\n$query = &#8220;SELECT first_name, last_name FROM users WHERE user_id = &#8216;1 union select first_name, password from users; &#8211; &#8211; &#8216; LIMIT 1;&#8221;;<\/p>\n<p><strong>Penanganan SQL Injection yang tepat<\/strong><br \/>\n<strong>1. Parameterize Query dan Sanitasi Input<\/strong><\/p>\n<p>Salah satu cara untuk mencegah serangan SQL Injection adalah dengan menggunakan parameterized query. Parameterized query adalah teknik penulisan query SQL yang menggunakan parameter alih-alih memasukkan nilai secara langsung ke dalam query.<br \/>\nDengan menggunakan parameterized query, nilai yang dimasukkan oleh pengguna akan diproses terlebih dahulu sebelum dieksekusi oleh database. Hal ini akan membantu mencegah serangan SQL Injection karena nilai yang dimasukkan oleh pengguna tidak akan langsung diproses oleh database.<\/p>\n<p>Berikut adalah contoh penggunaan parameterized query dalam PHP:<\/p>\n<p>\/\/ Kode yang rentan terhadap SQL Injection<br \/>\n$query = &#8220;SELECT * FROM store_table WHERE name = &#8216; &#8221; . $input . &#8221; &#8216; &#8220;;<br \/>\n$statement = $connection-&gt;createStatement();<br \/>\n$resultSet = $statement-&gt;executeQuery($query);<\/p>\n<p>\/\/ Kode yang aman menggunakan parameterized query<br \/>\n$preparedStatement = $connection-&gt;prepareStatement(&#8220;SELECT * FROM store_table WHERE name = ?&#8221;);<br \/>\n$preparedStatement-&gt;setString(1, $input);<br \/>\n$resultSet = $preparedStatement-&gt;executeQuery();<\/p>\n<p><strong>2. Sanitasi Input<\/strong><br \/>\nSelain menggunakan parameterized query, cara lain untuk mencegah serangan SQL Injection adalah dengan melakukan sanitasi input. Sanitasi input adalah proses untuk memvalidasi input dari pengguna untuk memastikan bahwa input tersebut tidak mengandung karakter berbahaya yang dapat dimanfaatkan oleh penyerang.<\/p>\n<p>Berikut adalah beberapa contoh penerapan sanitasi input menggunakan regex dalam PHP:<\/p>\n<p>Menghapus karakter non-alfanumerik<br \/>\n$input = &#8220;Hello, 123!&#8221;;<br \/>\n$cleaned_input = preg_replace(&#8216;\/[^a-zA-Z0-9]\/&#8217;, &#8216; &#8216;, $input);<br \/>\necho $cleaned_input; \/\/ Output: &#8220;Hellol23&#8221;<br \/>\n&#8220;`<br \/>\n<strong>Melarang karakter khusus<\/strong><br \/>\n$input = &#8220;Hello, <script>alert('XSS');<\/script>&#8220;;<br \/>\n$sanitized_input = preg_replace(&#8216;\/&lt;[^&gt;]*&gt;\/&#8217;, &#8221;, $input);<br \/>\necho $sanitized_input; \/\/ Output: &#8220;Hello, XS5&#8221;<br \/>\n&#8220;`<br \/>\n<strong>Mengevalidasi input hanya berisi angka<\/strong><\/p>\n<p>$input = &#8220;12345&#8221;;<br \/>\nif (preg_match(&#8216;\/^[0-9]+$\/&#8217;, $input)) {<br \/>\necho &#8220;Input valid.&#8221;;<br \/>\n} else {<br \/>\necho &#8220;Input tidak valid.&#8221;;<br \/>\n}<\/p>\n<p><strong>Penerapan Langkah Pencegahan SQL Injection pada Proyek<\/strong><br \/>\nDari langkah pencegahan di atas, contoh penerapannya dalam kasus langsung adalah sebagai berikut:<br \/>\n<!--?php session_start(); \/\/ db config $db = new PDO('mysql:host=localhost;dbname=dvwa', 'root', ''); \/\/ Check if the form is submitted if (isset($_POST['Submit'])) { \/\/ Get input $input = $_POST['id']; $id = preg_replace('\/[^0-9]\/', '', $input); $id = intval($id); \/\/ Use parameterized queries to prevent SQL Injection \/\/ Check the database $data = $db-&gt;prepare('SELECT first_name, last_name FROM users WHERE user_id = :id LIMIT 1;');&lt;br ?--> $data-&gt;bindParam(&#8216;:id&#8217;, $id, PDO::PARAM_INT);<br \/>\n$data-&gt;execute();<br \/>\n$row = $data-&gt;fetch();<\/p>\n<p>\/\/ Make sure only 1 result is returned<br \/>\nif ($data-&gt;rowCount() == 1) {<br \/>\n\/\/ Get values<br \/>\n$first = $row[&#8216;first_name&#8217;];<br \/>\n$last = $row[&#8216;last_name&#8217;];<\/p>\n<p>\/\/ Feedback for end user<br \/>\necho &#8221;<\/p>\n<pre>ID: {$id}\r\nFirst name: {$first}\r\nSurname: {$last}<\/pre>\n<p>&#8220;;<br \/>\n}<\/p>\n<p>}<br \/>\n?&gt;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oleh: Dzikri Maulana Apa Itu SQL Injection? SQL injection adalah teknik penyerangan yang dilakukan dengan cara memanipulasi input yang diterima oleh aplikasi web sehingga penyerang dapat menyisipkan atau &#8220;menyuntikkan&#8221; perintah SQL berbahaya ke dalam perintah SQL yang dijalankan oleh database. Hal ini sangat mungkin terjadi apabila adanya celah kerentanan pada input yang diterima oleh sistem, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jnews-multi-image_gallery":[],"jnews_single_post":[],"jnews_primary_category":[],"jnews_override_counter":[],"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8570","post","type-post","status-publish","format-standard","hentry","category-news"],"_links":{"self":[{"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/posts\/8570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/comments?post=8570"}],"version-history":[{"count":0,"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/posts\/8570\/revisions"}],"wp:attachment":[{"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/media?parent=8570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/categories?post=8570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jurnalpost.com\/read\/wp-json\/wp\/v2\/tags?post=8570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}