Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Teknik Sederhana untuk Mengunci Situs Web Anda

by
Read Time:15 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Diangr (you can also view the original English article)

Salah satu bagian penting dari praktek pengembangan PHP selalu diingat bahwa keamanan bukanlah sesuatu yang dapat Anda beli dari rak di toko lokal Anda. Memastikan keamanan aplikasi web Anda adalah suatu proses, yang dari waktu ke waktu, perlu terus dievaluasi, dipantau, dan dikeraskan.


Pengenalan

Sementara penggunaan filter dan memvalidasi data adalah salah satu bagian dari proses keamanan, pengembang web harus menyadari bahwa Randomisasi, Obfuscation, dan Kriptografi dalam PHP dapat membuat perbedaan dalam keamanan aplikasi web. Tutorial ini akan memandu Anda melalui beberapa teknik sederhana dalam membuat dan menggunakan nilai acak atau unik dalam aplikasi web Anda, melihat dan menerapkan beberapa teknik obfuscation umum, dan melihat lebih dalam ke dalam ilmu Kriptologi dan menggunakannya dalam PHP.


Apa yang Akan Anda Pelajari

  • Cara menghasilkan nilai acak dengan PHP
  • Menghasilkan kata sandi acak
  • Salting Passwords dan Mengotentikasi Pengguna
  • Obfuscation dalam PHP, sebuah Ikhtisar
  • Kriptografi dalam PHP dan Aplikasi itu

Menghasilkan Nilai Acak

Dictionary.com mendefinisikan pengacakan sebagai:

"-verb: untuk memesan atau memilih secara acak, seperti dalam sampel atau percobaan, terutama untuk mengurangi bias dan gangguan yang disebabkan oleh variabel yang tidak relevan; membuat acak."

Generasi nomor acak ditentukan dalam berbagai cara, namun generator komputasi tidak memiliki keacakan 'benar' seperti yang terlihat di alam atau suara elektronik (saluran fuzzy, screeching, hitam dan putih di TV). Nilai-nilai yang dihitung ini dianggap sebagai pseudo-random.

PHP menyediakan kita dengan beberapa cara berbeda untuk menciptakan nilai acak. Mari kita lihat beberapa fungsi yang lebih populer.

Dua fungsi rand() dan mt_rand() kemungkinan merupakan fungsi yang paling banyak digunakan untuk menghasilkan satu set angka acak dalam PHP. Fungsi rand(); adalah generator yang lebih tua, dan tidak digunakan karena mt_rand(); yang lebih cepat, lebih dapat diandalkan, dan dapat menangani nilai integer maksimum yang lebih tinggi pada beberapa platform. Fungsi str_shuffle() melakukan persis seperti yang Anda harapkan, ia mengocok string yang dilewatkan ke sana.

Fungsi rand() dan mt_rand() keduanya menerima dua parameter di mana $min adalah bilangan bulat terendah untuk memulai dengan, dan $max menjadi bilangan bulat terbesar untuk diakhiri. Fungsi str_shuffle mengambil satu parameter, sebuah string, menghasilkan mutasi yang diacak dari string. Kerjanya sama seperti jika Anda menyeret setumpuk kartu.

Sementara mt_rand(); akan memuntahkan bilangan bulat acak, dan str_shuffle akan mencampur string, fungsi yang banyak digunakan untuk membuat nilai unik acak adalah uniqid(). Ini menghasilkan pengenal unik prefiks berdasarkan waktu saat ini dalam mikrodetik (melalui php.net). Menggunakan fungsi ini berguna untuk membuat token sesi dan bahkan membentuk kunci seperti yang terlihat di Secure Your Forms dengan Tombol Form.

Fungsi uniqid() menerima dua parameter yang pertama menambahkan awalan ke hasil sementara yang kedua, jika diset ke TRUE, akan menambahkan entropy tambahan ke akhir nilai yang dikembalikan.


Menghasilkan Sandi Acak

