-->

SOURCE CODE PHP KEAMANAN Akses LOGIN ADVANCE agar tidak bisa di HACK

Log In adalah fitur utama paling penting yang dibuat pada proyek situs web. Secara umum, sistem Masuk menggunakan cookie dan sesi, dan hanya menggunakan validasi yang sangat sederhana. Sayangnya, kita sering lupa bahwa sistem Log In adalah pintu utama yang, jika terlalu sederhana, akan mudah dihancurkan. Halaman Masuk yang kami buat setidaknya harus mampu menangani serangan umum seperti berikut:

Brute Force Attack: serangan paling primitif (hehe) di mana peretas mencoba menebak semua kemungkinan nama pengguna dan kata sandi secara terus menerus sampai dia menemukannya.
SQL Injection: serangan di mana peretas memasukkan suntikan skrip SQL ke dalam masukan, berharap skrip itu dapat disuntikkan dan dijalankan di server untuk mengambil / merusak data tertentu.

Session Hijaking: teknik pencurian sesi pada perangkat tertentu. Jika skrip cek masuk kami hanya menggunakan isset () atau sejenisnya, peretas yang mencuri sesi pada perangkat yang telah masuk juga memiliki hak akses yang sama.

SOURCE CODE PHP KEAMANAN Akses LOGIN ADVANCE agar tidak bisa di HACK




Sistem login yang hanya menggunakan sesi umumnya rentan terhadap serangan brute force dan pembajakan sesi. Karenanya dalam tutorial ini kami akan mencoba membuat halaman login dan validasi yang setidaknya dapat mengatasi serangan ini.

Step 1: Making Database and Table Structure

First we create the database first, for fast it can directly run this SQL in the database that we have created ...

CREATE TABLE tb_admin
(
user VARCHAR(50) PRIMARY KEY,
    pass VARCHAR(255),
    name VARCHAR(50),
    email VARCHAR(100),
    priviledge INT(1)
);

CREATE TABLE tb_admin_log(
id INT PRIMARY KEY AUTO_INCREMENT,
    tgl DATETIME,
    expired DATETIME,
    token VARCHAR(40),
    username VARCHAR(50),
    ip VARCHAR(20),
    useragent VARCHAR(150),
    stat INT(1)
);

INSERT INTO tb_admin VALUES
('admin','$2y$10$ggxmazeAZOoioEnq4mLXSeLvn404IewZ29AoF7vzZwYuTRqu6AUPK', 'Administrator','admin@localhost',1);

Ada 2 tabel yang perlu kita buat, yaitu tabel tb_admin, fungsi seperti biasa untuk menampung data admin yang memiliki akses. Dalam contoh ini, kata sandi menggunakan metode kata sandi dalam PHP, jadi formatnya adalah $ 2tahun $ 10 .......... Tabel tb_admin_log akan digunakan untuk mencatat semua kegiatan masuk yang berhasil atau gagal masuk. Tabel tb_admin_log ini akan membantu kami memeriksa serangan brute force dan pembajakan sesi.

Step 2 : Koneksi dan File Library

Di contoh tutorial ini saya akan menggunakan Native PHP 7 menggunakan Data Object (PDO). Kalau konsepnya sudah dipahami, nanti bisa diterjemahkan ke framework apa saja kok..

Di folder project kita, buat sebuah folder conf untuk menampung file penting kita yaitu conn.php, library.php, dan ClassLogin.php.

//conf/conn.php
session_start();

$user = "root";
$pass = "";
$db = "adv_login";
$host = "localhost";

$db = new PDO('mysql:host=localhost;dbname='.$db.';charset=utf8',$user,$pass);

require_once("conf/library.php");
require_once("conf/ClassLogin.php");

$login = new Login();

--------------------------------------------------------------------------------------------------------------------------

//conn/library.php
#isinya adalah fungsi standar untuk pengiriman pesan sukses/error
#fungsi-fungsi kit tambahan lainnya juga bisa sekalian dimasukkan disini

function create_alert($type, $pesan, $header=null){
$_SESSION['adm-type'] = $type;
$_SESSION['adm-message'] = $pesan;

if($header!==null){
header("location:".$header);
exit();
}
}

function show_alert(){
if(isset($_SESSION['adm-type'])){
$type = ucfirst($_SESSION['adm-type']);
unset($_SESSION['adm-type']);
$message = $_SESSION['adm-message'];
unset($_SESSION['adm-message']);

return "

$type
$message
";
}
}

--------------------------------------------------------------------------------------------------------------------------

//conn/ClassLogin.php

Class Login{
var $db;

public function __construct(){
global $db;
#menghubungkan variabel database $db ke class Login
$this->db = $db;
}



public function cek_login(){
//method yang akan memvalidasi apakah sedang dalam keadaan log in atau tidak
return false;
}


Public function salah_login_action($username){
//method yang akan dipanggil apabila user memasukkan username/password yang salah
return false;
}


public function cek_salah_login($limit=5){
//method untuk menangkal BRUTE FORCE. 
//Apabila user terdeteksi salah login sebanyak $limit kali, maka user tidak boleh login lagi
return true;
}


public function true_login($username, $expired){
//method yang akan dipanggil apabila user memasukkan username dan password yang benar
return true;
}

public function logout(){
//method yang akan dipanggil apabila user logout dari sistem
return true;
}

public function login_redir(){
//method yang akan selalu dipanggil di seluruh halaman non index dan non login, 
//untuk mengecek apabila user tidak memiliki akses langsung diredirect ke halaman login
if(!$this->cek_login())
header("location:index.php");
}

}

