Mencegah SQL Injection II

Selamat malem gan, karena ada request dari pembaca untukCara mengatasi Install DotNet 3.5 Windows 8. Read more ... » dibuatkan tulisan beserta contohnya SQL injectionHavij 1.3 Pro Full Version. Read more ... », maka kaliMenjalankan Aplikasi Android di Windows. Read more ... » ini sayaMembuka Command Prompt mode Administrator. Read more ... » akan coba sedikit share gimana sih Pencegahan SQL injection pada url, berikut saya kasih contoh anti SQL InjectionAnti SQL Injection II. Read more ... »?Oke langsung aja gan, buat database bernama db_injek kemudian buat tabel berikut gan :

CREATE TABLE `tb_artikel` (
  `id` varchar(4) collate latin1_general_ci NOT NULL,
  `judul` varchar(200) collate latin1_general_ci NOT NULL,
  `isi` text collate latin1_general_ci NOT NULL,
  `tgl` date NOT NULL,
  `user` varchar(10) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

INSERT INTO `tb_artikel` VALUES ('1', 'SQl injection', 'An often used way to attack the security of a website is to input SQL statements in a web form to get a badly designed website to dump the database content to the attacker - an SQL injection. It''s a code injection technique that exploits a security vulnerability in a website''s software. The vulnerability happens when user input is either incorrectly filtered for string literal escape characters embedded in SQL statements or user input is not strongly typed and unexpectedly executed. SQL commands are thus injected from the web form into the database of an application (like queries) to change the database content or dump the database information like credit card or passwords to the attacker. SQL injection is mostly known as an attack vector for websites but can be used to attack any type of SQL database.rnUsing well designed query language interpreters can prevent SQL injections. In the wild, it has been noted that applications experience, on average, 71 attempts an hour.[1] When under direct attack, some applications occasionally came under aggressive attacks and at their peak, were attacked 800-1300 times per hour', '2011-11-12', 'admin');
INSERT INTO `tb_artikel` VALUES ('2', 'Xss Injection', 'XSS merupakan kependekan yang digunakan untuk istilah cross site scripting.rnXSS merupakan salah satu jenis serangan injeksi code (code injection attack). XSS dilakukan oleh penyerang dengan cara memasukkan kode HTML atau client script code lainnya ke suatu situs. Serangan ini akan seolah-olah datang dari situs tersebut. Akibat serangan ini antara lain penyerang dapat mem-bypass keamanan di sisi klien, mendapatkan informasi sensitif, atau menyimpan aplikasi berbahaya.rnAlasan kependekan yang digunakan XSS bukan CSS karena CSS sudah digunakan untuk cascade style sheet.rn[sunting]Tipe XSSrnReflected atau nonpersistentrnStored atau persistentrn[sunting]Reflected XSSrnReflected XSS merupakan tipe XSS yang paling umum dan yang paling mudah dilakukan oleh penyerang. Penyerang menggunakan social engineering agar tautan dengan kode berbahaya ini diklik oleh pengguna. Dengan cara ini penyerang bisa mendapatkan cookie pengguna yang bisa digunakan selanjutnya untuk membajak session pengguna.rnMekanisme pertahanan menghadapi serangan ini adalah dengan melakukan validasi input sebelum menampilkan data apapun yang di-generate oleh pengguna. Jangan percayai apapun data yang dikirim oleh pengguna.rn[sunting]Stored XSSrnStored XSS lebih jarang ditemui dan dampak serangannya lebih besar. Sebuah serangan stored XSS dapat berakibat pada seluruh pengguna. Stored XSS terjadi saat pengguna diizinkan untuk memasukkan data yang akan ditampilkan kembali. Contohnya adalah pada message board, buku tamu, dll. Penyerang memasukkan kode HTML atau client script code lainnya pada posting mereka.rnSerangan ini lebih menakutkan. Mekanisme pertahanannya sama dengan reflected XSS: jika pengguna diizinkan untuk memasukkan data, lakukan validasi sebelum disimpan pada aplikasi.', '2011-11-11', 'admin');

CREATE TABLE `tb_user` (
  `user` varchar(10) collate latin1_general_ci NOT NULL,
  `pass` varchar(60) collate latin1_general_ci NOT NULL,
  `level` varchar(10) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

INSERT INTO `tb_user` VALUES ('admin', 'b723f69a66c50bb2d6c77bccaf3866cd', 'admin');

kemudian buat 3 buah file yakni : index.phpMembuat deteksi Browser dengan PHP. Read more ... ». koneksi.php dan style.cssDAFTAR MAHASISWA PERBAIKAN DESAIN WEB. Read more ... », pertama index.php berikut source lengkapnya :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>.:: Ini website Percobaan ::.</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="header">
  <p>1n53ct4 <br />
  SQL Injection Prototype</p>
  <p>&nbsp; </p>
  <div id="menu">
  	<a href="?pg=home">Home</a>
	<a href="?pg=art">Artikel</a>
	<a href="?pg=about">about</a>

  </div>
  <div id="isi">
  <?php
  include "koneksi.php";
  switch($_GET['pg']){
  	default :
  		echo "<center>Selamat datang di percobaan SQL Injection by 1n53ct4<br>
  				<br>Program ini hanya digunakan untuk pembelajaran tidak untuk di upload.<br />
				<br />
				by Muhamad Burhanudin";
  	break;
  	case "art" :
  		$query = mysql_query("SELECT * FROM tb_artikel order by tgl asc");
  			while($t=mysql_fetch_array($query)){
   			$isi_berita = nl2br($t[isi]);
    		$isi = substr($isi_berita,0,410); // ambil sebanyak 410 karakter
    		$isi = substr($isi_berita,0,strrpos($isi," "));
    		echo "<div id='judul'><a href='?pg=detil&id=$t[id]'>$t[judul]</a></div><div id='isinya'>$isi</div><div id='more'><a 				href='?pg=detil&id=$t[id]'>Selengkapnya</a></div>";
  			}
 	break;
 	case "about" :
  		echo "<center><h1>This program just only sample SQL injection Attack</h1><br><br>Coded by<br> Muhamad Burhanudin</center>";
  	break;
  	case "detil" :
   		$id = $_GET['id']; //Id tanpa parsing
  		$query = mysql_query("SELECT * from tb_artikel where id = $id");
		while($t=mysql_fetch_array($query)){
		echo "<div id='judul'>$t[judul]</a></div><div id='isinya'>$t[isi]</div><center><div id='back'>[ <a href=javascript:history.go(-1)>Kembali</a> ]</div>";
		}
  	break;
  }
  ?>
  </div>

  <div id="footer">&copy; 2011 1n53ct4</div>
</div>

</body>
</html>

style.css :

#header {
	font-family: "Courier New", Courier, monospace;
	font-size: large;
	font-style: normal;
	font-weight: bold;
	font-variant: normal;
	text-transform: capitalize;
	color: #0000FF;
	background-color: #000000;
	margin: auto;
	width: 800px;
	padding-top:5px;
	border:#99FF00;
	-moz-border-radius:15px;
	-webkit-border-radius:15px;
}
body {
	background-color: #666666;
	text-align: center;

}
 #menu{
	font-family: Arial, Helvetica, sans-serif;
	font-size: medium;
	text-transform: uppercase;
	color: #99FF00;
	background-color: #333333;
	margin-top:5px;
	margin: auto;padding:5px;
	height: 25px;
	width: 790px;
	text-decoration:none
}#menu a{
	font-family: Arial, Helvetica, sans-serif;
	font-size: medium;
	text-transform: uppercase;
	color: #99FF00;
	background-color: #333333;
	margin-top:5px;
	margin: auto;
	height: 25px;
	width: 800px;
	text-decoration:none
}
#menu a:hover{
	font-family: Arial, Helvetica, sans-serif;
	font-size: medium;
	text-transform: uppercase;
	color: #9900FF;
	background-color: #CCCCCC;
	margin-top:5px;
	margin: auto;-moz-border-radius:15px;
	-webkit-border-radius:15px;
	padding:5px;
	height: 25px;
	width: 800px;
	text-decoration:none
}#isi {
text-align:left;
padding:5px;
	font-family: "Times New Roman", Times, serif;
	font-size: medium;
	font-style: normal;
	background-color: #999999;
	width: 788px;
	-moz-border-radius:15px;
	-webkit-border-radius:15px;
	border: thin dotted #99FF33;
}
#judul{
font-family: "Times New Roman", Times, serif;
	font-size: medium;
	font-style: normal;
