Setiap tahun, semakin banyak serangan hacker terjadi di dunia: dari pencurian kartu kredit hingga meretas situs toko online. Apakah Anda yakin skrip Anda benar-benar terlindungi? Untuk mengantisipasi dimulainya kursus "Pengembang PHP Backend", kolega kami menyiapkan publikasi yang menarik tentang keamanan dalam PHP ...
Pendahuluan
Skandal Facebook dan Cambridge Analytica, kebocoran korespondensi Partai Demokrat AS pada tahun 2016, pelanggaran data Google pada tahun 2018, dan peretasan Yahoo Voice pada tahun 2012 hanyalah beberapa contoh kebocoran besar yang dicatat selama beberapa tahun terakhir.
Informasi dalam skala global sekarang tersedia bagi kita tidak seperti sebelumnya. Jika Anda tidak berhati-hati, informasi tentang diri kami (termasuk informasi yang bersifat rahasia) juga mungkin berada dalam domain publik.
Tidak masalah apa pun proyek yang Anda kembangkan: permainan anak-anak sumber terbuka atau menyelesaikan pesanan dari perusahaan besar. Tanggung jawab Anda sebagai pengembang web adalah memberikan keamanan untuk semua platform Anda. Keamanan adalah aspek yang sangat sulit.
Bahasa PHP menyediakan beberapa alat dan fungsi yang dapat Anda gunakan untuk memastikan keamanan aplikasi.
3 aturan keamanan kata sandi

Kata sandi pengguna harus tetap tidak diketahui oleh Anda.
Saya masih ingat langkah pertama saya sebagai pengembang PHP. Aplikasi pertama yang saya buat adalah sebuah permainan di mana, bersama dengan teman-teman saya, saya memainkan peran sebagai pembuat gedung pencakar langit. Masing-masing dari kita dapat masuk ke akun kita, membeli pembangun dan mengirim tim kita ke lokasi konstruksi baru setiap minggu. Saya membuat akun dasar: Saya menambahkan nama pengguna dan kata sandi untuk setiap pengguna dan mengirimkannya kepada mereka melalui email. Dan hanya setelah beberapa bulan saya menyadari betapa bodohnya itu.
Aturan umumnya adalah ini: Anda seharusnya tidak hanya tidak mengetahui kata sandi pengguna Anda - Anda seharusnya tidak dapat mengenalinya. Ini adalah aspek yang sangat serius yang bahkan dapat menimbulkan tanggung jawab hukum.Dengan coba-coba, Anda masih sampai pada kesimpulan bahwa kata sandi tidak perlu disimpan dalam teks biasa atau sedemikian rupa sehingga mereka dapat dengan mudah didekripsi.
Jangan masukkan batasan kata sandi
Mari kita mainkan satu game. Coba tebak kata sandinya:
**********Sulit kan? Mari kita coba ini:
P * r *** e ***Sekarang Anda tahu bahwa ada huruf kapital dan beberapa huruf kapital. Dan jika demikian:
P * r *** e911Sekarang akan lebih mudah bagi Anda untuk menebak kata sandi - karena Anda tahu bahwa kata sandi itu mencakup huruf besar, huruf besar, dan angka.
Hal yang sama terjadi ketika Anda menerapkan batasan pada pengguna dan topeng untuk kata sandi mereka. Jika aplikasi Anda memiliki persyaratan untuk mengikuti pola tertentu, Anda memberikan petunjuk penyusup yang dapat mereka gunakan untuk melawan Anda.
Diperlukan panjang kata sandi minimum tertentu adalah normal, karena panjang kata sandi memengaruhi waktu yang dibutuhkan untuk mengambilnya. Namun, sebagai gantinya, akan jauh lebih berguna untuk mengetahui bagaimana algoritma dan hashing bekerja.
Omong-omong, jawaban yang benar untuk teka-teki di atas adalah
"Porsche911" :)
Jangan pernah mengirim kata sandi melalui email dalam bentuk yang paling murni
Salah satu kesalahan pertama saya sebagai pengembang web adalah saya tidak belajar mengatur kata sandi sebelumnya.
Bayangkan Anda adalah klien dan Anda menyewa seorang pengembang untuk membuat situs e-commerce yang bagus untuk bisnis Anda. Pengembang ini telah mengirimi Anda email yang berisi kata sandi untuk situs Anda. Sekarang Anda tahu tiga hal tentang karyawan Anda:
- Dia tahu kata sandi Anda.
- Ia menyimpan kata sandi Anda dalam bentuk yang paling murni, tanpa menggunakan enkripsi apa pun.
- Dia tidak merasakan kekhawatiran sedikit pun ketika mengirim kata sandi melalui Internet.
Sebagai tanggapan, tidak ada pilihan selain memberhentikan karyawan tersebut.
Inilah yang harus dilakukan oleh pengembang web:- Buat halaman di aplikasi web Anda di mana pengguna dapat memasukkan email-nya kalau-kalau ia lupa kata sandi dan dengan demikian meminta kata sandi baru.
- Aplikasi Anda akan menghasilkan hak akses unik dan mengikatnya ke pengguna yang membuat permintaan (saya pribadi menggunakan pengenal individu universal).
- Aplikasi akan mengirimkan email kepada pengguna dengan tautan yang mengarah ke hak akses.
Segera setelah pengguna mengikuti tautan, aplikasi akan mengonfirmasi akses yang benar dan memungkinkan pengguna untuk mengubah kata sandi.
Lihat bagaimana keamanan aplikasi tumbuh dengan langkah-langkah sederhana ini? Jika diinginkan, kami dapat meningkatkan tingkat keamanan lebih jauh dengan menambahkan batas waktu antara permintaan dan pengaturan kata sandi baru.
Cara hash kata sandi pengguna

