Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Batasi Eksekusi PHP?

Ada beberapa lapisan yang perlu Anda lindungi.

Beberapa penghosting salah mengandalkan "perlindungan" PHP seperti open_basedir, safe_mode (PHP lama), disable_functions dll.

Bahkan PHP TIDAK menganggapnya sebagai fitur keamanan - http://php.net/security- note.php

Ini dapat dinonaktifkan dengan eksploitasi apa pun untuk PHP dan kemudian seluruh sistem akan hancur, jangan lakukan itu.

Bagaimana seharusnya dilakukan

bagian bawah

  • Pisahkan pengguna tingkat OS/sistem untuk setiap situs yang dihosting
  • izin yang benar (yang satu tidak dapat melihat/mengedit halaman yang lain) - pastikan juga sub-direktori memiliki izin yang benar karena akan serupa
  • file sesi terpisah (BANYAK webhosting meletakkan file sesi dari setiap situs yang dihosting PHP ke dalam direktori yang sama, itu buruk buruk buruk!

Apache akhirnya mendapatkan modulnya sendiri untuk ini - Apache MPM-ITK .

Singkat cerita: bayangkan ini seperti Anda akan memberi pengguna shell pada mesin (di bawah uidnya sendiri) - dia tidak dapat melakukan apa pun ke situs lain yang dihosting.

  1. uid/gid berbeda
  2. izin sistem
  3. kerangka kerja seperti SELinux, AppArmor, dan sejenisnya
  4. grsecurity jika Anda ingin menjadi hardcore.. tetapi sistem akan lebih sulit untuk dipelihara.

naik?

Anda bisa mendapatkan lebih banyak hard-core. Yang terbaik yang pernah saya lihat adalah perpustakaan bersama untuk Apache (atau apa pun yang Anda gunakan) - yang digunakan ketika Apache mulai menggunakan LD_PRELOAD dan itu mengimplementasikan semua panggilan sistem yang berpotensi berbahaya seperti system() , execve() dan pada dasarnya panggilan lain yang menurut Anda buruk.

Saya belum melihat implementasi yang baik dari ini di luar sana (selain yang khusus di suatu tempat) - koreksi saya jika saya salah.

Pastikan untuk menerapkan daftar putih untuk ini sebagai mis. mail() di PHP mengeksekusi sendmail secara default dan itu tidak akan berfungsi lagi.

kesimpulan

Tambahkan disable_functions klasik, open_basedir, dll. ke dalam php.ini global, tambahkan session.save_path ke setiap vhost - masukkan sesi ke direktori pengguna. Pastikan pengguna tidak membagikan apa pun .

Terapkan pemisahan tingkat OS yang mendasari dengan benar.

Dapatkan hardcore dengan grsec dan LD_PRELOAD lib hooking system call.

Pemisahan, pemisahan, pemisahan .. segera sistem seperti Docker akan menyediakan wadah berbasis LXC untuk memisahkan pengguna di tingkat kernel tetapi belum siap produksi (imho).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Enum di Hibernate, bertahan sebagai enum

  2. Menanamkan mysql di aplikasi desktop java

  3. memutar log kueri lambat mysql

  4. perintah mysql tidak sinkron saat menjalankan penyisipan dari seledri

  5. MySQL Rata-rata Setiap 4 Baris