color:#000000;
	text-transform:uppercase;
	border-bottom:ridge;
		}
		#isinya{
font-family: "Times New Roman", Times, serif;
	font-size: medium;
	font-style: normal;
-moz-border-radius:15px;
-webkit-border-radius:15px;
padding:2px;
background-color:#CCCCFF;
			}
#more{
text-align:right;
text-decoration:none;
color:#9966FF;
width:inherit;
}#footer {
	font-family: "Courier New", Courier, monospace;
	font-size: large;
	font-style: normal;
	font-weight: bold;
	font-variant: normal;
	text-transform: capitalize;
	color: #0000FF;
	background-color: #000000;
	margin: auto;
	width: 800px;
	padding-top:5px;
	border:#99FF00;
	-moz-border-radius:15px;
	-webkit-border-radius:15px;
}
#isi a:hover{
color:#99FF00;
	}
#back{
-moz-border-radius:15px;
-webkit-border-radius:15px;
background-color:#993399;
}

Terakhir koneksi.php :

<?php
$host = "localhost";
$user = "root";
$pass = "";
$db   = "db_injek";
mysql_connect($host,$user,$pass) or die ("Gagal koneksi");
mysql_select_db($db) or die ("Gagal koneksi database");
?>

jika sudah sekarang coba jalankan dan masuk ke menu Artikel :

