Saya memiliki kasus penggunaan yang sangat spesifik di mana situs yang dibuat untuk pengacara dan setiap kliennya dapat login ke 'halaman / portal khusus' mereka sendiri (jenis posting khusus) tanpa kemampuan untuk mengakses wp-admin dll. (Saya membuat semua halaman login / register / pengeditan profil di ujung depan). Di halaman / portal ini pengacara akan meninggalkan pesan dan file untuk diunduh klien , sekarang secara teoritis, satu klien dapat menebak (atau jika memiliki pengetahuan tentang file klien lain) nama file lain dan mengunduh kemudian dengan demikian menciptakan masalah dengan privasi / keamanan / materi rahasia dll.
Saya mencari ide / konsep untuk solusi, pemikiran awal saya adalah memiliki titik tautan unduhan ke beberapa download.php mengirimkan id lampiran, id pengguna, halaman / id portal dan nonce dan di sisi lain memprosesnya. .
Bagaimana menurut anda? Apakah saya di jalur yang benar atau pendekatan ini cacat?
Terima kasih!
Jawaban:
Yang perlu terjadi adalah bahwa Anda perlu mem-proxy permintaan unduhan untuk jenis file yang Anda inginkan melalui WordPress. Mari kita asumsikan Anda akan membatasi akses ke file ".doc".
1. Tetapkan variabel kueri yang menunjukkan file yang diminta
2. Perbarui .htaccess untuk meneruskan permintaan file terbatas ke WordPress
Ini akan menangkap permintaan ke file yang ingin Anda batasi dan mengirimkannya kembali ke WordPress menggunakan variabel kueri khusus di atas. Masukkan aturan berikut sebelum
RewriteCond
baris.3. Menangkap nama file yang diminta dalam variabel kueri khusus; dan verifikasi akses ke file:
NB Solusi ini hanya berfungsi untuk pemasangan satu situs ! Ini karena WordPress MU sudah meneruskan permintaan file yang diunggah melalui sub-situs
wp-includes/ms-files.php
. Ada solusi untuk WordPress MU juga, tetapi sedikit lebih terlibat.sumber
intercept_file_request
atau yang dipanggil di mana saja, bagaimana fungsi itu dipecat?wp
, saya sudah memperbarui contoh.Saya baru-baru ini memiliki masalah terkait dan menulis artikel ini tentang itu .
Saya akan menganggap bahwa unduhan diunggah melalui penanganan media WordPress - atau Anda memiliki ID lampiran untuk unduhan.
Garis besar solusi
.htaccess
untuk memblokir segala upaya untuk secara langsung mengakses file dalam direktori unggahan (atau sub-direktori daripadanya) - misalnya viamysite.com/wp-content/uploads/conf/2012/09/myconfidentialfile.pdf
)Peringatan
.htaccess
untuk memberikan keamanan . Jika ini tidak tersedia / dihidupkan (server nginx misalnya), maka Anda tidak akan mendapatkan banyak keamanan. Anda dapat mencegah pengguna menelusuri direktori uplods. Tetapi akses langsung akan bekerja.Memblokir akses langsung
Untuk melakukan ini di folder unggahan Anda (atau subfolder - semua materi rahasia harus berada, di kedalaman apa pun, di dalam folder ini). Tempatkan
.htaccess
file dengan yang berikut ini:Berikut ini saya berasumsi bahwa Anda akan melampirkan materi rahasia ke jenis posting 'klien'. Setiap media yang diunggah pada halaman edit klien akan disimpan dalam
uploads/conf/
folderFungsi untuk mengatur direktori unggahan yang dilindungi
Mengunggah materi rahasia
Setelah melakukan itu, konten yang diunggah harus berada di dalam
uploads/conf
dan mencoba mengaksesnya langsung menggunakan browser Anda seharusnya tidak berfungsi.Mengunduh Konten
Ini mudah. Url unduhan dapat berupa sesuatu
www.site.com?wpse26342download=5
(di mana 5 adalah ID lampiran dari konten yang diunggah). Kami menggunakan ini untuk mengidentifikasi lampiran, memeriksa izin pengguna saat ini dan memungkinkan mereka untuk mengunduh.Pertama, atur variabel kueri
Sekarang siapkan pendengar untuk (mungkin) memicu unduhan ...
Komentar terakhir
Kode di atas mungkin mengandung kesalahan bug / sintaksis dan belum diuji, dan Anda menggunakannya dengan risiko Anda sendiri :).
URL unduhan dapat 'dipoles' menggunakan penulisan ulang. Seperti yang dinyatakan dalam komentar Anda dapat menambahkan kosong
index.php
di dalam setiap anak folder yang dilindungi untuk mencegah penjelajahan - tetapi ini harus dicegah dengan.htaccess
aturan.Metode yang lebih aman adalah menyimpan file publik di luar direktori publik. Atau pada layanan eksternal seperti Amazon S3. Untuk yang terakhir Anda harus membuat url yang valid untuk mengambil file dari Amazon (menggunakan kunci pribadi Anda). Kedua hal ini membutuhkan tingkat kepercayaan tertentu pada Host / layanan pihak ketiga Anda.
Saya akan khawatir menggunakan plug-in yang menyarankan mereka menawarkan 'unduhan yang dilindungi'. Saya belum menemukan yang memberikan keamanan yang cukup baik. Tolong jangan peringatan dari solusi ini juga - dan saya akan menyambut setiap saran atau kritik.
sumber
Mungkin, Anda mungkin sudah tahu trik ini, Kode ini akan memeriksa nama pengguna yang masuk saat ini dan jika cocok akan menampilkan tautan unduhan ke file itu, kalau tidak, ia tidak akan menampilkan apa pun.
ini kodenya:
Namun, ini bukan pendekatan yang baik, karena file disimpan di server, siapa pun yang memiliki tautan dapat mengunduh file itu.
sumber
Saya kira informasi ini bersifat rahasia dan karena itu selain menyembunyikan tautan ke file Anda ingin membuatnya benar-benar tidak dapat diakses sepenuhnya oleh siapa pun di web, bahkan jika mereka menebak URL, kecuali jika pengguna tersebut memiliki izin eksplisit untuk mengunduh file.
Lihatlah ke penyimpanan file di Amazon S3 dengan aman dan kemudian berikan URL yang sudah ditandatangani sebelumnya (terbatas waktu) untuk file asalkan pemeriksaan keamanan yang benar telah dipenuhi (yaitu, pengguna telah masuk ke situs Anda dan seperti yang mereka katakan).
Ada AWS SDK yang sangat bagus yang membuatnya sangat mudah untuk melakukan ini.
Yang perlu Anda teliti adalah bagaimana mengirim file yang diunggah melalui antarmuka unggah WP ke S3 sebagai gantinya, sebagai alternatif buat pengunggah Anda sendiri .
Pilihan lain adalah melihat kode WP e-commerce . Mereka menawarkan pengunduhan aman file perangkat lunak (misalnya MP3). Saya percaya file dikonversi menjadi hash dengan kunci enkripsi yang dihasilkan per pengguna saat pembelian. Ini akan membutuhkan beberapa penguraian untuk melihat cara kerjanya, tetapi prosesnya tidak akan unik untuk plugin ini sehingga contoh lain akan tersedia (di suatu tempat).
sumber
Saya pikir enkripsi file adalah cara untuk pergi seperti jawaban di atas. Ada plugin di Wordpress.org yang memungkinkan Anda melindungi unduhan. http://wordpress.org/extend/plugins/download-protect/ Anda dapat menggunakan layanan Amazon atau google drive juga. Ada banyak layanan yang menawarkan unduhan yang dilindungi seperti drop box juga.
sumber