Kursus MIT "Keamanan Sistem Komputer". Kuliah 11: Bahasa Pemrograman Web / Web, Bagian 2

Institut Teknologi Massachusetts. Kursus Kuliah # 6.858. "Keamanan sistem komputer." Nikolai Zeldovich, James Mickens. Tahun 2014


Keamanan Sistem Komputer adalah kursus tentang pengembangan dan implementasi sistem komputer yang aman. Ceramah mencakup model ancaman, serangan yang membahayakan keamanan, dan teknik keamanan berdasarkan pada karya ilmiah terbaru. Topik meliputi keamanan sistem operasi (OS), fitur, manajemen aliran informasi, keamanan bahasa, protokol jaringan, keamanan perangkat keras, dan keamanan aplikasi web.

Kuliah 1: “Pendahuluan: model ancaman” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 2: "Kontrol serangan hacker" Bagian 1 / Bagian 2 / Bagian 3
Kuliah 3: “Buffer Overflows: Exploits and Protection” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 4: “Pemisahan Hak Istimewa” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 5: "Dari mana sistem keamanan berasal?" Bagian 1 / Bagian 2
Kuliah 6: “Peluang” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 7: “Kotak Pasir Klien Asli” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 8: “Model Keamanan Jaringan” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 9: "Keamanan Aplikasi Web" Bagian 1 / Bagian 2 / Bagian 3
Kuliah 10: “Eksekusi simbolik” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 11: “Bahasa Pemrograman Web / Web” Bagian 1 / Bagian 2 / Bagian 3

Beberapa saat kemudian saya akan memberi tahu Anda tentang permintaan lintas situs palsu. Saya pikir catatan kuliah menjelaskan mengapa skrip lintas situs tidak berfungsi dalam kasus kami. Alasannya adalah bahwa setiap kali Anda membuat "sepotong" sintaks, objek ini, pohon, dan berbagai bagian dari pohon ini bukan hanya string.



Anda tidak dapat secara tidak sengaja mengubah string pengguna menjadi struktur pohon, ini tidak terjadi secara otomatis, karena sulit untuk menulis penerjemah seperti itu. Tetapi Anda dapat mencoba menulis penerjemah untuk Ur / Web. Segera saya akan memberikan contoh yang akan membantu mengurangi kekhawatiran Anda tentang ini. Saya ingin menunjukkan kepada Anda apa sebenarnya sintaks ini berubah dalam kompiler.

Tampaknya kita bisa menambahkan tanda kutip ganda di sekitar HTML sehingga kita dapat kembali ke dunia normal. Orang mungkin bertanya-tanya mengapa begitu penting untuk melewatkan tanda kutip ganda, menempatkan XML sebagai gantinya?

Anda dapat mengambil kata saya untuk itu bahwa ini adalah kode yang setara dengan apa yang dilakukannya. Berikut ini adalah tag fungsi sebaris yang membuat simpul pohon dari dokumen HTML. Selanjutnya, saya menempatkan argumen yang mengekspresikan gaya CSS di node ini. Tidak ada yang benar-benar terjadi di sini, jadi ada banyak cara untuk mengatakan "Tidak ada," itu tidak memerlukan atribut apa pun.

Selanjutnya saya meletakkan tag tubuh, ini adalah hal lain dari perpustakaan standar. Semua tag standar adalah fungsi kelas satu di perpustakaan.



Selanjutnya, kita perlu meletakkan teks "Hello World" di badan, jadi kita memanggil fungsi cdata, di mana cdata adalah kata XML untuk data karakter atau hanya string konstan, dan kita dapat menempatkan teks di sini. Ini akan memberi kita hasil yang sama seperti sebelumnya. Mari kita lihat apakah ini berhasil.

Sekarang saya akan kembali ke halaman. Kita melihat hal yang sama seperti sebelumnya, jadi ini sama dengan fungsinya di awal.



