<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="id">
	<id>https://cbtlmsts.my.id/wikits/index.php?action=history&amp;feed=atom&amp;title=Praktik%3A_Mengamankan_formulir_login_dari_serangan_dasar</id>
	<title>Praktik: Mengamankan formulir login dari serangan dasar - Riwayat revisi</title>
	<link rel="self" type="application/atom+xml" href="https://cbtlmsts.my.id/wikits/index.php?action=history&amp;feed=atom&amp;title=Praktik%3A_Mengamankan_formulir_login_dari_serangan_dasar"/>
	<link rel="alternate" type="text/html" href="https://cbtlmsts.my.id/wikits/index.php?title=Praktik:_Mengamankan_formulir_login_dari_serangan_dasar&amp;action=history"/>
	<updated>2026-08-29T18:05:19Z</updated>
	<subtitle>Riwayat revisi halaman ini di wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://cbtlmsts.my.id/wikits/index.php?title=Praktik:_Mengamankan_formulir_login_dari_serangan_dasar&amp;diff=45&amp;oldid=prev</id>
		<title>Admin: ←Membuat halaman berisi &#039;Formulir login merupakan salah satu komponen penting dalam aplikasi web yang sering menjadi target serangan seperti &#039;&#039;&#039;SQL Injection&#039;&#039;&#039; dan &#039;&#039;&#039;Cross-Site Scripting (XSS)&#039;&#039;&#039;. Memahami dan menerapkan teknik pengamanan yang tepat pada formulir login akan membantu mencegah akses tidak sah dan melindungi data pengguna.  ==1. Persiapan Lingkungan==  &#039;&#039;&#039;1.1. Instalasi LAMP Stack&#039;&#039;&#039;  Pastikan server Ubuntu 24.04 Anda telah terinstal &#039;&#039;&#039;Apache&#039;&#039;&#039;, &#039;&#039;&#039;MySQL&#039;&#039;&#039;, dan &#039;&#039;&#039;PHP&#039;...&#039;</title>
		<link rel="alternate" type="text/html" href="https://cbtlmsts.my.id/wikits/index.php?title=Praktik:_Mengamankan_formulir_login_dari_serangan_dasar&amp;diff=45&amp;oldid=prev"/>
		<updated>2025-05-10T14:15:58Z</updated>

		<summary type="html">&lt;p&gt;←Membuat halaman berisi &amp;#039;Formulir login merupakan salah satu komponen penting dalam aplikasi web yang sering menjadi target serangan seperti &amp;#039;&amp;#039;&amp;#039;SQL Injection&amp;#039;&amp;#039;&amp;#039; dan &amp;#039;&amp;#039;&amp;#039;Cross-Site Scripting (XSS)&amp;#039;&amp;#039;&amp;#039;. Memahami dan menerapkan teknik pengamanan yang tepat pada formulir login akan membantu mencegah akses tidak sah dan melindungi data pengguna.  ==1. Persiapan Lingkungan==  &amp;#039;&amp;#039;&amp;#039;1.1. Instalasi LAMP Stack&amp;#039;&amp;#039;&amp;#039;  Pastikan server Ubuntu 24.04 Anda telah terinstal &amp;#039;&amp;#039;&amp;#039;Apache&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;MySQL&amp;#039;&amp;#039;&amp;#039;, dan &amp;#039;&amp;#039;&amp;#039;PHP&amp;#039;...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Halaman baru&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Formulir login merupakan salah satu komponen penting dalam aplikasi web yang sering menjadi target serangan seperti &amp;#039;&amp;#039;&amp;#039;SQL Injection&amp;#039;&amp;#039;&amp;#039; dan &amp;#039;&amp;#039;&amp;#039;Cross-Site Scripting (XSS)&amp;#039;&amp;#039;&amp;#039;. Memahami dan menerapkan teknik pengamanan yang tepat pada formulir login akan membantu mencegah akses tidak sah dan melindungi data pengguna.&lt;br /&gt;
