Apa praktik terbaik untuk mengamankan bagian admin situs web? [Tutup]

92

Saya ingin tahu apa yang dianggap orang sebagai praktik terbaik untuk mengamankan bagian Admin situs web, khususnya dari sudut pandang otentikasi / akses.

Tentu saja ada hal-hal yang jelas, seperti menggunakan SSL dan mencatat semua akses, tetapi saya bertanya-tanya di mana di atas langkah-langkah dasar ini orang-orang menganggap bilah harus disetel.

Sebagai contoh:

  • Apakah Anda hanya mengandalkan mekanisme otentikasi yang sama yang Anda gunakan untuk pengguna biasa? Jika tidak, apa?
  • Apakah Anda menjalankan bagian Admin di 'domain aplikasi' yang sama?
  • Langkah apa yang Anda ambil untuk membuat bagian admin tidak ditemukan? (atau apakah Anda menolak keseluruhan 'ketidakjelasan')

Sejauh ini, saran dari penjawab meliputi:

  • Memperkenalkan jeda sisi server buatan ke dalam setiap pemeriksaan sandi admin untuk mencegah serangan brute force [Seni Pengembang]
  • Gunakan halaman login terpisah untuk pengguna dan admin menggunakan tabel DB yang sama (untuk menghentikan XSRF dan pemberian akses pencurian sesi ke area admin) [Thief Master]
  • Pertimbangkan juga untuk menambahkan otentikasi asli server web ke area admin (mis. Melalui .htaccess) [Master Pencuri]
  • Pertimbangkan untuk memblokir IP pengguna setelah sejumlah upaya login admin yang gagal [Thief Master]
  • Tambahkan captcha setelah upaya login admin yang gagal [Thief Master]
  • Sediakan mekanisme yang sama kuatnya (menggunakan teknik di atas) untuk pengguna dan juga admin (misalnya, jangan perlakukan admin secara khusus) [Lo'oris]
  • Pertimbangkan otentikasi tingkat kedua (mis. Sertifikat klien, kartu pintar, ruang kartu, dll.) [JoeGeeky]
  • Hanya izinkan akses dari IP / Domain tepercaya, tambahkan pemeriksaan ke pipeline HTTP dasar (misalnya, HttpModules) jika memungkinkan. [JoeGeeky]
  • [ASP.NET] Kunci IPrincipal & Principal (buat mereka tetap dan tidak dapat dihitung) [JoeGeeky]
  • Peninggian Hak Federasi - mis. Mengirim email ke admin lain ketika hak admin mana pun ditingkatkan. [JoeGeeky]
  • Pertimbangkan hak yang sangat rinci untuk admin - mis. Daripada hak berdasarkan peran, tentukan hak untuk tindakan indikidual per admin [JoeGeeky]
  • Batasi pembuatan admin - mis. Admin tidak dapat mengubah atau membuat akun admin lain. Gunakan klien 'superadmin' yang dikunci untuk ini. [JoeGeeky]
  • Pertimbangkan Sertifikat SSL Sisi Klien, atau keyfobs jenis RSA (token elektronik) [Daniel Papasian]
  • Jika menggunakan cookie untuk Otentikasi, gunakan cookie terpisah untuk admin dan halaman normal, misalnya dengan meletakkan bagian admin di domain yang berbeda. [Daniel Papasian]
  • Jika praktis, pertimbangkan untuk menyimpan situs admin di subnet pribadi, dari internet publik. [John Hartsock]
  • Terbitkan ulang tiket autentikasi / sesi saat berpindah antara admin / konteks penggunaan normal situs web [Richard JP Le Guen]
UpTheCreek
sumber
2
Hanya pemikiran tapi. Mungkin cara terbaik untuk mengamankan bagian admin adalah tidak memilikinya di internet umum. Anda dapat memilih untuk menyimpan situs admin hanya di subnet pribadi.
John Hartsock
1
Manakah dari ide berikut yang Anda tentukan, bukankah ide yang baik untuk diterapkan ke semua pengguna, bukan hanya admin?
Sungai Vivian
Anda mungkin ingin memeriksa WebLoginProject di webloginproject.com itu adalah sistem login kolaboratif yang dirancang dasar untuk aman terhadap XSS, SQL Injection, Sesi fiksasi dan kerentanan CSRF. Ini memiliki kode sumber dalam ASP dan PHP, itu multibahasa dan terlihat keren. Banyak pengembang sedang mengerjakannya untuk memperbaiki lubang sehingga ini mungkin sedekat mungkin dengan yang bisa didapat.
stagas
-1 untuk memasukkan "kata sandi kuat" yang salah (yang sebenarnya adalah kata sandi yang sangat lemah) saran
o0 '.
@Lohoris - Saya benar-benar tidak mengerti mengapa Anda tidak menyukai pertanyaan ini. Apakah Anda downvoting karena saya meringkas saran seseorang yang tidak Anda setujui? Mungkin merendahkan jawaban terkait akan lebih konstruktif. : / Dapatkah Anda menjelaskan dengan tepat apa yang menjadi masalah Anda?
UpTheCreek

Jawaban:

19

Ini semua adalah jawaban yang bagus ... Saya biasanya ingin menambahkan beberapa lapisan tambahan untuk bagian administratif saya. Meskipun saya telah menggunakan beberapa variasi pada sebuah tema, umumnya termasuk salah satu dari yang berikut:

  • Otentikasi tingkat kedua : Ini dapat mencakup sertifikat klien (Contoh sertifikat x509), kartu pintar, ruang kartu, dll ...
  • Batasan domain / IP : Dalam hal ini, hanya klien yang berasal dari domain tepercaya / dapat diverifikasi; seperti subnet internal; diizinkan masuk ke area admin. Admin jarak jauh sering kali melalui titik masuk VPN tepercaya sehingga sesi mereka dapat diverifikasi dan sering kali dilindungi dengan kunci RSA juga. Jika Anda menggunakan ASP.NET, Anda dapat dengan mudah melakukan pemeriksaan ini di HTTP Pipeline melalui Modul HTTP yang akan mencegah aplikasi Anda menerima permintaan apa pun jika pemeriksaan keamanan tidak dipenuhi.
  • Dikunci IPr Principal & Principal-based Authorization : Membuat Prinsip kustom adalah praktik yang umum, meskipun kesalahan umum adalah membuatnya dapat diubah dan / atau hak dapat dihitung. Meskipun ini bukan hanya masalah admin, ini lebih penting karena di sinilah pengguna cenderung memiliki hak yang lebih tinggi. Pastikan mereka tidak dapat diubah dan tidak dapat dihitung. Selain itu, pastikan semua penilaian untuk Otorisasi dilakukan berdasarkan Prinsipal.
  • Ketinggian Hak Federasi : Ketika akun mana pun menerima sejumlah hak tertentu, semua admin dan petugas keamanan segera diberitahu melalui email. Ini memastikan bahwa jika penyerang meningkatkan hak, kami langsung tahu. Hak-hak ini umumnya berkisar pada hak pribadi, hak untuk melihat informasi yang dilindungi privasi, dan / atau informasi keuangan (misalnya kartu kredit).
  • Berikan hak dengan hemat, bahkan untuk Admin : Akhirnya, dan ini bisa menjadi sedikit lebih maju untuk beberapa toko. Hak otorisasi harus dijaga kerahasiaannya dan harus melingkupi perilaku fungsional yang nyata. Pendekatan Khas Role-Based Security (RBS) cenderung memiliki mentalitas Kelompok . Dari perspektif keamanan, ini bukan pola terbaik. Alih-alih ' Grup ' seperti ' Pengelola Pengguna ', coba uraikan lebih lanjut ( Mis. Buat Pengguna, Otorisasi Pengguna, Tingkatkan / Cabut hak akses, dll ...). Ini dapat memiliki sedikit lebih banyak biaya dalam hal administrasi, tetapi ini memberi Anda fleksibilitas untuk hanya menetapkan hak yang sebenarnya dibutuhkan oleh grup admin yang lebih besar. Jika akses diganggu setidaknya mereka mungkin tidak mendapatkan semua hak. Saya ingin membungkus ini dalam izin Code Access Security (CAS) yang didukung oleh .NET dan Java, tetapi itu di luar cakupan jawaban ini. Satu hal lagi ... dalam satu aplikasi, admin tidak dapat mengelola perubahan akun admin lain, atau menjadikan pengguna sebagai admin. Itu hanya dapat dilakukan melalui klien yang terkunci yang hanya dapat diakses oleh beberapa orang.
JoeGeeky
sumber
19

Jika situs web memerlukan login untuk aktivitas reguler dan admin, misalnya forum, saya akan menggunakan login terpisah yang menggunakan database pengguna yang sama. Ini memastikan bahwa XSRF dan pencurian sesi tidak akan mengizinkan penyerang mengakses area administratif.

Selain itu, jika bagian admin berada dalam subdirektori terpisah, mengamankannya dengan autentikasi server web (misalnya .htaccess di Apache) mungkin merupakan ide yang bagus - maka seseorang memerlukan kata sandi dan kata sandi pengguna tersebut.

Menyamarkan jalur admin hampir tidak menghasilkan keuntungan keamanan - jika seseorang mengetahui data login yang valid, kemungkinan besar dia juga dapat mengetahui jalur alat admin karena dia melakukan phishing atau memasukkan Anda ke keylog atau mendapatkannya melalui manipulasi psikologis (yang mungkin akan mengungkapkan jalan juga).

Perlindungan brute-force seperti memblokir IP pengguna setelah 3 kali login gagal atau memerlukan CAPTCHA setelah login gagal (bukan untuk login pertama karena itu sangat mengganggu bagi pengguna yang sah) mungkin juga berguna.

ThiefMaster
sumber
9
  • Saya menolak ketidakjelasan
  • Menggunakan dua sistem otentikasi, bukan satu, berlebihan
  • Jeda buatan di antara upaya harus dilakukan untuk pengguna juga
  • Memblokir IP dari upaya yang gagal harus dilakukan untuk pengguna juga
  • Kata sandi yang kuat juga harus digunakan oleh pengguna
  • Jika Anda menganggap captcha baik-baik saja, coba tebak, Anda juga dapat menggunakannya untuk pengguna

Ya, setelah menulisnya, saya menyadari bahwa jawaban ini dapat diringkas sebagai "tidak ada yang istimewa untuk login admin, semuanya adalah fitur keamanan yang harus digunakan untuk login apa pun".

o0 '.
sumber
6
Terima kasih atas jawabannya. Secara pribadi saya cenderung tidak setuju, misalnya: Apakah pengguna akan senang dengan sandi seperti 'ksd83,' | 4d # rrpp0% 27 & lq (go43 $ sd {3> '? Dan, Bukankah mengatur ulang blok IP yang telah dipicu oleh pengguna yang valid pelupa akan menghasilkan pekerjaan admin / layanan pelanggan yang tidak perlu? Secara pribadi saya pikir berbagai tingkat risiko membenarkan pendekatan yang berbeda
UpTheCreek
1
Kata sandi admin harus rumit tetapi tidak terlalu rumit, jika tidak, bahkan admin tidak akan mengingatnya dan akan menuliskannya di suatu tempat (Anda akan memaksanya untuk menentang setiap aturan keamanan). Memblokir IP sementara dengan upaya yang gagal cukup standar, vbulletin melakukannya, phpbb melakukannya IIRC, pengguna sudah terbiasa.
o0 '.
Saya tidak benar-benar ingin melihat phpbb atau vbulletin untuk praktik keamanan terbaik;)
UpTheCreek
@UpTheCreek tentu saja, saya setuju! Saya baru saja mempertanyakan ini "Bukankah menyetel ulang blok IP yang dipicu oleh pengguna yang valid dengan menjadi pelupa akan menghasilkan pekerjaan admin / layanan pelanggan yang tidak perlu" <- Saya tidak berpikir itu akan menjadi masalah, karena pengguna sudah digunakan ke fitur seperti itu.
o0 '.
3

