Saya sedang mengerjakan skenario di mana beberapa file JavaScript akan di-host di CDN. Saya ingin memiliki beberapa mekanisme sehingga ketika file ini diunduh di sisi pengguna, saya dapat memastikan bahwa file tersebut tidak dirusak dan memang berasal dari CDN yang ditentukan.
Saya memahami bahwa tugasnya sangat mudah jika saya menggunakan SSL, tetapi tetap saja, saya ingin memastikan bahwa file yang benar disajikan bahkan di HTTP tanpa SSL.
Sejauh yang saya bisa cari, tidak ada mekanisme seperti tanda tangan digital untuk file JavaScript yang didukung lintas platform. Mungkin itu tidak dibutuhkan?
Apakah ada beberapa metode bawaan browser untuk memverifikasi penulis file JavaScript? Apakah ada yang dapat saya lakukan untuk melakukan ini dengan cara yang aman?
sumber
Jawaban:
Faktanya, fitur seperti ini saat ini sedang disusun dengan nama Subresource Integrity . Perhatikan
integrity
atribut<script>
tag. Meskipun belum sepenuhnya diadopsi secara keseluruhan , itu hanya memenuhi tujuan ini.Sumber
Sumber
Contoh:
<script src="https://example.com/example-framework.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous"></script>
Namun perlu diperhatikan bahwa ini tidak akan melindungi Anda dari serangan Man in the Middle jika Anda mentransfer sumber daya melalui HTTP biasa. Dalam kasus ini, kode hash dapat dipalsukan oleh penyerang, membuat pertahanan terhadap file skrip yang dimanipulasi menjadi tidak berguna.
Karena alasan ini, Anda harus selalu menggunakan koneksi HTTPS yang aman, bukan HTTP biasa, selain langkah-langkah keamanan yang dijelaskan di atas.
sumber
https://code.jquery.com/
siapa pun yang menyusupcode.jquery.com
dapat menggunakan XSS situs Anda, terlepas dari apakahcode.jquery.com
sedang diakses melalui HTTPS atau tidak . Dengan pemeriksaan ini, penyerang hanya dapat mencegah skrip dimuat, bukan menggantinya dengan yang berbahaya.Kamu sedang mencari pemeriksaan integritas sub sumber .
Misalnya, inilah cuplikan CDN jQuery:
<script src="https://code.jquery.com/jquery-3.1.0.js" integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk=" crossorigin="anonymous"></script>
sumber
code.jquery.com
. Ini dapat melindungi Anda dari gangguancode.jquery.com
.Penafian: Seperti biasa, Anda hanya boleh mempertimbangkan mekanisme ini untuk digunakan saat menggunakan https, karena dapat dengan mudah dinonaktifkan melalui MitM dengan http
Selain mekanisme dalam jawaban di atas, Anda juga dapat menggunakan header tanggapan http kebijakan keamanan konten di halaman induk.
http://www.html5rocks.com/en/tutorials/security/content-security-policy/
Mekanisme ini telah ada cukup lama, jadi dukungan browser sepertinya cukup bagus, pastikan untuk memeriksanya.
Selain itu, jika Anda ingin memastikan bahwa browser lama yang tidak sesuai tidak aman, Anda dapat menyertakan skrip pengalihan sinkron di bagian atas halaman yang tidak diizinkan oleh kebijakan.
sumber
Ada poin penting tentang apa yang bisa dan tidak bisa dilakukan penandatanganan semacam ini. Ini dapat melindungi pengguna dari serangan hipotetis di mana seseorang memodifikasi kode Anda. Itu tidak dapat menjamin situs Anda bahwa kode Anda adalah kode yang sedang dijalankan. Dengan kata lain, Anda masih tidak bisa mempercayai apa pun yang datang ke situs Anda dari klien.
sumber
Jika model musuh Anda mengizinkan penyerang untuk mengubah file JavaScript saat mereka dikirim dari CDN, maka model musuh Anda mengizinkan penyerang untuk mengubah sumber rujukan saat ia dikirimkan untuk menghapus setiap upaya verifikasi, untuk mengubah alamat sumber ke selain CDN, dan / atau untuk menghapus referensi ke JavaScript seluruhnya.
Dan jangan buka can of worm tentang bagaimana aplikasi Anda dapat menentukan apakah resolver pengguna menyelesaikan atau tidak dengan benar ke CDN melalui permintaan HTTP (atau mekanisme lain yang tidak memiliki rantai kepercayaan terverifikasi).
/ etc / hosts:
# ... 1.2.3.4 vile-pirates.org trustworthy.cdn # ...
sumber
Anda dapat memastikannya dengan Subresource Integrity. Banyak CDN publik menyertakan hash SRI dalam kode sematan yang ditawarkan di situs web CDN. Misalnya, di PageCDN, saat Anda mengklik file jquery di halaman CDN jQuery , Anda mendapatkan opsi untuk menyalin URL atau menggunakan tag skrip yang berisi hash SRI seperti di bawah ini:
<script src="https://pagecdn.io/lib/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
Pada pemuatan halaman, browser akan mengeluarkan permintaan untuk sumber daya ini dan pada penyelesaian permintaan itu akan mencocokkan hash dari file yang diterima dengan yang diberikan sebagai nilai integritas dalam tag skrip. Jika kedua hash tidak cocok, browser akan membuang file jquery tersebut.
Saat ini, fitur ini didukung oleh 91% browser di seluruh dunia. Detail lebih lanjut tentang caniuse .
sumber