Advertisement
  1. Code
  2. PHP

Membangun Startup Anda: Meningkatkan Keamanan

Scroll to top
Read Time: 8 mins
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Invite People via URL
Building Your Startup: Preparing for Text Messaging

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Tutorial ini adalah bagian dari serial Membangun Startup Anda dengan PHP di Envato Tuts+. Dalam seri ini, saya membimbing Anda melalui peluncuran startup dari konsep ke kenyataan menggunakan aplikasi Meeting Planner saya sebagai contoh di kehidupan nyata. Setiap langkah di sepanjang jalan, saya akan merilis kode Meeting Planner sebagai contoh sumber terbuka yang bisa Anda pelajari. Saya juga akan membahas masalah bisnis terkait startup saat mereka muncul.

Pada episode sebelumnya, saya membahas terutama keamanan server web dan kontrol akses. Dalam episode hari ini, saya akan membahas pengamanan tambahan yang saya tambahkan ke Meeting Planner. Karena semua kode ditulis dalam Yii2 Framework untuk PHP, saya dapat memanfaatkan kerangka untuk sejumlah pertahanan ini. Jika Anda ingin mempelajari lebih lanjut tentang Yii2, lihat seri paralel kami Pemrograman dengan Yii2.

Anda bisa mencoba Meeting Planner sekarang dengan menjadwalkan pertemuan pertama Anda. Jangan ragu untuk mengirim umpan balik tentang pengalaman Anda di komentar di bawah ini. Saya juga terbuka terhadap gagasan dan saran fitur baru untuk tutorial masa depan.

Membangun Peningkatan Keamanan

Menerapkan berbagai tingkat keamanan untuk Meeting Planner akan mengambil beberapa episode. Setelah server dikonfigurasi lebih kuat, saya ingin membimbing Anda melalui area keamanan lainnya untuk kode aplikasi.

Melindungi Kunci dan Kode

Jelas, penting untuk tetap mengautentikasi kunci dari hacker, tapi juga mudah untuk menerbitkannya ke GitHub. Cerita dikisahkan tentang kesalahan check-in dari tidak disengaja oleh file-file dengan kata kunci layanan atau kunci API.

Untuk mencegah hal ini di Yii, saya menyimpan file .ini eksternal di luar pohon kode. Ini akan dimuat di bagian atas dari /frontend/config/main.php dan digunakan untuk konfigurasi komponen apa saja yang diperlukan:

Pada contoh di atas, Anda bisa melihat rahasia API Facebook yang dimuat dari file inisialisasi.

Format file inisialisasi cukup mudah:

Yii2 mendorong Anda untuk menempatkan beberapa pengaturan ini di direktori /environments, terutama bila pengaturannya bervariasi antara pengembangan dan produksi.

Jadi, penting bahwa file .gitignore Anda mengecualikan versi lokal dari file-file ini:

Berikut adalah contoh salah satu file parameter lokal saya, /frontend/config/params-local.php:

Saya mungkin bisa menghabiskan lebih banyak waktu untuk mengaturnya dengan lebih baik.

Memblokir Pendaftaran yang Buruk

Building Your Own Startup - Preventing Spam SignupsBuilding Your Own Startup - Preventing Spam SignupsBuilding Your Own Startup - Preventing Spam Signups

Untuk rilis alfa, saya mengirimkan update dalam gelombang-gelombang. Dan, pada tahap awal Meeting Planner, ada sejumlah besar email buruk dari yang saya harapkan. Mailgun mempermudah identifikasi bounce dan kegagalan:

Sebagian besar kemungkinan dari celah waktu saat Meeting Planner baru dan tidak lagi berjalan—selama perawatan dan operasi tumor otak saya.

Baru-baru ini, dengan menambahkan login sosial, saya mendaftar ke Meeting Planner cukup mudah, namun pendaftaran spam masih dimungkinkan. Saya ingin membuatnya lebih sulit bagi orang untuk mendaftar dengan email yang buruk.

Untungnya, Yii menawarkan beberapa fitur yang mendukung hal ini.

Captcha

Yii2 sekarang menawarkan captcha bawaan. Jadi, siapa saja yang mendaftar dengan metode email dan password model lama harus memasukkan captcha. Anda dapat melihat field captcha di bawah ini:

Kemudian, kepatuhan terhadap captcha ditambahkan sebagai aturan untuk model SignupForm:

Jika orang-orang tidak memasukkan respons captcha yang benar, mereka tidak dapat mendaftar. Hal ini membuat registrasi otomatis sulit bagi spammer.

CheckDNS

Saya juga ingin meminimalisir registrasi dengan alamat email palsu. Validasi checkDNS Yii sebenarnya mencari record MX yang valid berdasarkan domain alamat email:

Jadi, misalnya, jika saya salah ketik gmail.com sebagai gmal.com, checkDNS mengembalikan false. Tidak ada record MX yang terdaftar untuk gmal.com. Demikian pula, tidak ada untuk spambotolympics9922.com.

Pada akhirnya, keamanan adalah proses yang berulang-ulang. Selalu ada lagi yang harus dilakukan.

Membatasi Tindakan yang Terlarang

Selanjutnya, saya ingin menambahkan batasan umum pada sejumlah tindakan yang dapat dilakukan orang-orang, untuk membatasi penyalahgunaan dan agar aplikasi tidak menjadi berat.

Pembuatan Pertemuan

Untuk mencegah orang menciptakan banyak pertemuan kosong, saya menciptakan sebuah findEmptyMeeting yang mencari pertemuan kosong dan menggunakannya kembali ketika seseorang mencoba membuat yang baru:

Dengan kata lain, jika pengguna membuat pertemuan baru 1.700 kali, mereka akan selalu disajikan dengan pertemuan kosong pertama yang mereka buat.

Membatasi Frekuensi Tindakan

Saya juga menciptakan metode withinLimit yang terstruktur umum untuk digunakan kembali di seputar aplikasi yang dapat mencegah terlalu banyak tindakan dalam waktu yang terlalu singkat. Contoh di bawah ini memeriksa bahwa tidak lebih dari n jumlah pertemuan telah dibuat pada jam terakhir dan hari terakhir:

Kapan pun seseorang mencoba membuat pertemuan, kita memeriksa withinLimit apakah mereka memungkinkan. Jika tidak, kita menampilkan pesan kesalahan flash:

Membatasi Jumlah Tindakan

Saya juga ingin membatasi jumlah tindakan secara keseluruhan. Misalnya, setiap peserta pertemuan hanya dapat menambahkan tujuh kali tanggal pertemuan per pertemuan. Dalam MeetingTime.php, saya menetapkan MEETING_LIMIT, jadi bisa diubah nantinya:

Kemudian, MeetingTime::withinLimit() memeriksa untuk memastikan bahwa tidak lebih dari tujuh kali telah disarankan oleh pengguna manapun:

Ketika mereka akan membuat MeetingTime, controller membuat metode memeriksa batas-batasnya:

Mengamankan Tugas CRON

Akhirnya hari ini, saya ingin mengamankan akses ke tugas cron jarak jauh. Ada beberapa pendekatan menarik yang dijelaskan di interwebs. Untuk saat ini, saya memeriksa bahwa $_SERVER['REMOTE_ADDR'] (alamat IP yang meminta) adalah server yang sama dengan hosting $_SERVER['SERVER_ADDR'], alamat IP lokal. $_SERVER['REMOTE_ADDR'] aman digunakan untuk keamanan—dengan kata lain, saya telah membaca bahwa itu tidak dapat dipalsukan.

Untuk pengujian saya sendiri, saya juga mengizinkan administrator yang login untuk menjalankan tugas cron.

Akhirnya, saya juga bisa menambahkan kata sandi ke tugas cron saya dan memindahkannya ke operasi command-line.

Melihat ke Depan

Saya telah menyelesaikan banyak perbaikan keamanan selama dua episode terakhir, namun masih banyak yang harus dilakukan. Pada daftar pendek saya adalah tinjauan keamanan akses yang lebih dalam, terutama melalui AJAX, pelacakan dan pemblokiran alamat IP, dan dengan hati-hati memfilter semua masukan pengguna.

Sekali lagi, tunggu apa lagi? Jadwalkan pertemuan pertama Anda, dan bagikan masukan Anda di komentar. Saya juga menghargai komentar Anda tentang masalah keamanan.

Seperti biasa, Anda bisa melihat tutorial yang akan datang di serial Membangun Startup Anda dengan PHP atau ikuti saya @reifman. Ada beberapa fitur besar yang akan muncul.

Link Terkait

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.