Ini bukan hanya membangun garis. Ini menyebabkan serangkaian operasi yang dirancang sehingga hanya mereka yang memungkinkan Anda untuk membuat HTML yang valid, dan mereka tidak akan pernah dapat secara implisit menafsirkan baris sebagai kode alih-alih hanya menempatkan konten pada halaman yang seharusnya ada.



Sekarang saya akan mencoba melakukan sesuatu yang tidak terlalu rumit, yang berpotensi menjadi masalah. Mari kita putuskan bahwa kita benar-benar senang melihat dunia, jadi kita sorot kata "halo" dengan berani dan kompilasi lagi.



Anda melihat apa yang terjadi pada halaman - kata tidak menjadi tebal karena kompiler menunjukkan bagaimana teks ditafsirkan alih-alih markup. Ini adalah representasi sintaks HTML sebagai fungsi yang membangun sintaksis tanpa konvensi pengkodean yang biasa dibangun di dalamnya. Fungsi ini menafsirkan segala cara Anda ingin menulis, tanpa memikirkan apa pun dari diri Anda sendiri.

Dengan demikian, implementasi cdata melakukan apa yang biasa disebut melarikan diri, atau "melarikan diri." Tetapi programmer tidak perlu tahu bahwa ada yang namanya melarikan diri. Anda bisa menganggapnya sebagai satu set fungsi yang nyaman untuk membuat pohon objek yang menggambarkan halaman.

Saya dengar Anda ingin melihat HTML yang dihasilkan di sini. Oke, itu tidak akan menjadi hal yang paling menarik. Saya akan mencoba memperbesarnya di layar, tetapi kemudian tidak pas di satu baris.



Siswa: Mengingat Anda menggunakan XHTML, dapatkah Anda hanya menggunakan jalur untuk data karakter cdata daripada melakukannya secara manual?

Profesor: Saya kira, tetapi itu akan membutuhkan lebih banyak XML dari saya daripada yang saya miliki. Ada pertanyaan bagus lainnya tentang URL JavaScript. Jika kami mengizinkan URL JavaScript, kami membuat pintu belakang untuk secara otomatis mengartikan string sebagai program saat dijalankan. Dan itu menyebabkan semua jenis masalah.

Mari kita coba menghindarinya. Saya akan beralih kembali, pertama-tama, ke versi singkat, dan membuat beberapa baris di dalam tubuh. Dan mari kita letakkan tautan yang akan mencoba melakukan sesuatu yang sesuai. Di sini kita meninggalkan ruang untuk pesan kesalahan.



Selanjutnya, jalankan kompiler dan lihat cara kerjanya.



URL tidak valid, lalu entri JavaScript dan frasa “lulus untuk memberkati”, atau “lulus berkat”. Bless dibangun ke dalam fungsi, yaitu gatekeeper yang menyelesaikan URL. Secara default, URL tidak diizinkan, jadi tentu saja opsi ini tidak diizinkan. Secara umum, adalah ide yang buruk untuk menulis kebijakan URL Anda sendiri sehingga Anda dapat membuat nilai yang mewakili URL JavaScript. Karena semua jenis jaminan akan diperlukan, karena fakta bahwa alamat ini mungkin tidak valid.

Untuk membuatnya sedikit lebih jelas bagaimana ini bekerja, izinkan saya menguraikan kode ini menjadi fungsi terpisah yang memanggil tautan yang menerima URL. Jadi, URL adalah tipe, bukan string. Ini adalah jenis yang menunjukkan URL, yang secara eksplisit diizinkan oleh kebijakan aplikasi Anda.

Saya menggunakan kurung kurawal, seperti dalam beberapa kerangka templat HTML populer, untuk menunjukkan penyisipan beberapa kode dari bahasa host di dalam HTML yang kami buat. Dan semua ini dilakukan sedemikian rupa sehingga jenisnya diperiksa secara statis. Jadi sistem akan memeriksa: "Ya, ini adalah tempat URL itu berada, dan dikatakan bahwa itu benar-benar URL, jadi semuanya baik-baik saja."