Kelas Login telah diisi dengan metode yang akan digunakan nanti. Nilai default dibiarkan seperti itu, sampai kami mengeditnya satu per satu. Sekarang kita akan membuat file index.php di direktori utama proyek kita.


the conf / conn.php file must always be included on all pages later. Because in one file we call the library, login class, and database. The $ login variable has been declared in the previous conn.php file, so it can be directly used as an object. Now we will make the login form in the login.php file.




Apabila project tersebut diakses, maka tampilannya adalah seperti ini : 

SOURCE CODE PHP KEAMANAN LOGIN ADVANCE Berbasis Web




Langkah 3: Proses masuk

Sekarang kita membuat file login-Proses.php untuk validasi. Algoritma proses login umum adalah:

  • Cek_Salah_Login () sudah melampaui batas? Jika demikian, hentikan eksekusi dan tampilkan pesan kesalahan.
  • Periksa di database, apakah ada nama pengguna yang sama dengan yang dimasukkan dalam $ _POST [nama pengguna]?
  • Jika tidak ada, catat kesalahan login, dan tampilkan pesan kesalahan
  • Jika ada, periksa apakah kata sandi itu valid atau tidak?
  • Jika valid, lakukan proses pembuatan token, kemudian arahkan ke halaman indeks
  • Jika tidak valid, catat kesalahan login, dan tampilkan pesan kesalahan

Dengan algoritma ini, kita dapat merancang proses-login.php menjadi sebagai berikut:

//login-proses.php
include "conf/conn.php";

if(!$login->cek_salah_login()){
//kalau user salah login melebihi batas yang ditentukan, maka proses langsung berhenti
create_alert("error","Mohon maaf Anda tidak dapat login lagi karena kesalahan login Anda terlalu banyak. Hubungi Administrator untuk informasi lebih lanjut","index.php");
}

//tombol $_POST['btn'] harus ditekan. kalau tidak ditekan artinya nggak ada proses apapun yang dijalankan
if(isset($_POST['btn'])){
$username = $_POST['username'];
$password = $_POST['password'];

//step 1 : cek apakah username ada di tabel 
$cek = $db->query("SELECT * FROM tb_admin WHERE user = ".$db->quote($username));

if($cek->rowCount() > 0){
//username ada, tangkap password yg ada di database
$row = $cek->fetch();
$password_db = $row['pass'];
#password_verify adalah fungsi PHP 5.5> yang otomatis mengecek kesamaan inputan dengan hash 
if(password_verify($password, $password_db)){
//password sudah cocok

$expired = 0;
if(isset($_POST['remember'])){
if($_POST['remember'] = 1){
$expired = '+1 year'; // 1 tahun
}
}
#kalau remember me dicentang, login akan expired dalam waktu 1 tahun, selain itu ya akan seperti session biasa yang hilang ketika diclose

$login->true_login($username, $expired); //pencatatan token akan dilakukan disini
create_alert("success","Log In Berhasil","index.php");
}
else{
//password tidak cocok
$login->salah_login_action($username); //pencatatan kesalahan login
create_alert("error","Username atau password tersebut salah","index.php");
}

}
else{
$login->salah_login_action($username); //pencatatan kesalahan login
create_alert("error","Username atau password tersebut tidak terdaftar","index.php");
}

}

Step 4: Adjust the Login Class

Copy the methods below, place them in the Login class that already exists. A brief explanation can be seen in the comments

SOURCE CODE PHP KEAMANAN Akses LOGIN ADVANCE agar tidak bisa di HACK




SOURCE CODE PHP KEAMANAN Akses LOGIN ADVANCE agar tidak bisa di HACK


Untuk mengujinya, kami akan membuat file tambahan di direktori utama: home.php. Karena pada halaman index.php sebelumnya, kondisi check_login () telah dibuat, jika benar akan diarahkan ke home.php.

SOURCE CODE PHP KEAMANAN Akses LOGIN ADVANCE agar tidak bisa di HACK




 metode Brute_f0rce nggak akan berjalan di halaman Log In ini.. Karena sudah ada fungsi cek_salah_login() yang akan langsung menutup akses login ketika sudah mencapai sekian kali kesalahan. Kedua, metode SQL Injek juga nggak akan berjalan. Karena kita menggunakan escaping ($db->quote), dan fungsi prepared statement di semua query yang ada. Ketiga, metode Session Hijack!ng juga nggak akan berjalan, karena cookie token yang diremember sekalipun disimpan untuk dicek IP dan User Agentnya. Sehingga apabila cookie tersebut dicuri sekalipun, karena IP dan User Agent yang berbeda login tidak dapat dilakukan juga.

Untuk mendapatkan Source Code Scryptnya silahkan click disini 

Donwload Juga Source Code Program Lainnya  :

NEXT ARTICLE Next Post
PREVIOUS ARTICLE Previous Post
NEXT ARTICLE Next Post
PREVIOUS ARTICLE Previous Post
 

Delivered by FeedBurner

-->