Anda di halaman 1dari 9

TUGAS 2 NETWORK SECURITY

Kadek Andre Mahendra


160030872
Sistem Informasi

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN


TEKNIK KOMPUTER
(STMIK) STIKOM BALI

2017
Kata Pengantar

Puji syukur saya panjatkan kehadirat Tuhan YME yang telah memberikan rahmat
serta karunia-NYA kepada saya sehingga saya berhasil menyelesaikn Tugas ini dengan
tepat waktunnya yang berjudul Tugas 2 Network Security.
Puji syukur penulis panjatkan kehadirat Tuhan Yang Maha Esa karena dengan
rahmat, karunia, serta karunia-Nya penulis dapat menyelesaikan tugas tentang Tugas
IX Project Pengembangan Sistem Informasi ini dengan baik meskipun banyak
kekurangan didalamnya. Penulis berterima kasih pada Bapak I Wayan Ardiyasa,
S.Kom., M.MSI., selaku dosen pengajar mata kuliah Network Security yang telah
memberikan tugas ini kepada penulis.
Penulis berharap tugas ini dapat berguna dalam rangka menambah wawasan serta
pengetahuan mengenai Tugas 2 Network Security. Penulis menyadari sepenuhnya
bahwa di dalam tugas ini terdapat kekurangan dan jauh dari kata sempurna. Penulis
berharap adanya kritik, saran dan usulan demi perbaikan tugas yang telah pebulis buat
di masa yang akan datang, mengingat tidak ada sesuatu yang sempurna tanpa saran
yang membangun.
Semoga tugas ini dapat dipahami bagi siapapun yang membacanya. Sekiranya
tugas yang telah disusun ini dapat berguna bagi penulis maupun orang yang
membacanya.
Akhir kata, penulis mengucapkan terima kasih kepada semua pihak yang telah
berperan serta dalam penyusunan tugas ini dari awal sampai akhir penyelesaian.

Denpasar, Desember 2017

Penulis
A. SQL Injection

SQL Injection adalah tehnik menginjeksi (memasukkan) kode SQL atau SQL
Command kedalam SQL Statement melalui field input atau URL suatu website. Kode
SQL yang diinject akan berdampak langsung pada database website tersebut, misalnya
mem-bypass autentikasi login, melakukan drop table atau mengubah data.
Mengapa demikian? karena kode SQL yang diinject juga akan ikut dijalankan
bersamaan dengan SQL Command atau query yang sudah ada. Biasanya SQL injection
terjadi akibat programmer tidak atau kurang memperhatikan input yang didapat dari
suatu field atau parameter.

B. Langkah-langkah dalam pengamanan terhadap sistem login


Pada tugas ini saya menggunakan PHP versi 7.1.11. Berikut akan saya jelaskan
persiapan yang dilakukan dari pembuatan database hingga pengamanan terhadap
sistem login:
1. Persiapan database
Pada kali ini saya membuat database dengan nama netsec_sql_injection

Gambar 1. Buat database baru


2. Persiapan table
Setelah database berhasil dibuat, maka dilanjutkan dengan membuat table, pada
tugas ini saya memberi nama table tersebut dengan users dengan meng-import sql
yang telah diberikan pada tugas. Namun pada tugas ini saya menambahkan fitur
enksipsi MD5 pada field password untuk meningkatkan keamanan sistem.

Gambar 2. Struktur table users


Gambar 3. Contoh data pada table users dengan password enksipsi MD5

3. Buat file koneksi.php


File koneksi.php digunakan dalam komunikasi aplikasi dengan database, dengan
menuliskan username, password dan nama database
<?php
$con = mysqli_connect('localhost', 'root', '', 'netsec_sql_injection');
?>

4. Buat file index.php


File index.php digunakan sebagai tampilan awal saat website diakses
<?php
include "koneksi.php";
session_start();
if (!isset($_SESSION['username'])){
header ("location:login.php");
}
?>
Selamat.. Anda Berhasil Login, <a href="logout.php">Logout</a>

5. Buat file login.php


File login.php merupakan tampilan yang berisi input form username, password
dan terdapat sebuah button yang digunakan dalam memproses masukan yang dilakukan
oleh user. Pada tugas isi saya menambahkan fitur validasi menggunakan javascript
guna melakukan validasi pada client side sebelum diakses di server (proses login).

Gambar 4. Tampilan login