&lt;br /&gt;
==1. Persiapan Lingkungan==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1.1. Instalasi LAMP Stack&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Pastikan server Ubuntu 24.04 Anda telah terinstal &amp;#039;&amp;#039;&amp;#039;Apache&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;MySQL&amp;#039;&amp;#039;&amp;#039;, dan &amp;#039;&amp;#039;&amp;#039;PHP&amp;#039;&amp;#039;&amp;#039; (LAMP Stack). Jika belum, ikuti langkah-langkah berikut:&lt;br /&gt;
&lt;br /&gt;
1. &amp;#039;&amp;#039;&amp;#039;Perbarui daftar paket:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   &lt;br /&gt;
 sudo apt update&lt;br /&gt;
   &lt;br /&gt;
2. &amp;#039;&amp;#039;&amp;#039;Instal Apache:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   &lt;br /&gt;
 sudo apt install apache2 -y&lt;br /&gt;
  &lt;br /&gt;
3. &amp;#039;&amp;#039;&amp;#039;Instal MySQL:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   &lt;br /&gt;
 sudo apt install mysql-server -y&lt;br /&gt;
  &lt;br /&gt;
Setelah instalasi, amankan MySQL dengan menjalankan:&lt;br /&gt;
&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
  &lt;br /&gt;
4. &amp;#039;&amp;#039;&amp;#039;Instal PHP:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
 sudo apt install php libapache2-mod-php php-mysql -y&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1.2. Konfigurasi Direktori Proyek&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Buat direktori untuk proyek Anda dan atur izin yang sesuai:&lt;br /&gt;
&lt;br /&gt;
 sudo mkdir /var/www/html/secure-login&lt;br /&gt;
 sudo chown -R $USER:$USER /var/www/html/secure-login&lt;br /&gt;