Dan kemudian saya dapat secara eksplisit mengatur panggilan berkat dengan mengatakan: "mari panggil saja fungsi tautan di sini berdasarkan hasil" berkat "dari URL ini." Setelah itu, kita harus mendapatkan pesan kesalahan yang sama seperti sebelumnya.



Sayangnya, saya tidak dapat menjalankan ini untuk Anda dan menunggu sampai gagal, tetapi saya dapat mengatakan bahwa itu pasti akan gagal, karena saya sengaja membuat kesalahan kompilator. URL ini tidak akan diterima oleh kebijakan URL.

Jika saya melewatkan panggilan berkat ini, itu akan menjadi kesalahan yang lebih serius pada waktu kompilasi, karena Anda memiliki string dan URL yang benar, dan mereka dari jenis yang berbeda.



Mari membuatnya lebih menarik. Saya akan membuka file konfigurasi untuk demo ini. Cukup singkat, setidaknya jika Anda melihat kerangka kerja aplikasi web Java. Mereka memiliki file XML raksasa ini untuk konfigurasi, jadi semuanya jauh lebih baik bersama kami.



Kami dapat menambahkan aturan yang menyatakan bahwa segala sesuatu di Wikipedia diperbolehkan, dan kemudian masukkan URL Wikipedia di badan.



Sekarang buka halaman dan klik Silakan Klik.



Inilah yang kami dapatkan: Alamat Wikipedia tidak ditemukan.



Jadi, ide utamanya adalah untuk memiliki jenis abstrak URL, seperti Anda bisa memiliki jenis abstrak tabel hash yang mengkodekan variasi dari apa yang tampak seperti tabel hash dan mencegah kode masuk ke array tabel hash. Kita dapat melakukan hal yang sama untuk URL. Dengan menggunakan fungsi berkah ini, sistem memastikan bahwa setiap nilai jenis ini melewati pemeriksaan yang tepat di beberapa titik.

Misalnya, dengan kebijakan ini, kami tahu bahwa kami tidak akan pernah memiliki URL JavaScript, sehingga Anda dapat mengambil nilai URL dengan aman dan menggunakannya sebagai tautan. Ini tidak akan merusak abstraksi dasar bahasa.

Siswa: apakah mungkin menggunakan JavaScript "murni" dengan memasukkannya ke dalam string tubuh?

Profesor: ya dan tidak. Alih-alih JavaScript, Anda menyematkan kode Ur / Web yang melakukan beberapa jenis tugas. Sekarang saya akan mengetik perintah:

return <xml><body onload = {alertLOADED”}> 

Dan Anda akan melihat apa yang terjadi - penerjemah meletakkan jendela di layar dengan tulisan “Loaded” - “Loaded”.



Mencoba menafsirkan kode JavaScript dalam bentuk string sebagai sebuah program akan menjadi bencana. Anda lihat, kita bisa meletakkan kode dalam bahasa pemrograman yang sama dengan yang Anda kerjakan, sudah dibatasi oleh kurung kurawal ini. Dan kemudian secara otomatis dikompilasi dalam JavaScript untuk dijalankan di sisi klien.

Saya perhatikan bahwa versi browser yang lebih baru dapat menghindari kesalahan interpretasi karakter, tetapi beberapa browser yang lebih lama mampu membingungkan sesuatu. Bagaimanapun, semua elemen karakter akan ditafsirkan sebagai UTF-8 jika mereka memasukkan dokumen. Jika ada masalah dengan pengkodean yang berbeda, maka pengkodean ini tidak boleh diterapkan di sini.

Siswa: Kompilator memeriksa untuk melihat apakah string berisi URL yang valid. Tetapi jika Anda menghitung string saat runtime, apakah memberkati memeriksa saat runtime apakah string yang diberikan valid atau tidak?