<?php
include "koneksi.php";
session_start();
if (isset($_SESSION['username'])){
header ("location:index.php");
}
?>
<html>
<head>
<title>LOGIN</title>
</head>
<body>
<!-- onSubmit validasi javascript -->
<form method="post" name="login" action="cek_login.php" onSubmit="return validasi()">
<table border=0 align="center" cellpadding=5 cellspacing=0>
<tr>
<td colspan=3> <center> <font size=5> LOGIN </font> </center> </td>
</tr>
<tr>
<td>Username</td>
<td>:</td>
<td><input type="text" name="username" id="username"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input type="password" name="password" id="password"></td>
</tr>
<tr>
<td colspan=2></td>
<td><input type="submit" name="submit" value="LOGIN"></td>
</tr>
</table>
</form>
</body>
<script type="text/javascript">
//function javascript untuk client side validasi
function validasi() {
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
if (username != "" && password!="") {
return true;
} else {
alert('Ajax error: Username dan Password harus di isi !');
return false;
}
}
</script>
</html>
6. Buat file cek_login.php
File cek_login.php digunakan dalam proses validasi login. Dari masukan user
berupa username dan password yang dimasukkan (telah melewati proses validasi di
client side menggunakan javascript) akan diolah dalam proses isi. Dalam
cek_login.php terdapat proses penting yang akan mengecek masukan user apakah valid
dengan data yang ada dalam database. Pada proses ini yang harus diberikan validasi
sehingga hacker/orang yang tidak bertanggung jawab tidak bisa menginject script pada
sistem login yang dibuat.
a. Tes 1
Buka file login.php yang sudah kita kerjakan, kemudian masukkan username
dengan nilai "coba" dan password dengan nilai "1234". Maka akan muncul
pemberitahuan bahwa username atau password salah, ini benar karena username yang
benar adalah ardi dan passwordnya ardi.

Gambar 5. Tes 1 validasi login


Pada test pertama, query yang terbentuk seperti berikut: SELECT username FROM users

WHERE username = 'coba' and password = '81dc9bdb52d04dc20036dbd8313ed055'

Catatan: String 81dc9bdb52d04dc20036dbd8313ed055 berasal dari nilai "1234"


yang telah dihash menggunakan MD5, silahkan lihat kode di file cek_login.php untuk
lebih lengkapnya.
b. Tes 2
Buka file login.php yang sudah kita kerjakan, kemudian masukkan username
dengan nilai "ardi" dan password dengan nilai "ardi". Maka login sukses dan berhasil
masuk ke dashboard.

Gambar 6. Tes 2 validasi login


c. Tes 3
Sekarang kita coba SQL Injection, logout terlebih dahulu kemudian ketikkan nilai
" admin' or 1=1 # " pada username dan "1234" pada password. Maka hasilnya kita
berhasil masuk sebagai admin tanpa tahu password nya terlebih dahulu. Pada tes ketiga
ini, query yang terbentuk adalah: SELECT username FROM users WHERE username = 'admin'

or 1=1 #' and password = '81dc9bdb52d04dc20036dbd8313ed055'. Dari query ini akan


menghasilkan:

Gambar 7. Tes 3 validasi login


Mengapa demikian? karena saat kita menginput nilai "admin' or 1=1 #" pada
textbox username, karakter setelah # akan dianggap sebagai komentar sehingga
diabaikan. Sedangkan OR 1=1 berfungsi agar kondisi apapun selalu bernilai TRUE
karena memang nilai 1=1.

Pencegahan:
Untuk pencegahan terhadap SQL Injection seperti ini, kita bisa menggunakan fungsi
mysqli_real_escape_string atau menggunakan prepared statement.

$username = mysqli_real_escape_string($con, $_POST['username']);


$password = mysqli_real_escape_string($con, $_POST['password']);
//$con merupakan variable dari file koneksi.php

Nantinya setiap terdapat karakter escape string seperti kutip satu (') atau kutip dua ("),
akan ditambahkan karakter backslash (\) sehingga query pada test ketiga menjadi
empty atau kosong.
Gambar 8. Tes 3.2 validasi login

<?php
include "koneksi.php";
//cek inputan tidak kosong
if(!empty($_POST['username']) || !empty($_POST['password'])) {
//validasi mysqli --> setiap terdapat karakter escape string seperti kutip satu (')
//atau kutip dua ("), akan ditambahkan karakter backslash (\)
$username = mysqli_real_escape_string($con, $_POST['username']);
$password = mysqli_real_escape_string($con, $_POST['password']);
} else {
$username = null;
$password = null;
}
//mengubah (enksipsi) inputan menjadi format md5
$password = md5($password);
if (empty($username)){
echo "<script>alert('Username belum diisi')</script>";
echo "<meta http-equiv='refresh' content='1 url=login.php'>";
}else if (empty($password)){
echo "<script>alert('Password belum diisi')</script>";
echo "<meta http-equiv='refresh' content='1 url=login.php'>";
}else{
session_start();

//query untuk komunikasi ke database dengan inputan username dan password dari user
$sql = mysqli_query($con, "SELECT * FROM users WHERE username = '$username' and password =
'$password' ");
$row = mysqli_num_rows($sql);

if ($row > 0){


$_SESSION['username'] = $username;
header("location:index.php");
}else{
echo "<script>alert('Username atau Password salah')</script>";
echo "<meta http-equiv='refresh' content='1 url=login.php'>";
}
}
?>

7. Buat file logout.php


File logout.php digunakan dalam proses logout/keluar dari sistem. Setelah user
logout dari sistem maka session nya akan di hapus dari sistem sehingga user tidak ada
dapat masuk ke sistem.

<?php
session_start();
session_destroy();
echo "<script>alert('Terima kasih, Anda Berhasil Logout')</script>";
echo "<meta http-equiv='refresh' content='1 url=login.php'>";
?>

Anda mungkin juga menyukai