Jika Anda hanya menggunakan satu login untuk pengguna yang memiliki hak istimewa pengguna biasa dan hak istimewa admin, buat ulang pengenal sesi mereka (baik itu dalam cookie atau parameter GET atau apa pun ...) bila ada perubahan pada tingkat hak istimewa ... setidaknya.

Jadi jika saya masuk, melakukan banyak hal pengguna biasa dan kemudian mengunjungi halaman admin, buat ulang ID sesi saya. Jika saya kemudian keluar dari halaman admin ke halaman pengguna biasa, buat kembali ID saya.

Richard JP Le Guen
sumber
Bisakah Anda menjelaskan apa yang dicapai ini?
Denis Pshenov
Saya percaya ini tidak akan membantu sebanyak yang Anda pikirkan. Karena jika penyerang bisa mendapatkan id sesi Anda saat ini di halaman pengguna biasa, dia dapat menggunakannya untuk mengakses halaman admin dan membuat sendiri ID sesi baru. Koreksi saya jika saya salah.
Denis Pshenov
1
Tetapi penyerang tidak dapat mengakses halaman admin tanpa kata sandi. Tidak ada perubahan dalam tingkat hak sampai setelah otentikasi. Kegagalan untuk membuat ulang ID sesi berarti mereka dapat menggunakan kembali sesi yang dibuat secara tidak aman untuk menghindari otentikasi.
Richard JP Le Guen
Oke sekarang. Saya berpikir Anda menggambarkan skenario di mana pengguna tidak perlu masuk kembali ketika mereka beralih di antara konteks normal / admin.
Denis Pshenov
1

