Dapatkan info setiap update artikel! Subscribe Now!

Cara Memperbaiki Celah Bypass Admin Login Pada Website

Cara Memperbaiki Celah Bypass Admin Login Pada Website
Setelah membahas mengenai Cara Memperbaiki Celah SQL Injection, kali ini kita akan membahas mengenai cara memperbaiki bug atau celah pada form admin login atau dikenal dengan istilah Bypass Admin Login. Bug inipun sejatinya sama seperti bug SQL Injection, yakni terjadi sepenuhnya merupakan kesalahan dari Web Programmer ataupun Web Developer.

Di sini kami mencoba menyediakan solusi untuk memperbaiki bug tersebut. Lagi-lagi penyebab adanya bug ini karena tidak terfilternya Request Method, dalam kasus ini yakni Method Post. Jadi, bagaimana cara memperbaikinya? Mari simak baik-baik artikel selanjutnya.

Untuk studi kasus, saya mempunyai file dengan nama login.php yang isinya seperti di bawah ini.


<?php
$conn = mysqli_connect("localhost", "root", "", "blog");
if (isset($_POST["login"])) {
	$username = $_POST["username"];
	$password = $_POST["password"];

	$result = mysqli_query($conn, "SELECT * FROM admin WHERE username = '$username' AND password = '$password'");
	if (mysqli_num_rows($result) > 0) {
		header("Location: index.php");
		exit;
	}
	$error = true;
}
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Admin Login</title>
	<link rel="stylesheet" href="style.css">
</head>
<body>
	<div class="wrapper">
		<form action="" method="post">
			<div class="wrapper-username">
				<label for="username">Username</label>
				<input type="text" name="username" id="username" required="required">
			</div>
			<div class="wrapper-password">
				<label for="password">Password</label>
				<input type="password" name="password" id="password" required="required">
			</div>
			<?php if (isset($error)) : ?>
			<p style="color: red;font-style: italic;text-align: center;">Username / Password Salah!!!</p>
			<?php endif; ?>
			<button type="submit" name="login">Submit</button>
			<div class="clear"></div>
		</form>
	</div>
</body>
</html>

Namun yang perlu diperhatikan pada kode di atas adalah pada bagian kode PHP di bawah ini.


<?php
$conn = mysqli_connect("localhost", "root", "", "blog");
if (isset($_POST["login"])) {
	$username = $_POST["username"];
	$password = $_POST["password"];

	$result = mysqli_query($conn, "SELECT * FROM admin WHERE username = '$username' AND password = '$password'");
	if (mysqli_num_rows($result) > 0) {
		header("Location: index.php");
		exit;
	}
	$error = true;
}
?>

Di sini, saya mempunya table admin yang berada pada database blog. Yang mana mempunyai jumlah kolom 3 yang berisi id, username, dan password. Kalian bisa lihat jelas pada query yang saya lakukan pada kode di atas.

Sebelum kepada cara-cara memperbaiki bugnya. Kita akan membahas sedikit mengenai Bypass Admin Login. Bypass Admin Login ini bisa dilakukan dengan cara menginputkan data dengan karakter tertentu dan perintah SQL pada form username maupun password. Jadi tanpa mengetahui username dan passwordnya kita tetap akan bisa login menggunakan teknik ini.

Contoh kita bisa melakukan Bypass Admin Login pada kode di atas tadi dengan menginputkan seperti ini: aaa' or 1=1-- - atau '=''or' pada form login. Untuk melihat buktinya coba kalian inputkan pada form username, untuk password bisa diisi sembarang. Otomatis nanti kalian akan berhasil login dan diarahkan ke halaman admin. Untuk penjelasan lebih lengkapnya bisa searching sendiri mumpung Google belum tutup XD.

Oke, kita langsung saja bahas permasalahan utama pada artikel kali ini. Berikut 2 cara yang bisa dilakukan untuk memperbaiki bug Bypass Admin Login.

1. Fungsi mysqli_real_escape_string

Dengan cara ini, kita mencoba melakukan filter pada Request Method yaitu dengan membersihkan karakter kutip / quote. Jadi ketika ada orang lain mencoba untuk login menggunakan cara Bypass Admin, maka karakter kutip / quote yang mereka input akan ditangani oleh fungsi PHP ini.

Contohnya seperti ini. Misalkan ada orang lain yang menginputkan data pada username dengan isi: admin' (dibarengi karakter kutip), maka nanti fungsi PHP ini akan memberikan karakter escape atau backslash sebelum karakter kutip contohnya admin\'. Dengan begitu, Bypassing Admin Loginnya sudah tidak akan bisa berfungsi kembali.

Dengan menggunakan fungsi ini, seharusnya kode di atas tadi menjadi seperti di bawah ini.


$username = mysqli_real_escape_string($conn, $_POST["username"]);
$password = mysqli_real_escape_string($conn, $_POST["password"]);

2. Prepared Statement

Ini merupakan cara yang paling direkomendasikan menurut saya pribadi. Meskipun sebenarnya dengan menggunakan cara pertama juga sangat aman untuk memperbaiki bug ini.

Agar kalian lebih paham detail mengenai Prepared Statement ini, kalian bisa baca-baca di php.net. Dengan menggunakan Prepared Statement, seharusnya kode di atas tadi akan menjadi seperti di bawah ini.


<?php
$conn = mysqli_connect("localhost", "root", "", "blog");
if (isset($_POST["login"])) {
	$username = $_POST["username"];
	$password = $_POST["password"];
	$stmt = mysqli_prepare($conn, "SELECT * FROM admin WHERE username = ? AND password = ?");
	mysqli_stmt_bind_param($stmt, "ss", $username, $password);
	mysqli_stmt_execute($stmt);
	mysqli_stmt_store_result($stmt);
	if (mysqli_stmt_num_rows($stmt) > 0) {
		header("Location: index.php");
		exit;
	}
	$error = true;
}
?>

Beberapa perbedaan bisa kita lihat dibanding sebelumnya. Fungsi mysqli_query diganti menjadi mysqli_prepare lalu value dari username dan password pada query dirubah menjadi (?). Diikuti dengan fungsi mysqli_stmt_bind_param yang mempunyai 4 parameter. Parameter pertama yakni query, kedua adalah tipe data. Untuk tipe data ditulis dengan huruf awalnya saja. Jika tipe data string ditulis dengan "s", jika integer ditulis dengan "i" dan seterusnya. Terakhir berisi Request Method POST dari username dan password.

Langkah-langkahnya bisa dibilang sedikit lebih banyak dibandingkan dengan cara pertama tadi. Namun ini sangat direkomendasikan apalagi jika metode request yang digunakan adalah POST.

Demikian artikel ini semoga bisa membantu untuk mengatasi masalah pada website yaitu celah Bypass Admin Login. Sangat berbahaya tentunya jika bug ini masih tetap dibiarkan begitu saja. Karena tanpa perlu tahu username dan password, orang lain akan dengan sangat mudah login ke halaman admin pada website kita.

About the Author

Seorang yang suka belajar berbagai hal dan membagikannya ke publik agar bisa tumbuh bersama.

Posting Komentar

Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.