Pada tugas kali ini, mahasiswa diminta untuk membuat sebuah aplikasi yang rentan atau membuat sebuah aplikasi yang dapat menguji rentan tidaknya suatu aplikasi lain. Dan saya lebih memilih untuk mengerjakan yang pertama.

Tugas yang pertama kira-kira berbunyi seperti ini:

“Anda diminta untuk membuat aplikasi yang rentan dan bermasalah dengan out of bound array (buffer overflow). Misalnya aplikasi meminta pengguna memasukkan nama dengan panjang tertentu tetapi Anda memasukkannya dengan teks diluar batas tersebut.”

Untuk mempermudah, maka saya membuat suatu contoh program berupa form log in yang meminta pengguna memasukan username dan password yang telah ditentukan (dalam hal ini username dan password disamakan nilainya untuk mempermudah). Setelah memasukkan username dan password, pengguna mengklik tombol Log In untuk dapat masuk ke dalam aplikasi.

Tampilan antar muka program seperti di bawah ini:

Tampilan muka awal program

Namun, panjang username dan password yang dikehendaki maksimum hanyalah 11 karakter.

Berikut adalah source code dan event handler program tersebut dalam bahasa c#:

 

Pada Form Log In:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace AplikasiRentan

{

public partial class contohAplikasi : Form

{

public contohAplikasi()

{

InitializeComponent();

}

 

private void logInButton_Click(object sender, EventArgs e)

{

bool valid = true;

char[] inputUserName = new char[11];

char[] inputPassword = new char[11];

 

//memindahkan nilai yang dimasukkan oleh pengguna ke dalam variable agar dapat diproses

for (int i = 0; i < userNameTextBox.Text.Length; ++i)

{

inputUserName[i] = Convert.ToString(userNameTextBox.Text)[i];

}

for (int i = 0; i < passwordTextBox.TextLength; ++i)

{

inputPassword[i] = Convert.ToString(passwordTextBox.Text)[i];

}

 

//untuk memvalidasi apakah password yang dimasukan sama dengan username

for (int i = 0; i < inputUserName.Length; ++i)

{

if (inputUserName.Length == inputPassword.Length)

{

if (inputUserName[i] != inputPassword[i])

{

valid = false;

}

}

else

{

valid = false;

}

}

 

//proses yang dilakukan terhadap masukan pengguna

if (valid) //jika masukan valid

{

masukForm masuk = new masukForm();

masuk.Show();

this.Visible = false;

}

else //jika masukan tidak valid

{

MessageBox.Show(“Log in gagal. Masukkan password yang sama dengan username.”, “Log in gagal”);

userNameTextBox.Text = “”;

passwordTextBox.Text = “”;

}

}

}

}

 

Pada Form Aplikasi:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace AplikasiRentan

{

public partial class masukForm : Form

{

public masukForm()

{

InitializeComponent();

}

 

private void backButton_Click(object sender, EventArgs e)

{

contohAplikasi aplikasi = new contohAplikasi();

aplikasi.Show();

this.Close();

}

 

private void exitButton_Click(object sender, EventArgs e)

{

Environment.Exit(0);

}

}

}

 

Ketika pengguna mematuhi aturan yaitu panjang karakter username dan password tidak melebihi 11 karakter namun karakter username tidak sama dengan karakter password, maka akan muncul tampilan:

Tampilan program ketika login gagal

 

Dan ketika masukan tidak melebihi 11 karakter dan masukan untuk username sama dengan masukan untuk password, maka akan muncul tampilan:

Tampilan program ketika berhasil login

Nah, masalah akan timbul jika pengguna memasukan karakter baik untuk masukan username maupun password dengan jumlah yang melebihi batas, yaitu 11 karakter. Program akan crash. Tampilan saat program crash:

Tampilan program ketika mengalami crash

Masalah tak berhenti di situ. Ketika pengguna tersebut atau pengguna lainnya mencoba memasukkan username dan password yang benar setelah crash terjadi, program akan menganggap masukan selalu salah. Sehingga, setelah crash tidak akan ada pengguna yang dapat memasuki program tersebut.