&lt;br /&gt;
==2. Membuat Formulir Login yang Aman==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2.1. Struktur Dasar Formulir Login&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Buat file `index.php` di direktori proyek dengan konten berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 session_start();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
 &amp;lt;html lang=&amp;quot;id&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
     &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;title&amp;gt;Formulir Login Aman&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
     &amp;lt;h2&amp;gt;Login&amp;lt;/h2&amp;gt;&lt;br /&gt;
     &amp;lt;?php&lt;br /&gt;
     if (isset($_SESSION[&amp;#039;error&amp;#039;])) {&lt;br /&gt;
         echo &amp;#039;&amp;lt;p style=&amp;quot;color:red;&amp;quot;&amp;gt;&amp;#039; . htmlspecialchars($_SESSION[&amp;#039;error&amp;#039;]) . &amp;#039;&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
         unset($_SESSION[&amp;#039;error&amp;#039;]);&lt;br /&gt;
     }&lt;br /&gt;
     ?&amp;gt;&lt;br /&gt;
     &amp;lt;form action=&amp;quot;authenticate.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;label for=&amp;quot;username&amp;quot;&amp;gt;Nama Pengguna:&amp;lt;/label&amp;gt;&lt;br /&gt;
         &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;username&amp;quot; name=&amp;quot;username&amp;quot; required&amp;gt;&lt;br /&gt;
         &amp;lt;br&amp;gt;&lt;br /&gt;
         &amp;lt;label for=&amp;quot;password&amp;quot;&amp;gt;Kata Sandi:&amp;lt;/label&amp;gt;&lt;br /&gt;
         &amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;password&amp;quot; name=&amp;quot;password&amp;quot; required&amp;gt;&lt;br /&gt;
         &amp;lt;br&amp;gt;&lt;br /&gt;
         &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Masuk&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2.2. Proses Autentikasi dengan Prepared Statements&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Buat file `authenticate.php` dengan konten berikut untuk memproses input pengguna dan mencegah SQL Injection:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 session_start();&lt;br /&gt;
 $host = &amp;#039;localhost&amp;#039;;&lt;br /&gt;
 $dbname = &amp;#039;nama_database&amp;#039;;&lt;br /&gt;
 $username = &amp;#039;nama_pengguna&amp;#039;;&lt;br /&gt;
 $password = &amp;#039;kata_sandi&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     $pdo = new PDO(&amp;quot;mysql:host=$host;dbname=$dbname;charset=utf8&amp;quot;, $username, $password);&lt;br /&gt;
     $pdo-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);&lt;br /&gt;
 } catch (PDOException $e) {&lt;br /&gt;
     die(&amp;quot;Koneksi gagal: &amp;quot; . htmlspecialchars($e-&amp;gt;getMessage()));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) {&lt;br /&gt;
     $user = trim($_POST[&amp;#039;username&amp;#039;]);&lt;br /&gt;
     $pass = trim($_POST[&amp;#039;password&amp;#039;]);&lt;br /&gt;
 &lt;br /&gt;
     if (empty($user) || empty($pass)) {&lt;br /&gt;
         $_SESSION[&amp;#039;error&amp;#039;] = &amp;#039;Nama pengguna dan kata sandi harus diisi.&amp;#039;;&lt;br /&gt;
         header(&amp;#039;Location: index.php&amp;#039;);&lt;br /&gt;
         exit();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     $stmt = $pdo-&amp;gt;prepare(&amp;quot;SELECT password FROM users WHERE username = :username&amp;quot;);&lt;br /&gt;
     $stmt-&amp;gt;bindParam(&amp;#039;:username&amp;#039;, $user, PDO::PARAM_STR);&lt;br /&gt;
     $stmt-&amp;gt;execute();&lt;br /&gt;
     $row = $stmt-&amp;gt;fetch(PDO::FETCH_ASSOC);&lt;br /&gt;
 &lt;br /&gt;
     if ($row &amp;amp;&amp;amp; password_verify($pass, $row[&amp;#039;password&amp;#039;])) {&lt;br /&gt;
         $_SESSION[&amp;#039;user&amp;#039;] = $user;&lt;br /&gt;
         header(&amp;#039;Location: dashboard.php&amp;#039;);&lt;br /&gt;
         exit();&lt;br /&gt;
     } else {&lt;br /&gt;
         $_SESSION[&amp;#039;error&amp;#039;] = &amp;#039;Nama pengguna atau kata sandi salah.&amp;#039;;&lt;br /&gt;
         header(&amp;#039;Location: index.php&amp;#039;);&lt;br /&gt;
         exit();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Penjelasan:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Koneksi Database:&amp;#039;&amp;#039;&amp;#039; Menggunakan PDO untuk koneksi yang aman ke database.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Prepared Statements:&amp;#039;&amp;#039;&amp;#039; Mencegah SQL Injection dengan memisahkan data dari perintah SQL.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Validasi Input:&amp;#039;&amp;#039;&amp;#039; Memastikan bahwa input tidak kosong sebelum diproses.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Password Hashing:&amp;#039;&amp;#039;&amp;#039; Menggunakan `password_verify()` untuk memverifikasi kata sandi yang telah di-hash.&lt;br /&gt;
&lt;br /&gt;
==3. Mencegah Cross-Site Scripting (XSS)==&lt;br /&gt;
&lt;br /&gt;
Untuk mencegah XSS, pastikan semua output yang ditampilkan ke pengguna telah di-escape dengan `htmlspecialchars()`. Contoh implementasi telah ditunjukkan pada bagian sebelumnya di mana pesan kesalahan ditampilkan.&lt;br /&gt;
&lt;br /&gt;
Selain itu, Anda dapat mengatur &amp;#039;&amp;#039;&amp;#039;Content Security Policy (CSP)&amp;#039;&amp;#039;&amp;#039; untuk membatasi sumber daya yang dapat dimuat oleh browser, sehingga mencegah eksekusi skrip berbahaya. Tambahkan header berikut pada konfigurasi Apache:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;IfModule mod_headers.c&amp;gt;&lt;br /&gt;
     Header set Content-Security-Policy &amp;quot;default-src &amp;#039;self&amp;#039;; script-src &amp;#039;self&amp;#039;; style-src &amp;#039;self&amp;#039;;&amp;quot;&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==4. Penggunaan HTTPS==&lt;br /&gt;
&lt;br /&gt;
Pastikan komunikasi antara klien dan server dienkripsi dengan HTTPS. Anda dapat menggunakan &amp;#039;&amp;#039;&amp;#039;Let&amp;#039;s Encrypt&amp;#039;&amp;#039;&amp;#039; untuk mendapatkan sertifikat SSL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Pranala Menarik==&lt;br /&gt;
&lt;br /&gt;
* [[Web Programming]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>