Membuat Form login Anti SQL Injection Membuat Form login Anti SQL Injection | isMediaNet

Kamis, 22 September 2011

Membuat Form login Anti SQL Injection

Membuat form login anti SQL injeksi, SQL injection


Nah temen-temen mungkin pernah bikin web padahal halaman adminnya sudah dikasih halaman validasi atau login supaya tidak semua orang bisa masuk sebagai admin koq ya tetep aja ada yang iseng merusaknya.. nah mungkin itu karena form login temen-temen belum sepenuhnya aman. Coba dah temen-temen tuliskan ‘OR 1=1”// pada form username dengan password bebas da… apa hasilnya? Jika muncul tanda error seperti ketika temen-temen error menjalankan script PHP ketika belajar, nah itu tandanya  formnya belum aman,dengan  SQL tertentu bisa saja seorang hacker bisa masuk meskipun tanpa otoritas melakukan operasi yang tidak seharusnya.


Untuk menangani hal tersebut, temen-temen sebaginya merubah tiap masukkan dari form menjadi teks biasa, jadi tulisan yang dimasukkan lewat form tidak dikenali sebagai perintah. Nah teman-teman bisa memanfaatkan fungsi yang disediakan oleh PHP,  seperti stripslashes(),strip_tags(),htmlspecialchars(). Itu fungsinya buat apa, nah kalo untuk itu secara umum untuk merubah tiap masukkan dari form menjadi text biasa, untuk jelasnya silakan baca di manual PHP gratis yang dapat di unduh di  <sini>


Terus bagaimana praktiknya? Liat aja ni…









function anti_injection($data){

$filter = stripslashes(strip_tags(htmlspecialchars($data,ENT_QUOTES)));

return $filter;

}

NOTE: $data berupa masukan dari form.

Login.php






<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>

<title>

</title>

<link href="default.css" rel="stylesheet" type="text/css" media="screen">

<script language="javascript">

function validasi(form){

if (form.user_name.value == ""){

alert("Anda belum mengisikan Username.");

form.user_name.focus();

return (false);

}

if (form.password.value == ""){

alert("Anda belum mengisikan Password.");

form.password.focus();

return (false);

}

return (true);

}

</script>

</head>

<body bgcolor="#edeff3">

<div id="loginbox">

<div class="top-login">

</div>

<div class="main-login">

<div class="login-header">

<div class="logo">

<span class="title">

<img src="images/logo.png" alt="" width="185" height="80" class="picture" />

</span>

</div>

</div>

<form name="login" action="validasi.php" method="POST" onSubmit="return validasi(this)">

<div class="login-inside">

<div class="login-data">

<table width="100%" border="0" cellspacing="0" cellpadding="0">

<tr>

<td><div align="center">

<table cellpadding="0" cellspacing="0">

<tr>

<td height="25">Username</td>

<td> :

<input type="text" name="user_name"  class="text" /></td>

</tr>

<tr>

<td height="26">Password</td>

<td> :

<input type="password" class="text" name="password" /></td>

</tr>

<tr>

<td colspan="2"><div align="right">

<input name="submit"  class="submit" type="submit" value="LOGIN" />

</div></td>

</tr>

</table>

</div></td>

</tr>

</table>

</div>

</div>

</form>

</div>

<div class="bottom-login"></div>

</div>

<p align="center"><small>&copy;&nbsp; Copy Right 2011 &nbsp;&nbsp; Design by Islah Production</p>

</body>

</html>

Validasi.php






<?php

include("../konfigurasi/config.php");

konek_db();

$user      =anti_injection($_POST['user_name']);

$password  =anti_injection(md5($_POST['password']));

if (!(ctype_alnum($user)) OR !(ctype_alnum($password))){

header("location:notifi.php?tanda=tipe_data");

}else{

$sql="SELECT * FROM users WHERE user_name='$user' AND password='$password' AND status_blokir='N'";

$login=mysql_query($sql) or die("ERROR".mysql_error());

$ketemu=mysql_num_rows($login);

// Apabila user dan password ditemukan

if ($ketemu > 0){

$r=mysql_fetch_array($login);

session_start();

include "timeout.php";

//menginstance session dengan data di database

$_SESSION[namauser]     = $r[user_name];

$_SESSION[namalengkap]  = $r[nama_lengkap];

$_SESSION[passuser]     = $r[password];

$_SESSION[leveluser]    = $r[level];

$_SESSION[status_blokir]= $r[status_blokir];

// session timeout

$_SESSION[login] = 1;

timer();

$sid_lama = session_id();

session_regenerate_id();

$sid_baru = session_id();

//update session user supaya lebih aman

$sql_update_session="UPDATE users SET id_session='$sid_baru' WHERE user_name='$user'";

mysql_query($sql_update_session) or die("ERROR".mysql_error());

header('location:media.php?module=home');

}else{

header("location:notifi.php?tanda=user");

}

}

?>

Timeout.php






<?php

session_start();

function timer(){

$time=6;

return $_SESSION[timeout]=time()+$time;

}

function cek_login(){

$timeout=$_SESSION[timeout];

if(time()<$timeout){

timer();

return true;

}else{

unset($_SESSION[timeout]);

return false;

}

}

?>

Notify.php

<?php

if ($_GET['tanda']=='tipe_data'){

$alert="TIPE DATA MASUKKAN TIDAK DIKENALI!";

}else if ($_GET['tanda']=='user'){

$alert="KOMBINASI PASSWORD DAN USER TIDAK DIKENALI!";

}else if ($_GET['tanda']=='time'){

$alert="TIME UP!";

}else if ($_GET['tanda']=='autority'){

$alert="SILAKAN LOGIN TERLEBIH DAHULU!";

}

echo"

<p align='center' style='margin-top:130px;color:#e93f0a;'>

<img src='images/Warnings.png' width='140px' height='140px'><br />

<b>$alert</b><br />

<a href=index.php>[back]</a>

</p>

";

?>

Penjelasan

Login.php untuk tampilan form login

Validasi.php untuk melakukan pengecekkan dan fungsi antiinjection dipanggil disini

Notify.php untuk peringatan

Timeout.php untuk automatis log out jika tidak ada operasi

Default.css untuk tampilan yang bagus

download kelengkapannya disini

dokumen

Source code


1 komentar:

Posting Komentar