Bagaimana saya bisa mencegah pengguna mengedit kode saya di browser mereka?

11

Deskripsi

Saya merancang aplikasi Node.JS (lebih seperti situs web lengkap). Aplikasi ini akan mengirim lima file JavaScript dan akan memiliki <script>tag yang menghubungkan mereka bersama.

Pertanyaan

Bagaimana saya bisa mencegah pengguna dan penyerang mengintip dan mengedit kode saya ?

  • Contohnya adalah:

    • Ctrl+ Shift+I

    • Di Devtools , Sumber goto , pilih file untuk diedit (yaitu index.html) dan menulis suntingan

    • Menekan Ctrl+ Sakan menyebabkan pengeditan langsung terjadi

Saya ingin mencegah Contoh di atas terjadi ... Apakah mungkin?


Inilah yang saya pikirkan:

Saya akan membuat file JavaScript sisi klien lain, prevent_keys.js

Ini akan mendengarkan Ctrl+ Shift+ I.

Jika kembali true(yaitu tombol ditekan), itu akan logtombol.

Namun itu tidak akan menghentikan pengguna untuk menggunakan Devtools secara langsung.

Edwin Pratt
sumber
16
Anda tidak dapat mencegah siapa pun melihat atau memodifikasi javascript Anda yang berjalan di browser. Tidak bisa
jfriend00
7
Hanya karena jawaban atas pertanyaan adalah "Anda tidak bisa.", Tidak berarti itu harus diturunkan.
RubberDuck
1
Pertanyaan yang sangat terkait: validasi hanya JavaScript pada formulir AJAX yang dikirimkan . Terutama periksa jawaban yang diterima dengan contoh sepele tentang cara mengirim panggilan POST yang, ke server Anda, terlihat sama dengan yang datang dari klien Anda, meskipun bahkan tidak berasal dari browser web.
8bittree

Jawaban:

35

Anda benar-benar tidak dapat mencegah pengguna mengakses dan memodifikasi konten yang Anda kirimkan kepada mereka. Anda tidak memiliki kontrol atas browser, atau browser yang mereka gunakan, atau apakah mereka sebenarnya mengunduh kode sumber Anda melalui browser. Anda mengeksekusi kode Anda di perangkat orang lain. Anda tidak boleh dan tidak bisa berasumsi tentang integritas perangkat ini.

Jika Anda memiliki kode yang tidak ingin Anda tampilkan, jangan kirimkan ke browser. Sebagai gantinya, biarkan browser mengirim permintaan ke server tempat Anda mengeksekusi kode rahasia.

Sebagai contoh nyata, jangan periksa kata sandi pada klien. Klien dapat dimodifikasi untuk selalu memberi tahu server "kata sandi itu benar". Sebaliknya, otentikasi harus terjadi di server tepercaya Anda.

amon
sumber
4
"Klien dapat dimodifikasi untuk selalu memberi tahu server" kata sandi itu benar "." cough libssh cough
Philip Kendall
Terima kasih banyak! Saya mengirim penangan untuk masuk, keluar dan mendaftar. Saya telah mengubahnya ke rute di server.
Edwin Pratt
23

Kamu tidak bisa Salah satu aturan dasar komputasi: Anda tidak bisa mempercayai klien . Apa pun skema cerdas yang Anda pikirkan, saya bisa mengatasinya jika saya mengendalikan klien.

Philip Kendall
sumber
2
Saya telah memindahkan semua penangan validasi, unggah, unduh, userAccouts () ke server termasuk.
Edwin Pratt
1
"Anda tidak bisa mempercayai klien" hanyalah satu sisi dari koin. Sisi lain mengatakan: "Anda bukan pemilik klien". Peramban yang menjalankan javascript Anda bukan milik Anda, OS yang menjalankan peramban itu bukan milik Anda, dan perangkat keras yang dijalankan peramban bukan milik Anda. Apa pun yang dilakukan pemilik barang ini dengan data yang Anda kirim kepada mereka bukan urusan Anda . Ini adalah rasa hormat bagi klien Anda untuk tidak mencoba merebut barang-barang mereka.
cmaster - mengembalikan monica
2

Mengapa Anda tidak ingin kode tersebut dimodifikasi?

Keamanan? Kepercayaan? Rahasia Dagang?

Maka jangan mengirim kode, minta klien untuk mengirim permintaan, dan mengembalikan hasilnya. Mungkin bukan hasil pribadi atau istimewa, hanya selesai sudah cukup untuk banyak UI.

Karena versi kode Anda sendiri yang sedikit dimodifikasi menyakiti garis bawah Anda?

Gunakan kode yang mengaburkan, beri nama mangler, dan segmen kode sepele.

Teknik-teknik ini meningkatkan standar keterampilan aktual, dan alat yang diperlukan untuk membuat sedikit variasi dari situs web Anda. Perlu diketahui bahwa teknik ini dapat membuat kode Anda lebih lambat, dapat memperkenalkan bug dan pesan kesalahan yang menarik dan tidak berarti, namun masih dapat diatasi oleh seseorang dengan alat dan / atau keterampilan yang tepat. Jadi pertimbangkan apakah itu sepadan. Pada akhirnya, siapa pun bisa benar-benar menulis kode yang sama.

Kain0_0
sumber