Miliki kata sandi admin yang baik.

Bukan "123456"hanya urutan huruf, angka dan karakter khusus yang cukup panjang, katakanlah, 15-20 karakter. Suka "ksd83,'|4d#rrpp0%27&lq(go43$sd{3>".

Tambahkan jeda untuk setiap pemeriksaan kata sandi untuk mencegah serangan brute force.


sumber
bisakah Anda menjelaskan sedikit tentang apa itu 'jeda'? Apakah Anda bermaksud melakukan sesuatu seperti Thread.Sleep (5000) hanya untuk menghabiskan waktu?
penduduk bumi
6
ini bodoh: kata sandi yang terlalu rumit untuk diingat akan ditulis di suatu tempat (atau disimpan), sehingga membuat masalah jauh lebih buruk daripada jika Anda mengizinkan kata sandi yang BENAR-BENAR bagus (yaitu kata sandi yang akan diketik karena Anda mengingatnya alih-alih menyalin yang ditempelkan ).
o0 '.
4
Oh, saya harap saya bisa meremehkan omong kosong ini sampai ke zaman batu, itu sangat bodoh, sangat salah ... Saya benci orang menyebarkan informasi yang salah seperti ini.
o0 '.
1
@ Lo'oris: Apa sebenarnya yang tidak Anda setujui?
2
Saya sudah menulisnya di ... seperti ... komentar di atas?
o0 '.
1