Profesor: mari kita buat formulir untuk menguji pernyataan ini, dan letakkan di sini. Kami memasukkan URL kami di kotak teks URL, dan kemudian memasukkan tombol kirim.



Ketika Anda mengkliknya, fungsi tautan akan dipanggil dengan menuliskan satu nilai untuk setiap bidang dalam formulir. Dalam hal ini, hanya ada satu bidang yang disebut "URL", sehingga tautan akan memproses entri yang berisi URL sebagai tipe string. Dan kemudian kita mencoba menerapkan fungsi berkah padanya dan melihat apakah itu berhasil.



Anda melihat contoh pesan kesalahan saat mengetik jenis URL yang salah, salah satu hal yang tidak masuk akal jika Anda tidak terbiasa dengan Haskell. Saya lupa memasukkan fungsi kembali ke sini. Setidaknya sekarang lebih seperti program Java. Dan saya juga lupa mengatakan bahwa sekarang ini adalah halaman penuh. Karenanya, kami tidak dapat menggunakan tag sampai kami berada di dalam tag body.



Sekarang jalankan compiler, pergi ke halaman kami, klik pada tombol Please Click, masukkan beberapa alamat muskil yang tidak ada.



Kemudian kita klik Kirim Permintaan - “Kirim kueri” dan dapatkan pesan kesalahan - alamat jenis ini tidak terselesaikan.



Jika kita memasukkan URL yang benar seperti yang ditunjukkan pada layar berikutnya, dan kemudian klik Kirim Permintaan, tidak ada pesan kesalahan akan muncul.



Saya pikir jawaban atas pertanyaan Anda panjang dan tidak terlalu menarik.

Siswa: apakah ada ketentuan yang lebih ketat untuk URL selain larangan menggunakan JavaScript?
Profesor: Saat ini, pembatasan yang lebih ketat hanyalah konstanta dan awalan. Tetapi Anda juga bisa membuat aturan larangan Anda sendiri, dan aturan itu akan berfungsi sesuai urutan Anda menulisnya.

Siswa: ternyata jika Anda mematuhi larangan JavaScript, tetapi memberi garis di tengah kata "JavaScript", kompiler dapat menafsirkan ini ...

Profesor: ya, itu terlalu buruk. Itulah mengapa lebih baik tetap menggunakan pendekatan daftar putih daripada menggunakan pendekatan daftar hitam. Anda mungkin ingin semua aturan dimulai dengan protokol tertentu, seperti HTTP, dan hanya mengizinkan yang sesuai dengan paket protokol yang disetujui. Saya sarankan melakukan hal itu.

Siswa: untuk banyak situs, Anda dapat mengizinkan pengguna untuk bertukar tautan, dalam hal ini Anda perlu mengizinkan tautan di mana saja.

Profesor: Anda dapat mengizinkan tautan jika Anda ingin pengguna membagikan tautan JavaScript atau, saya tidak tahu, tautan flash, atau apa pun yang diizinkan di sana. Anda lihat, Anda dapat membuat "daftar putih" dari semua HTTP, HTTPS, URL dan dengan demikian memastikan operasi yang aman dari sebagian besar situs. Pendekatan ini hanya sedikit lebih lemah daripada hanya mengizinkan URL tertentu. Tetapi setidaknya Anda dapat sepenuhnya menghilangkan kemungkinan eksekusi otomatis string sebagai sebuah program.

Biarkan saya memberi Anda satu contoh abstrak, yang merupakan contoh sistem ruang obrolan sederhana yang disajikan dalam database. Pengguna dapat mengklik tautan untuk pergi ke kamar dan kemudian mengirim pesan. Ini adalah yang pertama dari beberapa opsi untuk skema.



Pertama, saya akan perhatikan bahwa saya akan mengkompilasi ulang ini. Dan kemudian secara ajaib, semua tabel database yang dideklarasikan akan ditambahkan ke database, dan kita dapat mulai menggunakan aplikasi. Tapi pertama-tama kita perlu menambahkan beberapa ruang obrolan. Jadi, mari kita buka antarmuka kita ke database demo dan masukkan nilai "satu" dan "dua" di ruang tabel.



