{"id":1770,"date":"2014-10-09T07:42:40","date_gmt":"2014-10-09T07:42:40","guid":{"rendered":"http:\/\/blog.jaringanhosting.com\/?p=1770"},"modified":"2014-10-09T07:49:14","modified_gmt":"2014-10-09T07:49:14","slug":"php-hosting-indonesia-jaringanhosting-com-cara-melindungi-website-php-anda-dari-sql-injections","status":"publish","type":"post","link":"https:\/\/blog.jaringanhosting.com\/index.php\/php-hosting-indonesia-jaringanhosting-com-cara-melindungi-website-php-anda-dari-sql-injections\/","title":{"rendered":"PHP Hosting Indonesia &#8211; JaringanHosting.com :: Cara Melindungi Website PHP Anda dari SQL Injection"},"content":{"rendered":"<p style=\"text-align: justify;\">Sebagai developer\u00a0web, saya sering membaca artikel tentang hacker, yang dimana hacker tersebut melakukan infiltrasi website melalui metode yang ditakuti yaitu &#8216;SQL Injection&#8217; dan kemudian hacker tersebut benar-benar mengambil kendali, merubah, mendapatkan akses, atau merusak website yang telah berhasil diobobol olehnya. Sebagai sesama web developer,\u00a0saya yakin Anda ingin tahu bagaimana untuk <span style=\"text-decoration: underline;\"><strong>melindungi website anda dari SQL Injection<\/strong><\/span>. Jika pada artikel sebelumnya saya pernah\u00a0membahas tentang <a href=\"http:\/\/blog.jaringanhosting.com\/index.php\/windows-hosting-indonesia-jaringanhosting-com-kronologis-dns-hijacking-google-indonesia\/\">Cara Menemukan SQL Injections Menggunakan HTTP Logs<\/a>.\u00a0Pada artikel ini, Anda akan mengetahui <span style=\"text-decoration: underline;\"><strong>apa itu SQL Injection<\/strong><\/span>, apa yang dapat Anda lakukan untuk <span style=\"text-decoration: underline;\"><strong>mencegah serangan SQL Injection<\/strong><\/span>, dan rekomendasi tambahan dari saya yang mudah untuk dilakukan\u00a0untuk membuat website Anda lebih aman.<\/p>\n<p><a href=\"http:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/10\/thief-web-197x395.png\"><img loading=\"lazy\" class=\"size-medium wp-image-1788 aligncenter\" src=\"http:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/10\/thief-web-197x395-149x300.png\" alt=\"thief-web-197x395\" width=\"149\" height=\"300\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><strong>Sebenarnya, Apa itu SQL Injections?<\/strong><\/p>\n<blockquote>\n<p style=\"text-align: justify;\">Pada dasarnya, SQL Injection adalah metode hacking yang digunakan terhadap situs web untuk mendapatkan akses ke data situs yang\u00a0disimpan di dalam database SQL. SQL Injection digunakan untuk mendapatkan akses ke informasi database, untuk menghancurkan informasi database, atau untuk memanipulasi informasi database.<\/p>\n<\/blockquote>\n<p style=\"text-align: justify;\"><strong>Contoh :<\/strong><\/p>\n<p style=\"text-align: justify;\">Misalkan Anda seorang profesional dengan bisnis Anda sendiri. Anda telah membuat database SQL dengan tabel yang berisi semua informasi klien Anda, yang Anda gunakan untuk mengirimkan pemberitahuan penting, penagihan, dll. Anda butuh satu tahun untuk mendapatkan 50.000 klien yang sangat penting.<\/p>\n<p style=\"text-align: justify;\">Contohnya ini adalah SQL query Anda di\u00a0PHP log-in script Anda :<\/p>\n<pre class=\"lang:default decode:true \">&lt;?\r\n\r\n$q = \"SELECT `id` FROM `users` WHERE `username`= ' \" .$_GET['username']. \" ' AND `password`= ' \" .$_GET['password']. \" ' \";\r\n\r\n?&gt;<\/pre>\n<p>Suatu hari, seorang hacker mengatakan bahwa dirinya telah berhasil masuk ke dalam databese\u00a0anda. Ia menggunakan username Anda lalu Login<\/p>\n<pre class=\"lang:default decode:true \">';SHOW TABLES;<\/pre>\n<p>Si hacker tersebut kini telah berhasil masuk kemudian melihat setiap <em>table<\/em> di databese Anda. Sampai si hacker tersebut mengetahui nama <em>table<\/em> Anda kemudian melakukan :<\/p>\n<pre class=\"lang:default decode:true \">';DROP TABLE [nama table Anda];<\/pre>\n<p>Maka dengan begitu semua informasi di <em>table<\/em> Anda tersebut akan hilang. Karena si hacker tersebut baru saja men-<em>drop table<\/em> Anda. Lalu apa yang bisa kita lakukan untuk mencegah hal buruk ini terjadi? Berikut saya\u00a0akan memberikan info kepada Anda untuk langkah apa saja yang perlu Anda lakukan sekligus rekomendasi dari saya.<\/p>\n<p style=\"text-align: justify;\"><strong>Langkah 1 :\u00a0Gunakan mysql_real_escape_string ()\u00a0<\/strong><\/p>\n<p>Fungsi PHP ini pas untuk digunakan dalam query SQL dan melindungi Anda dari serangan. Query\u00a0Anda\u00a0\u00a0sekarang akan terlihat seperti ini:<\/p>\n<pre class=\"lang:default decode:true \">&lt;?\r\n$q = \"SELECT `id` FROM `users` WHERE `username`= ' \" .mysql_real_escape_string( $_GET['username'] ). \" ' AND `password`= ' \" .mysql_real_escape_string( $_GET['password'] ). \" ' \"; \r\n\r\n?&gt;<\/pre>\n<p><strong>Langkah ke 2 : Gunakan mysql_query ()\u00a0<\/strong> Menggunakan &#8216;mysql_query ()&#8217; berarti Anda memiliki perlindungan tambahan terhadap SQL Injection. Tanpa\u00a0&#8216;mysql_query ()&#8217; dapat memungkinkan hacker untuk menggunakan beberapa perintah SQL dari &#8216;username&#8217; field\u00a0Anda, bukan hanya satu,\u00a0ada juga\u00a0kerentanan lain. &#8216;mysql_query ()&#8217; hanya akan memberikan izin\u00a0satu perintah pada satu waktu. Jadi, query Anda\u00a0sekarang akan terlihat seperti ini:<\/p>\n<pre class=\"lang:default decode:true \">&lt;?\r\n\r\n\/\/connection\r\n$database = mysql_connect(\"localhost\", \"username\",\"password\");\r\n\r\n\/\/db selection\r\nmysql_select_db(\"database\", $database);\r\n\r\n$q = mysql_query(\"SELECT `id` FROM `users` WHERE `username`= ' \" .mysql_real_escape_string( $_GET['username'] ). \" ' AND `password`= ' \" .mysql_real_escape_string( $_GET['password'] ). \" ' \", $database);  \r\n\r\n?&gt;<\/pre>\n<p><strong>Rekomendasi 1: Pusatkan\u00a0Koneksi Databese Anda\u00a0<\/strong> Di dalam script Anda,\u00a0Anda harus memusatkan koneksi databese Anda ke satu halaman. Pada setiap halaman yang\u00a0yang dibutuhkan,\u00a0cukup gunakan fungsi\u00a0&#8216;include ()&#8217; untuk memasukkan halaman yang informasi koneksi databasenya di SQL Anda. Hal ini akan memaksa Anda untuk membuat query dengan format yang sama pada setiap halaman yang Anda buat, dan mengurangi kemungkinan kesalahan\u00a0yang menghasilkan sebuah bug. Jadi, katakanlah kita membuat\u00a0sebuah file\u00a0yang disebut &#8216;connections.php&#8217; dan masukkan kode ini ke dalam file tersebut:<\/p>\n<pre class=\"lang:default decode:true \">&lt;?\r\n\r\n\/\/connection\r\n$database = mysql_connect(\"localhost\", \"username\",\"password\");\r\n\r\n\/\/db selection\r\nmysql_select_db(\"database\", $database);\r\n\r\n?&gt;\r\n\r\nWe could modify our query using the new setup. Our log-in page would have:\r\n\r\n&lt;?\r\n\r\ninclude(\"connections.php\");\r\n\r\n$q = mysql_query(\"SELECT `id` FROM `users` WHERE `username`= ' \" .mysql_real_escape_string( $_GET['username'] ). \" ' AND `password`= ' \" .mysql_real_escape_string( $_GET['password'] ). \" ' \", $database); \r\n\r\n?&gt;<\/pre>\n<p><strong>Rekomendasi 2: <em>Clean Data<\/em>\u00a0pada Awal Page<\/strong> Banyak bahasa pemrograman memaksa Anda untuk mendeklarasikan variabel sebelum Anda dapat menggunakannya di sepanjang script. PHP tidak memaksa Anda untuk melakukan hal ini, namun, itu adalah kebiasaan yang baik untuk membersihkan variabel di awal halaman. Tentu seseorang akan\u00a0\u00a0bertanya, &#8220;Jika saya membersihkan setiap variabel di seluruh halaman, mengapa saya harus membersihkan variabel di atas? Apakah aku tidak melakukan hal yang sama dengan rekomendasi Anda?&#8221;. Hal ini lebih mudah jika\u00a0Anda membersihkan variabel di awal halaman untuk beberapa alasan yang berbeda, di luar format.<\/p>\n<ul>\n<li>Mengurangi jumlah kode yang Anda tulis.<\/li>\n<li>Setelah variabel bersih, Anda dapat menggunakannya secara bebas di seluruh halaman, tanpa takut ada sebuah bug.<\/li>\n<li>Terasa lebih bersih dan lebih terorganisir, memungkinkan Anda untuk bekerja lebih mudah, dan menghindari kesalahan.<\/li>\n<\/ul>\n<p>Jika kita membersihkan variabel di awal halaman, script\u00a0kita akan terlihat seperti ini:<\/p>\n<pre class=\"lang:default decode:true \">&lt;?\r\n\r\ninclude(\"connections.php\");\r\n\r\n$username = mysql_real_escape_string( $_GET['username'] );\r\n$password = mysql_real_escape_string( $_GET['password'] );\r\n\r\n$q = mysql_query(\"SELECT `id` FROM `users` WHERE `username`= ' \" .$username. \" ' AND `password`= ' \" .$password. \" ' \", $database); \r\n\r\n?&gt;<\/pre>\n<p>Mengurangi jumlah yang harus Anda ketikkan lebih lanjut. Lihatlah contoh berikut.<\/p>\n<pre class=\"lang:default decode:true \">&lt;?\r\n\r\nfunction cleaner($input){\r\n\r\n\/\/clean variable, including mysql_real_escape_string()\r\n\r\n}\r\n\r\ninclude(\"connections.php\");\r\n\r\n$username = cleaner( $_GET['username'] );\r\n$password = cleaner( $_GET['password'] );\r\n\r\n$q = mysql_query(\"SELECT `id` FROM `users` WHERE `username`= ' \" .$username. \" ' AND `password`= ' \" .$password. \" ' \", $database); \r\n\r\n?&gt;<\/pre>\n<p><strong>Rekomendasi 3: Periksa\u00a0Lagi, Bahkan Setelah Anda melakukan\u00a0<em>Cleaning Data<\/em><\/strong> Anda dapat melakukan pemeriksaan tambahan untuk mencegah proses yang tidak penting berjalan pada server Anda. Hal ini dicapai dengan menambahkan script check\u00a0seperti berikut ini :<\/p>\n<pre class=\"lang:default decode:true \">&lt;?\r\n\r\nfunction cleaner($input){\r\n\r\n\/\/clean variable, including mysql_real_escape_string()\r\n\r\n}\r\n\r\ninclude(\"connections.php\");\r\n\r\n$username = cleaner( $_GET['username'] );\r\n$password = cleaner( $_GET['password'] );\r\n\r\n\/\/Check if the input is blank.\r\n\r\nif( ($password == '') || ($username == '')){\r\n\r\n\/\/dont let them pass\r\n\r\n} \r\n\r\n\/\/Check if they are putting in way too many characters than should be allowed. \r\n\r\nelse if( (strlen($username) &gt; 20) || (strlen($password)&gt; 20) ){\r\n\r\n\/\/dont let them pass\r\n\r\n}\r\n\r\n\/\/Passed all of our checks! Run query.\r\n\r\nelse {\r\n\r\n$q = mysql_query(\"SELECT `id` FROM `users` WHERE `username`= ' \" .$username. \" ' AND `password`= ' \" .$password. \" ' \", $database); \r\n\r\n}\r\n\r\n?&gt;<\/pre>\n<p>Sekarang Anda telah berhasil melakukan <span style=\"text-decoration: underline;\"><strong>pencegahan terhadap SQL Injections<\/strong><\/span>. Sekian mengenai\u00a0<span style=\"text-decoration: underline;\"><strong>Cara Melindungi Website PHP Anda dari SQL Injections.<\/strong><\/span>\u00a0Semoga bermanfaat<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sebagai developer\u00a0web, saya sering membaca artikel tentang hacker, yang dimana hacker tersebut melakukan infiltrasi website melalui metode yang ditakuti yaitu &#8216;SQL Injection&#8217; dan kemudian hacker tersebut benar-benar mengambil kendali, merubah, mendapatkan akses, atau merusak website yang telah berhasil diobobol olehnya.<\/p>\n","protected":false},"author":4710,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,630,631,4],"tags":[633,607,632,636,634,635,638,637],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts\/1770"}],"collection":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/users\/4710"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/comments?post=1770"}],"version-history":[{"count":0,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts\/1770\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/media?parent=1770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/categories?post=1770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/tags?post=1770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}