Ada contoh trilyunan di web yang menghasilkan kata sandi acak, semua melakukan pekerjaan yang baik. "Tapi mengapa," Anda bertanya "apakah saya perlu membuat kata sandi acak?" Jawabannya, cukup sederhana, adalah sehingga Anda tidak harus bergantung pada pengguna akhir untuk memberikan diri mereka dengan kata sandi yang kurang aman pada saat memulai. Membuat kata sandi acak sangat berguna dalam pendaftaran pengguna, atau ketika pengguna mengajukan permintaan karena mereka lupa kata sandinya. Melakukan hal ini memastikan kata sandi yang kuat di awal pengalaman pengguna di situs web Anda, atau dapat memotong baris kode saat pengguna perlu mendapatkan akses lagi.

Mari kita lihat beberapa contoh: Contoh 1

Contoh ini mengocok string dengan str_shuffle dan akan mengembalikan string dalam rentang yang dihitung. Jadi jika Anda ingin menghasilkan password 8 karakter maka Anda akan meneruskan 8 ke randompassword fungsi, atau randompassword (8) dari kode sumber Anda.

Contoh 2

Sebagai perbandingan, contoh seseorang mengambil string statis dan mencampurnya lalu mengembalikannya, misalnya dua menambahkan dalam rasa yang lebih dinamis (mmm lezat). Misalnya dua string yang dikocok tidak lagi statis, tetapi berubah dengan setiap generasi. Sementara contoh pertama tentu cukup dalam banyak kasus untuk menghasilkan kata sandi yang kuat, contoh kedua memungkinkan kita untuk memastikan panjang string dan karakter akan berubah dengan penggunaan, sangat mengurangi kemungkinan duplikasi.

Menegakkan penggunaan kata sandi yang kuat dalam aplikasi web akan menghalangi pengguna mengunjungi atau mendaftar untuk situs web. Ini sering merupakan trade off antara mendapatkan lalu lintas yang Anda inginkan, dan memastikan keamanan aplikasi. Saya sarankan mengizinkan pengguna Anda untuk membuat kata sandi sendiri saat mendaftar, atau memungkinkan mereka untuk memilih di antara keduanya.


Tolong Lulus Garam. Salting Passwords untuk Peningkatan Keamanan.

Salting password adalah cara yang efektif untuk meningkatkan keamanan akun pengguna Anda bahkan jika penyerang mendapatkan akses ke database Anda, jika dilakukan dengan benar. Dapat dikatakan bahwa, dengan akses ke garam, penyerang masih dapat memperoleh kredensial Anda. Meskipun ini benar, menerapkan beberapa teknik pengacakan ke penyimpanan kata sandi akan membuat proses itu sangat sulit, terutama jika penyimpanan informasi pengguna dan konten dibagi menjadi database terpisah.


Kenapa dan bagaimana?

Sekali lagi ini jatuh di bawah "non-ketergantungan pengguna akhir untuk memberikan diri mereka sendiri keamanan sederhana" ukuran. Pengguna biasanya menggunakan kata sandi yang mudah diingat, dan bahkan menggunakan kata sandi yang sama di beberapa situs web (saya tahu, kan !?). Kata sandi yang mudah diingat biasanya kata-kata yang ditemukan dalam kamus dan jenis nilai lainnya (misalnya 12345, QWERTY). Sebagai pengembang, kami sering kali mencemooh praktik ini, tetapi kami tidak dapat menyangkal bahwa ini memang seperti apa adanya.

Agar aplikasi web menggunakan garam dalam kata sandi, aplikasi harus menyimpannya di suatu tempat. Tidak disarankan untuk menggunakan garam yang sama di seluruh basis data kata sandi, tetapi untuk menghasilkan garam unik per pengguna. Menghasilkan satu garam untuk seluruh database sebenarnya mengurangi keamanan aplikasi web dalam arti bahwa jika penyerang berhasil memecahkannya seluruh skema rusak, atau jika hilang, menjadikan database tidak berguna. Membuat sistem pendaftaran anggota lengkap dengan semua lonceng dan peluit berada di luar cakupan tutorial ini, namun kami akan membuat sistem sederhana untuk menggunakan contoh. Mari kita lihat menghasilkan garam dan menerapkan beberapa teknik pengacakan:


1. koneksi Database

Berikut adalah tabel SQL yang akan kita gunakan.


2. File Pendaftaran

Mari kita bahas kode PHP. Untuk menjaga hal-hal sederhana, kami menyertakan file konfigurasi database kami. Selanjutnya PHP memeriksa untuk melihat apakah formulir HTML telah dikirimkan dengan memeriksa apakah variabel $_POST tidak kosong. Jika mereka tidak kosong maka skrip hasil untuk melarikan diri dari data formulir yang diposting dari pengguna, mempersiapkannya untuk dimasukkan ke dalam database. Kami kemudian menghasilkan garam sederhana menggunakan uniqid() dan mt_rand() dan menyimpannya dalam variabel $salt_gen. Untuk mengaramkan kata sandi kami, kami menggabungkan kata $sandi, lalu garam. Langkah selanjutnya, salah satu cara hashing variabel gabungan dengan md5.

"Tapi tunggu! Kamu juga menambahkan email pengguna ke depan kata sandi dan kombo garam!" Ya! Saya melakukan ini karena, jika penyerang mendapatkan akses ke database saya dalam beberapa cara, dan garam, satu-satunya cara penyerang akan tahu pasti bahwa alamat email yang digunakan dalam hashing dari kata sandi adalah jika mereka memiliki akses ke kode sumber. Seberapa acak dan uniknya alamat email?

Untuk melengkapi sisa kode PHP, kita masukkan variabel-variabel kita ke dalam tabel database di dalam bidangnya masing-masing, dan memberi pengguna beberapa umpan balik tentang keberhasilan atau kegagalan. Sekarang ke sisa file registrasi, HTML

Di sini kami membuat formulir HTML sederhana yang akan mengumpulkan nama pengguna, email, dan kata sandi  dari pengguna. Tidak ada yang mewah di sini.


3. Mengotentikasi Pengguna

Jadi sekarang kami memiliki formulir pendaftaran sederhana, yang memasukkan pengguna ke dalam database bersama dengan kata sandi asin mereka. Mari buat halaman login yang akan mengharuskan kita untuk mengambil informasi dari database dan mengotentikasi pengguna. Pertama PHP:

Pada dasarnya apa yang kita lakukan di file login.php adalah mengambil variabel formulir yang diajukan,  meraih baris tabel yang terkait dengan nama pengguna dan membangun kembali kata sandi dari elemen-elemen dalam database yang dibuat dengan (email, pass, salt) dan mengulanginya kembali . Kami kemudian memeriksa kembali  database untuk nama pengguna DAN nilai kata kunci rehashed untuk menemukan kecocokan, menghasilkan pengguna pada keberhasilan atau kegagalan. Akhirnya di sini adalah HTML:


Obfuscation dalam PHP

Definisi obfuskasi yang sederhana namun kompleks adalah (gunakan versi yang terdapat dalam sumber jika Anda ingin menjalankan kode):

Seperti yang Anda lihat, kode ini tidak dapat dibedakan. Tidak ada nama variabel yang berbeda, tidak ada komentar, tidak ada spasi, tidak ada indentasi, tidak ada urutan yang jelas dan semuanya dalam satu baris. Meskipun kami tidak dapat membatalkan kode, mesin kami masih tahu apa itu. Berhasil. Satu baris kekacauan ini hanyalah gema "Obfusction adalah teknik yang digunakan untuk memperumit kode sedemikian rupa sehingga saya tidak dapat dimengerti." Ya, saya tahu tentang kesalahannya.