Kata sandi dalam aplikasi web harus diacak, bukan dienkripsi. Enkripsi adalah algoritma dua arah. Urutan dienkripsi, yang kemudian dapat Anda dekripsi dan gunakan kembali. Teknik ini sering digunakan dalam intelijen untuk mendapatkan informasi dari sekutu.
Hashing menunjukkan bahwa urutan tidak dapat dikembalikan ke plaintext. Ini adalah tujuan akhir dari keseluruhan proses.
Untuk mencapai tujuan yang berbeda, banyak algoritma telah dikembangkan: beberapa dicirikan oleh kecepatan tinggi, yang lain sangat andal. Teknologi ini terus berkembang, dan selama beberapa tahun terakhir telah mengalami banyak perubahan. Sekarang kita akan mempertimbangkan tiga varietas yang paling populer dalam urutan kronologis.
SHA-1
Ini secara historis fungsi hash pertama. Singkatan SHA-1 adalah singkatan dari "Safe Hashing Algorithm," yang dikembangkan oleh Badan Keamanan Nasional AS.
SHA-1 terkenal dan banyak digunakan dalam PHP untuk membuat string heksadesimal 20-byte dengan panjang 40 karakter.
Industri SSL telah menggunakan SHA-1 untuk tanda tangan digital selama beberapa tahun. Kemudian, setelah mengidentifikasi beberapa kelemahan, Google memutuskan bahwa sudah waktunya untuk beralih ke SHA-2.
Versi pertama dari algoritma ini tidak digunakan lagi pada tahun 2005. Selanjutnya, versi baru dikembangkan dan diadopsi untuk digunakan: SHA-2, SHA-2 dan SHA-256.
Bcrypt
Bcrypt, bukan hasil dari pengembangan alami SHA, berhasil menarik khalayak luas karena tingkat keamanannya.
Algoritma yang sangat lambat ini dibuat untuk membuat urutan hash yang paling aman. Dalam proses hashing data, ia melewati beberapa siklus, yang dalam teknologi komputer digambarkan oleh indikator biaya tenaga kerja. Semakin tinggi tingkat tenaga kerja, semakin mahal bagi peretas untuk mendapatkan kata sandi.
Ada kabar baik: di masa depan, kita akan dapat menggunakan mesin yang lebih kuat yang mampu lebih cepat melewati lebih banyak siklus.
Argon2
Ini adalah algoritma hashing modis baru yang dikembangkan oleh Alex Biryukov, Daniel Dinu dan Dmitry Hovratovich dari University of Luxembourg. Pada 2015, ia memenangkan Kontes Hashing Kata Sandi.
Argon2 disajikan dalam 3 versi:- Argon2d mengakses berbagai memori, yang mengurangi memori dan waktu overhead. Namun, ia memiliki risiko serangan melalui saluran pihak ketiga.
- Argon2i adalah kebalikan dari Argon 2d. Ini dioptimalkan untuk serangan pada saluran pihak ketiga dan mengakses memori secara independen dengan kata sandi.
- Argon2id adalah versi antara dua versi sebelumnya.
Fungsi ini memiliki 6 parameter:
urutan kata sandi, garam, biaya memori, biaya waktu, faktor paralelisme (jumlah maksimum utas paralel), panjang hash.Di bagian kedua artikel ini, saya akan memberi tahu Anda cara menggunakan hashing ini di PHP menggunakan fungsi bawaan, dan sekarang saya ingin mengundang semua orang ke
server web web gratis "ServerLess PHP", di mana kita akan berkenalan dengan konsep Serverless, berbicara tentang penerapannya dalam AWS, penerapan, harga. Kami akan menganalisis prinsip-prinsip perakitan dan peluncuran, serta membangun TG-bot sederhana berdasarkan AWS Lambda.