Normal Site

Normal Site

Selanjutnya coba klik salahJquery Validasi Angka, Huruf dan Email. Read more ... » selanjutnya pada salah satu artikel.

readmore article

readmore

Sekilas dari URL diatas masih normal, sekarang coba beri tanda petik tunggal (‘) atau tanda minus dan lihat apa yangPengumuman Calon Asisten Praktikum Basisdata. Read more ... » terjadi :

Attack with Single Quote

Attack with Single Quote

Attack with Minus

Attack with minus

Nah dari tampilan diatas web tersebut kurang secure, sekarang kitaCara mengatasi Install DotNet 3.5 Windows 8. Read more ... » akan patch denganCara mengatasi Install DotNet 3.5 Windows 8. Read more ... » menambahkan function anti injeksi, dimana function ini akan mengabaikan mengabaikan nilai minus dan single quote. Sekarang buka kembali file index.php cari baris perintah case “detil” ubah seperti berikut :

case "detil" :
	function antiinjek($data){
		$saring = abs(mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars($data,ENT_QUOTES)))));
		return $saring;
	}
   		$id = antiinjek($_GET['id']); //Id tanpa parsing
  		$query = mysql_query("SELECT * from tb_artikel where id = $id");
		while($t=mysql_fetch_array($query)){
		echo "<div id='judul'>$t[judul]</a></div><div id='isinya'>$t[isi]</div><center><div id='back'>[ <a href=javascript:history.go(-1)>Kembali</a> ]</div>";
		}
  	break;

Selesai web berhasil di patch ­čÖé berikut adalah hasil percobaan setelah patch :

minus Attack

Minus attack

Single Quote attack

Single Quote Attack

Selamat mencoba untuk contoh program bisa download disni.
by Muhamad Burhanudin

Posted in Hacking, PHP & mySQL, Programing and tagged , , , .