Obfuscation memiliki pro dan kontra. Tujuannya adalah untuk membujuk seseorang agar tidak mengetahui apa yang dilakukan kode secara sekilas, atau untuk jangka waktu tertentu. Ini adalah nilai tambah terhadap individu dengan sedikit atau tanpa pengetahuan bahasa pemrograman. Namun, siapa pun yang memiliki pemahaman dasar tentang PHP dapat menyebarluaskan kode yang dikaburkan di atas dan mencari tahu apa yang dilakukannya, mungkin hanya butuh sedikit waktu. Ini adalah salah satu kekurangan dari obfuscation, itu bukan bentuk enkripsi, itu hanya upaya untuk menjadi samar. Obfuscation juga biasanya menambah file. Banyak waktu, Anda akan menemukan kode yang dikaburkan dalam perangkat lunak ropriatary dan jahat.


Jadi, Bagaimana Saya Bisa Mengaburkan Kode Saya?

Ini adalah pertanyaan umum. Ada dua cara utama untuk mengaburkan kode Anda. Pertama, Anda bisa melakukannya dengan tangan. Menulis kode yang dikaburkan membutuhkan waktu yang lama. Contoh yang digunakan dalam artikel ini membutuhkan beberapa saat untuk menulis karena alasan yang sama Anda menggunakan obfuscation di tempat pertama (kurangnya struktur, pesanan dll ...), ini bahkan menghasilkan beberapa kesalahan kasar yang saya bahkan tidak ingin berburu dan perbaiki. Cara kedua Anda dapat mengaburkan kode Anda adalah dengan membeli perangkat lunak yang melakukannya untuk Anda. Menggunakan program untuk mengaburkan kode adalah hal yang sepele, dan tentu saja menghabiskan banyak uang waktu. Beberapa perangkat lunak yang mengklaim mengaburkan kode Anda, sebenarnya mengenkripsi dan / atau menyandikannya sedemikian rupa sehingga bergantung pada handshake berfungsi. Seringkali Anda akan menemukan  perangkat lunak yang vendornya bahkan tidak menjamin kode Anda akan berfungsi saat itu selesai. Bahkan dalam contoh, saya menggunakan fungsi Base64 sederhana untuk menyandikan konstruksi output skrip.


Beberapa Tip Obfuscation

  • Selalu, selalu, jagalah versi bersih dari sumber untuk diri Anda sendiri.
  • Semakin acak teknik Anda, semakin baik.
  • Hilangkan semua spasi putih, di mana tidak diperlukan.
  • Karakter Encode dicetak/echo'ed karakter dan spasi (yaitu kutipan, ruang tipis, apostropes, hypens)
  • Semakin rumit kodenya, semakin baik.
  • Abaikan struktur kecuali itu merugikan pengoperasian kode (e.x. Lokasi variabel sebelum mereka dipanggil)
  • Jangan gunakan nama variabel, ruang nama, atau nama kelas yang dapat dibedakan.
  • Semakin sedikit kode yang Anda gunakan kembali, semakin baik
  • Jangan percaya itu sangat mudah

Untuk Mengaburkan atau Tidak Mengaburkan?

Itu benar-benar tergantung pada rencanamu. Khususnya jika Anda ingin menjual skrip PHP Anda (atau perangkat lunak apa pun), Anda harus melisensikannya. Ini akan menjadi salah satu pertahanan garis depan untuk menggagalkan perangkat lunak yang dimaksudkan pemirsa dari melakukan apa pun yang mereka inginkan. Contoh utama pemberian lisensi dapat dilihat di Wiki Envato Marketplace. Namun, Anda mungkin ingin mengaburkan sebagian atau semua kode Anda karena alasan apa pun. Akan tetapi karena obfuscations negatif, jika Anda benar-benar khawatir tentang keamanan kode sumber Anda, mungkin sebaiknya mencari enkripsi sebagai  gantinya.


Kriptografi di PHP

Wikipedia.com mendefinisikan kriptografi sebagai:

"latihan dan belajar menyembunyikan informasi."