Sekarang mereka muncul di sini.



Sekarang kita masuk ke ruang obrolan pertama dan dapat menghibur diri sepanjang hari dengan mengirim baris teks, misalnya, baris pertama. Akan lebih menarik untuk mencoba mengirim HTML, dan segera diproses. Ini adalah contoh fungsionalitas utama program.



Sekali lagi, mari kita cepat-cepat membahas cara kerjanya, jadi kami memiliki dua tabel SQL ini - pesan tabel dan pesan tabel, yang hanya dideklarasikan di kelas pertama ini dalam bahasa pemrograman. Dan kami memberikan diagram dari setiap tabel. Dan kemudian, ketika kami mencoba mengakses tabel ini, kompiler memastikan bahwa mereka diakses sesuai dengan skema pengetikan yang menjanjikan.



Jadi, kami memiliki tabel kamar, di mana setiap kamar adalah catatan yang terdiri dari ID pengidentifikasi, yang merupakan bilangan bulat, dan Judul, yang merupakan string. Ini adalah jenis tampilan di mana kami hanya membuat catatan. Saya baru saja membuat beberapa kamar di konsol SQL. Kami juga memiliki pemberitahuan bahwa setiap pesan adalah milik ruangan tertentu, waktu pembuatannya, dan teks yang merupakan isi pesan tersebut.
Sekarang izinkan saya dengan cepat melompat ke fungsi utama.



Kami menjalankan kueri SQL - Anda melihat contoh sintaks SQL yang dibangun di Ur / Web. Saya tidak ingin masuk ke panggilan fungsi melalui ekstensi ini dari perpustakaan standar. Ini akan menjadi agak bertele-tele, itu cukup untuk mengingat kata-kata saya tentang fakta bahwa perpustakaan standar memiliki metode untuk memanggil fungsi yang merupakan cara yang valid untuk membangun kueri SQL.

Dan fungsi-fungsi ini memiliki tipe yang membuatnya mencetak permintaan untuk Anda, dan tidak hanya menjamin bahwa sintaksnya valid. Kode ini hanya mengulangi semua baris yang keluar dari permintaan ini dan menghasilkan bagian-bagian dari kode HTML untuk masing-masing.

Secara khusus, kami akan menempatkan hasil kueri pada bidang Judul dan mengonversinya menjadi HTML dengan notasi yang menyertakan kurung kurawal. Tanda kurung tambahan juga menunjukkan bahwa ini bukan HTML yang asli, tapi tolong ubah untuk saya dengan cara standar. Jadi kita bisa lakukan dengan string dan integer dan semua data tipe lain.

Siswa: jika mengandung HTML jahat atau sesuatu yang lain, apakah akan disaring?

Profesor: ya, tentu saja. Di Ur / Web, Anda bisa menganggapnya sebagai membangun pohon. Ini adalah simpul yang merupakan singkatan dari beberapa teks. Jelas, teks tidak bisa berbuat apa-apa.

Siswa: jadi jika tajuk ini berada di bawah kendali pengguna dan seseorang mengobrol dengan tajuk Lansiran, bukankah itu JavaScript?

Profesor: itu tidak akan secara otomatis diartikan sebagai JavaScript, HTML, atau yang lainnya. Ini akan dianggap oleh program sebagai teks biasa.

Jadi, kembali ke gambar layar kita. Kami memiliki Judul ini, mari kita membingkainya dengan tag. Dan alih-alih href, cara biasa untuk menautkan dalam HTML, kami menggunakan atribut tautan, yang merupakan semacam pseudo-atribut Ur / Web, yang mengambil argumen bukan URL, tetapi kebanyakan ekspresi Ur / Web. Intinya adalah ketika Anda mengklik tautan ini, ungkapan ini diluncurkan untuk membuat halaman baru yang harus ditampilkan.
Dalam hal ini, kami melakukan panggilan ke fungsi obrolan, yang ditentukan di sini di layar berikutnya, inilah fungsinya.



