Standar Keamanan Aplikasi
Kategori: Keamanan
Standar Keamanan Aplikasi (Security Guidelines)
Dokumen ini berisi aturan baku terkait keamanan aplikasi yang wajib dipatuhi oleh seluruh developer PT Mada Wikri Tunggal. Tujuannya adalah untuk mencegah celah keamanan (vulnerabilities) yang dapat merugikan perusahaan dan pengguna.
1. Autentikasi dan Otorisasi
1.1 Autentikasi (Authentication)
- Gunakan fitur bawaan Laravel (
laravel/breezeataularavel/uiyang menggunakanAuth::attempt()) untuk aplikasi web biasa. - Untuk aplikasi berbasis API (SPA, Mobile), wajib menggunakan Laravel Sanctum atau Passport (hindari penggunaan token JWT custom buatan sendiri).
- Jangan pernah menyimpan password dalam bentuk plaintext. Selalu gunakan
Hash::make()atau biarkan fitur registrasi bawaan Laravel yang menanganinya.
1.2 Otorisasi (Authorization)
- Selalu periksa hak akses pengguna sebelum melakukan aksi krusial (Create, Update, Delete).
- Gunakan Laravel Policies atau Gates.
- Contoh yang disarankan di Controller:
// BAIK: Menggunakan metode bawaan authorize yang menggunakan Policy public function update(Request $request, Post $post) { $this->authorize('update', $post); // proses update }
2. Validasi Data (Never Trust User Input)
Semua data yang datang dari luar sistem ($request) harus dianggap TIDAK AMAN.
- Wajib memvalidasi semua input menggunakan Form Request atau
$request->validate(). - Jangan pernah menggunakan request masif langsung ke model tanpa proteksi fillable, seperti
User::create($request->all());. - Gunakan atribut
$fillableatau$guardeddi Model dengan hati-hati.
Contoh Praktik yang Baik (Form Request):
public function store(StoreUserRequest $request)
{
// Hanya data yang lolos validasi yang akan diambil
$validated = $request->validated();
User::create($validated);
}
3. Pencegahan Celah Keamanan Umum
3.1 Cross-Site Scripting (XSS)
- Laravel secara otomatis melindungi dari XSS jika menggunakan sintaks blade
{{ $variable }}karena melakukan escape HTML. - Hindari penggunaan
{!! $variable !!}kecuali jika Anda yakin 100% bahwa$variabletersebut bersih dan berasal dari sistem (bukan input pengguna), atau telah disaring (purified).
3.2 Cross-Site Request Forgery (CSRF)
- Pastikan token
@csrfada di setiap tag<form>HTML metode POST, PUT, PATCH, DELETE. - Jangan menonaktifkan middleware
VerifyCsrfTokentanpa alasan kuat.
3.3 SQL Injection
- Gunakan Eloquent ORM atau Query Builder bawaan Laravel. Keduanya menggunakan mekanisme PDO parameter binding yang otomatis melindungi dari SQL Injection.
- JANGAN PERNAH menggunakan raw SQL (misal:
DB::statement()) dengan menyisipkan input pengguna secara langsung seperti:// BURUK - Sangat berbahaya! DB::select("SELECT * FROM users WHERE email = '" . $_POST['email'] . "'");
4. Manajemen Konfigurasi (Environment Variables)
- Jangan pernah meng-commit file
.envke repository Git. Gunakan.env.examplesebagai referensi. - Jangan menggunakan fungsi
env()secara langsung di dalam controller atau logika aplikasi. Gunakanconfig()sebagai wrapper. - Pastikan
APP_DEBUG=falsedi environment produksi (Production).
5. Mengunggah File (File Uploads)
- Jangan pernah mempercayai ekstensi file begitu saja. Gunakan validasi Laravel (contoh:
'file' => 'required|mimes:jpg,png,pdf|max:2048'). - Simpan file unggahan publik di dalam
storage/app/public(bukan langsung di/public). Jangan lupa jalankanphp artisan storage:link. - Untuk file sensitif, simpan di
storage/app(non-publik) dan buat route khusus dengan middleware otentikasi untuk mengunduhnya.
Dengan mengikuti panduan keamanan di atas, kita dapat meminimalisir risiko kebocoran data dan sistem yang bisa dieksploitasi oleh pihak yang tidak bertanggung jawab.