Berikut beberapa hal lain yang perlu dipertimbangkan:

  1. Salah satu opsi untuk dipertimbangkan, terutama jika Anda mengelola komputer admin atau mereka secara teknis kompeten, adalah menggunakan sesuatu yang didasarkan pada sertifikat SSL untuk otentikasi klien. Keyfobs RSA dan yang lainnya juga dapat digunakan untuk keamanan tambahan.
  2. Jika Anda menggunakan cookie sama sekali - mungkin untuk otentikasi / token sesi - Anda mungkin ingin memastikan bahwa cookie hanya dikirim ke halaman admin. Ini membantu mengurangi risiko yang ditimbulkan ke situs Anda dengan mencuri cookie, baik dengan kompromi lapisan 1/2 atau XSS. Hal ini dapat dilakukan dengan mudah dengan menempatkan bagian admin pada nama host atau domain yang berbeda serta menyetel bendera aman dengan cookie.
  3. Membatasi dengan IP juga bisa menjadi hal yang cerdas, dan jika Anda memiliki pengguna di seluruh internet, Anda masih dapat melakukan ini, jika ada VPN tepercaya yang dapat mereka ikuti.
Daniel Papasian
sumber
1

Kami gunakan Windows Authenticationuntuk akses admin. Ini adalah cara paling praktis untuk melindungi area admin sambil menjaga otentikasi terpisah dari apa yang berlaku untuk pengguna akhir umum. Admin sistem mengelola kredensial akses pengguna Admin dan memberlakukan kebijakan sandi pada akun pengguna domain.

ini. __curious_geek
sumber
-1

Cara yang ketat adalah memiliki dua "peternakan" yang berbeda termasuk database, server dan semua dan memindahkan data dari satu peternakan ke yang lain. Sebagian besar sistem modern dan berskala besar menggunakan pendekatan ini (Vinyet, SharePoint, dll.). Ini biasanya disebut memiliki tahapan yang berbeda "tahap pengeditan" -> "tahap pratinjau" -> "tahap pengiriman". Metode ini memungkinkan Anda memperlakukan content / config dengan cara yang sama seperti Anda memperlakukan kode (dev-> qa-> prod).

Jika Anda tidak terlalu paranoid, Anda dapat memiliki satu database tetapi hanya bagian admin Anda yang tersedia di server "pengeditan". Maksud saya, hanya skrip / file pengeditan yang ditempatkan di server pengeditan.