Saya tidak akan merinci. Tetapi kami memiliki beberapa pertanyaan SQL menggunakan berbagai fungsi pustaka standar untuk berbagai cara untuk menggunakan hasil yang diminta.

Kami menghasilkan halaman HTML ini dan mengatakan bahwa Anda sedang mengobrol dengan judul judul seperti itu, kami memiliki formulir formulir di mana pengguna dapat memasukkan teks. Ini adalah bentuk yang saya gunakan untuk menunjukkan bagaimana program bekerja beberapa menit yang lalu. Tombol kirim formulir memiliki Tambahkan atribut ini yang mengandung katakanlah, yang merupakan nama fungsi Ur / Web. Karena itu, ketika kami mengirimkan formulir, kami memanggil fungsi ini.

Menjalankan lebih banyak SQL menyisipkan baris baru ke dalam tabel. Kami secara otomatis melompat dari ID ruang obrolan ke bidang teks yang datang ke sini dari formulir, dan mereka secara otomatis disembunyikan sesuai kebutuhan. Namun sekali lagi, di Ur / Web, Anda tidak perlu memikirkan "melarikan diri" dari fungsi dengan cara ini. Karena itu hanya sintaks untuk membangun pohon, bukan untuk string. Jadi, tidak mungkin hal-hal aneh dapat terjadi pada penguraian yang tidak Anda harapkan dari cara yang dipilih untuk menafsirkan sintaksis.

Jadi, fakta bahwa kita memiliki widget dalam bentuk ini dalam bentuk GUI grafis, dan ini adalah bidang teks, kompiler menyimpulkan bahwa catatan yang dihasilkan dari mengisi formulir kotak teks harus memiliki satu elemen yang disebut "teks" dari tipe string . Pengkodean formulir ini dan aturan untuk mengetiknya tidak dibangun ke dalam bahasa, tetapi diambil dari pustaka ekspres Ur, yang sebenarnya mengontrol formulir ini, menentukan jenis fungsi yang valid.
Jika Anda tidak memiliki pertanyaan lagi tentang bagian program ini, saya akan beralih ke langkah berikutnya. Saya akan menggunakan cara untuk memaksa enkapsulasi berbagai bagian aplikasi yang mendukung Ur / Web dan yang jarang mendukung bahasa lain. Saya akan mengambil kamar ini. Saya akan mengambil beberapa definisi dan meletakkannya dalam modul yang merangkum beberapa dari mereka sebagai pribadi. Secara khusus, tabel basis data akan bersifat pribadi, sehingga tidak ada yang dapat langsung mengaksesnya.

Anda dapat mengaksesnya hanya menggunakan sekumpulan metode yang kami sediakan. Salah satu metode berjalan di dalam transaksi dan membuat daftar catatan dengan bidang ID dan judul untuk ruang obrolan yang tersedia.

Selanjutnya, kami hanya perlu memperluas operasi obrolan ini. Dan satu-satunya yang saya lakukan di sini adalah memasukkan nama untuk ID konsep - ID tipe. Jadi saya tidak hanya mengatakan bahwa ID adalah bilangan bulat, saya mengatakan bahwa ini adalah tipe baru.



Satu-satunya cara dunia luar dapat menghubungi obrolan adalah untuk mendapatkan daftar semua kamar, dan satu-satunya cara dunia luar dapat menggunakannya adalah dengan memanggil fungsi obrolan di dalamnya. Katakanlah ini adalah beberapa jenis tabel hash abstrak di dalam kelas tabel hash, di mana rincian disimpan yang menjelaskan ID apa dan bagaimana mereka diproduksi secara internal, bersifat pribadi untuk modul ini, dan kode klien yang memanggil modul ini tidak boleh menggunakannya.

