Kami sedang mengerjakan aplikasi web, tempat (di antara fitur lainnya) pengguna kami dapat mengunggah file mereka. Namun kami tidak dapat menyimpan file-file ini di VPS kami karena ruang penyimpanan terbatas, jadi kami memutuskan untuk menggunakan S3.
Masalah utama adalah kita harus memastikan pengguna hanya dapat mengakses data mereka sendiri. Jadi kami menyimpan daftar file dalam database kami, dan daftar pengguna yang memiliki akses ke sana. Server kami dapat dengan mudah memutuskan apakah pengguna memiliki, atau tidak, akses ke file. Tetapi bagaimana sebenarnya melayani file untuk pengguna?
Ada beberapa kemungkinan yang telah saya pertimbangkan, namun tidak satu pun dari mereka yang tampaknya menjadi yang terbaik.
1. Menghasilkan (kedaluwarsa) url yang ditandatangani dengan PHP
Ini adalah pendekatan yang sangat sederhana, juga cepat tetapi menghasilkan url yang sangat jelek dan panjang.
2. URL yang dikaburkan
Ini berarti, bahwa kita menyimpan file publik untuk membaca pada S3, tapi semua file yang disimpan dalam hard menebak bernama folder seperti: 24fa0b8ef0ebb6e99c64be8092d3ede20000
. Namun, mungkin ini bukan cara yang paling aman untuk dilakukan. Bahkan jika Anda tidak pernah dapat menebak nama folder, setelah Anda mengetahuinya (karena Anda benar-benar memiliki akses ke sana), Anda dapat membagikan tautan itu kepada siapa saja (dengan orang yang tidak berwenang).
3. Unduh file melalui server kami
Ini berarti bahwa file-file tersebut tidak dilayani secara langsung oleh S3, tetapi server kami terlebih dahulu membacanya dengan aman dan menyajikannya. Kami benar-benar tidak menginginkan ini :)
4. Memeriksa pengarah
The Redup URL solusi dapat ditingkatkan dengan "memastikan" permintaan berasal dari server kami (Anda dapat mengatur S3 untuk memeriksa pengarah). Namun ini akan menjadi solusi yang sangat tidak bisa diandalkan, karena tidak semua browser mengirim data pengarah, dan itu juga bisa dipalsukan.
Apa cara yang baik untuk melayani file dari Amazon S3 dengan aman untuk klien yang berbeda?