Kriptografi adalah masalah besar, apakah Anda menyadarinya atau tidak. Di hampir setiap aplikasi web yang saat ini digunakan, ada beberapa keberadaan kriptografi yang digunakan (yaitu klien dan situs web mail). Sebagai pengembang kita perlu menjadi terinformasi dan sadar tentang aplikasi praktis kriptografi dalam perangkat lunak kami. PHP menyediakan kami dengan beberapa fungsi yang sangat dasar dan praktis yang kita dapat menggunakan untuk mengenkripsi data. Dalam bagian ini, terutama akan lebih dari sekali jalan hashing algoritma meskipun saya akan menyentuh ringan pada enkripsi simetris-key berbasis. Ada lebih banyak (yaitu Steganografi, Asymmetric-kunci untuk nama beberapa).


Salah satu cara Hash

Banyak waktu kita memanfaatkan hashing sekali jalan sebagai cara untuk aman menyimpan password dan memeriksa integritas data file. Sementara kita melakukan ini, untuk mengotentikasi anggota web aplikasi yang kami hash pengguna memasukkan sandi, dan cocok terhadap hash pengguna disimpan. Teknik yang sama berlaku untuk memeriksa integritas file.

SHA-1, 2, dan 3

Keluarga algoritma hash SHA yang saat ini yang paling populer, secara signifikan SHA-1. Meskipun SHA-1 algoritma mungkin memiliki kelemahan, ianya masih digunakan secara luas.

Dalam PHP, SHA-2 dipanggil dalam hal berbeda, dan memerlukan PHP 5 lebih besar dari atau sama dengan 5.1.2. SHA-2 lebih unggul dari SHA-1 dan dapat disebut dengan ukuran berbeda sedikit.

Fungsi hash yang disebut hash (algoritma, string); Dalam versi PHP terbaru fungsi hash() dapat digunakan untuk memanggil setiap sekali jalan hash algoritma PHP mendukung (yaitu md5, sha-1, Renault, hantu). Jika Anda ingin melihat daftar semua hashing algoritma terdaftar Anda dapat menggunakan:

SHA-3 adalah masih sedang dikembangkan dan dipertimbangkan untuk standardisasi. Sebuah kompetisi untuk menemukan seorang calon yang baik untuk bertindak sebagai baru aman algoritma hash diluncurkan oleh Institut Nasional standar dan teknologi dan entri untuk kompetisi yang deadlined untuk 31 Oktober 2008. Sebuah catatan yang lebih populer bernama gulungan, memiliki modul PHP Anda dapat men-download (meskipun Anda perlu compile sendiri). Gulungan dikembangkan oleh beberapa nama besar yang ditemukan dalam industri keamanan seperti Bruce Schneier, Niels Ferguson dan Stefan Lucks untuk beberapa nama. Gulungan website resmi dapat ditemukan di sini.


Berbasis kunci enkripsi

Metode enkripsi simetris-Key adalah dimana keamanan enkripsi terutama berada di dalam sebuah kunci, yang dibagi antara dua titik, dimana data dienkripsi dan data adalah terdekrip. Contoh yang sangat baik bagaimana ini bisa bekerja diberikan oleh Christian Beikov "Menciptakan Crypter kelas dengan PHP" tutorial.


HMAC

HMAC pada dasarnya adalah seperti campuran antara sekali jalan hashing dan enkripsi berbasis kunci. HMAC keamanan bergantung pada ukuran kunci yang digunakan, dan kekuatan fungsi hash dengan dihitung.Anda dapat membandingkan metode ini dengan menggaram password.


Membungkus semuanya

Wah apa perjalanannya! Mengacak nilai, menghasilkan kata sandi acak, pengasinan, menyimpan dan mengautentikasi pengguna, kebingungan, crypto ... sepertinya membutuhkan banyak hal. Tapi setimpal! Penting untuk mengetahui jenis keamanan apa yang akan Anda terapkan ke dalam aplikasi web Anda, dan bagaimana Anda akan melindunginya. Terlebih lagi, penting untuk menjaga sikap cerdas terhadap implementasi ini dan tidak berpikir bahwa keamanan hanya diimplementasikan oleh beberapa metode, tetapi dengan kombinasi dari mereka, dengan sedikit kreativitas.

Advertisement
Did you find this post useful?
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.