Sekarang saya akan mentransfer semua sintaks ini ke bawah dan meletakkannya di dalam modul, sehingga secara default tidak terkena sisa kode. Selanjutnya, saya menerapkan metode kamar ini. Kami sudah memiliki kesempatan untuk mengatur obrolan. Tetapi kita dapat mengimplementasikan kamar dengan cara yang lebih sederhana menggunakan fungsi pustaka standar lain untuk menginterpretasikan permintaan dalam formulir saat ini.
Mari kita pilih semuanya dari daftar kamar, diurutkan berdasarkan nama. Seperti biasa, kueri ini adalah tipe data yang divalidasi untuk kami. Dan sistem menentukan: "Oke, ungkapan ini akan menghasilkan daftar catatan yang cocok dengan jenis yang dinyatakan dalam tanda tangan modul ini." Jadi sekarang, di luar modul ini, tidak ada kode lain yang bisa menyebutkan tabel ruang atau tabel pesan.



Jadi, setidaknya dari sudut pandang aplikasi ini, kita dapat menerapkan invarian yang diperlukan dari itu. Kami bahkan dapat menyembunyikan rahasia di dalam modul sehingga tidak ada masalah keamanan jika ada bagian lain dari kode yang bisa mendapatkannya.

Siswa: dapatkah sepotong kode lainnya juga menerapkan metode ruangan ini?

Profesor: Itu akan menjadi meja yang sama sekali berbeda. Sebenarnya, kita bisa melakukan ini dengan memasukkan fragmen 4 baris ke modul lain.



Maka kita bisa melakukan apa pun yang kita inginkan dengan tabel ini. Saya akan mengkompilasinya, mungkin dalam 30 detik, dan kita akan lihat apa yang terjadi. Tetapi sebenarnya ini adalah tabel yang berbeda, seolah-olah Anda memiliki nama pribadi yang sama, tetapi untuk dua kelas Java yang berbeda.

Jadi, Anda menganggap bahwa di dalam modul ini ada tipe abstrak yang disebut ruang, yang berisi pengidentifikasi ID dan judul Judul. Ini tidak benar. Obrolan menerima parameter kamar sebagai input. Ketika kita memanggil fungsi obrolan, itu akan dipanggil melalui URL. ID dan Judul diberikan di luar representasi URL yang memanggil fungsi. Kami hanya membutuhkan ID untuk mengimplementasikan fungsi ini. Jadi ketika kita memanggil fungsinya, kita sebenarnya memanggil URL.
Akan sia-sia dalam hal penggunaan ruang dan akan terlihat kasar bagi pengguna jika header diteruskan sebagai argumen tambahan saat memunculkan obrolan melalui URL. Apakah itu masuk akal? Mari kita lihat bilah URL pada slide ini.



Pengenal saluran yang kami ikuti secara otomatis disambungkan ke URL di akhir baris. Dan jika kita mengirimkan catatan yang berisi ID dan Judul judul, judul itu juga akan diserialisasi, yang setidaknya sedikit tidak masuk akal.

54:10

Kursus MIT "Keamanan Sistem Komputer". Kuliah 11: Bahasa Pemrograman Web / Web, Bagian 3


Versi lengkap dari kursus ini tersedia di sini .

Terima kasih telah tinggal bersama kami. Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikannya kepada teman-teman Anda, diskon 30% untuk pengguna Habr pada analog unik dari server entry-level yang kami buat untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps dari $ 20 atau bagaimana membagi server? (opsi tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps hingga Desember secara gratis ketika membayar untuk jangka waktu enam bulan, Anda dapat memesan di sini .

Dell R730xd 2 kali lebih murah? Hanya kami yang memiliki 2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV dari $ 249 di Belanda dan Amerika Serikat! Baca tentang Cara Membangun Infrastruktur Bldg. kelas menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?

Source: https://habr.com/ru/post/id425999/


All Articles