Secara alami, tahap pengeditan seharusnya hanya tersedia di intranet lokal dan / atau menggunakan VPN.

Ini mungkin tampak sedikit berlebihan dan mungkin bukan solusi termudah untuk semua kasus penggunaan, tetapi jelas merupakan cara paling kuat untuk melakukan sesuatu.

Perhatikan bahwa hal-hal seperti "memiliki kata sandi admin yang kuat" itu bagus, tetapi tetap membiarkan admin Anda terbuka untuk segala jenis serangan cerdas.

Nir Retribusi
sumber
Saya pikir ini hanya akan berguna / praktis dalam CMS / situasi penerbitan murni di mana Anda mendorong konten daripada memproses data.
UpTheCreek
Mungkin, tetapi saya telah mengetahui (dan melihat) situasi di mana hal ini dilakukan untuk pemrosesan dan masukan pengguna juga. Untuk satu peternakan dengan server pengeditan terpisah, itu tidak sulit. Untuk beberapa tambak apa yang Anda lakukan adalah memasukkan masukan dari situs ke dalam antrian (DB atau sebaliknya) dan, dengan menggunakan prosedur eksternal, sedang diproses dan disalin ke server / DB "pengeditan". Ini memberi Anda lebih banyak kendali atas apa yang masuk ke sistem Anda. Namun, ini rumit untuk diterapkan.
Nir Levy
-2

Ini sangat tergantung pada jenis data yang ingin Anda lindungi (persyaratan hukum dan semacamnya).

  • Banyak saran tentang otentikasi .. Saya pikir Anda hanya harus mempertimbangkan untuk menggunakan otentikasi OpenId / Facebook sebagai login. (Mereka kemungkinan besar akan menghabiskan lebih banyak sumber daya untuk keamanan otentikasi daripada Anda)

  • Simpan perubahan serta perbarui nilai dalam database. Dengan begitu Anda dapat mengembalikan perubahan dari pengguna X atau antara tanggal X dan Y.

Carl Bergquist
sumber
1
Otentikasi Facebook untuk bagian admin situs web ... menurut Anda itu ide yang bagus? Untuk pengguna umum ya ... tapi untuk bagian admin ? Terasa sedikit berbahaya bagiku ...
Richard JP Le Guen
Saya tidak yakin. tapi menurut saya situs ini hanya menjalankan otentikasi openid. Dan menurut saya tidak ada perbedaan besar (secara teori) antara otentikasi facebook dan openid. Tapi saya belum membaca perjanjian lisensi atau semacamnya.
Carl Bergquist
1
Ide yang sangat buruk, openid untuk otentikasi admin, juga rollback sebagian besar waktu tidak mungkin, dan orang jahat semuanya siap di dalam sistem Anda ... rollback apa?
Aristos
Jangan ragu untuk menjelaskan mengapa menurut Anda itu buruk. Nah jika login sebagai admin memberi Anda akses penuh ke db dan backup pasti sulit untuk melakukan rollback, tetapi dalam hal ini Anda semua siap hilang. Saran saya ditujukan untuk situs cmsisch.
Carl Bergquist
-3

Saya tidak melihat ada yang menyebutkan penyimpanan / validasi kata sandi admin. Tolong jangan simpan PW dalam teks biasa, dan sebaiknya jangan sesuatu yang dapat dibalik - gunakan sesuatu seperti hash MD5 yang diasinkan sehingga paling tidak jika seseorang mengambil "kata sandi" yang tersimpan, mereka tidak punya apa pun yang sangat berguna, kecuali mereka juga memiliki skema garam Anda.

Wayne Werner
sumber
1
-1 untuk md5. Anda tidak ingin hash cepat untuk kata sandi, bahkan di luar masalah lain dengan md5ing. bcrypt akan menjadi opsi yang lebih baik.
Kzqai
-4

Tambahkan bidang kata sandi dan pertanyaan keamanan yang akan diketahui oleh Administrator, misalnya siapa nama pacar pertama Anda, atau acak pertanyaan setiap kali melihat panel admin.

Mungkin Anda selalu bisa meletakkan bagian administrasi di direktori besar, mis

http://domain.com/sub/sub/sub/sub/sub/index.php

Tapi itu tidak terlalu bagus hah.

Mungkin Anda bisa memasukkan string kueri di halaman beranda, seperti:

http://domain.com/index.php?display=true

Jika ya, bidang nama pengguna dan kata sandi akan muncul.

MacMac
sumber