Bahasa Melayu

HTML, chmod, bekas dan cron

Alasan di sebalik empat utiliti: mengapa editor HTML memerlukan senarai yang dibenarkan dan kotak pasir, mengapa huruf besar S dalam rentetan chmod penting, perintah docker run tidak boleh dinyatakan dalam karang, dan dua peraturan cron yang menangkap semua orang.

Editor HTML: senarai yang dibenarkan, bukan penapis

Editor menghasilkan HTML, dan HTML yang berasal dari kotak teks ialah vektor suntikan tertua yang ada. Dua soalan berbeza menjadi keliru di sini, jadi ia patut dipisahkan. Yang pertama ialah "bolehkah editor ini ditipu untuk mengeluarkan markup yang menjalankan kod dalam halaman yang memaparkannya?" Yang kedua ialah "adakah ini cara yang selamat untuk membersihkan HTML yang bermusuhan daripada sumber yang tidak dipercayai?" Alat ini menjawab ya kepada yang pertama dan tidak kepada yang kedua, dan ia berkata demikian pada panel dan bukannya membiarkan anda menganggap sebaliknya.

Mekanisme ini adalah senarai yang dibenarkan. Senarai elemen dibenarkan; setiap elemen lain dibuka, jadi teksnya kekal dan tegnya tidak. Senarai atribut dibenarkan setiap elemen; segala-galanya digugurkan, yang menjadikan setiap pengendali acara mustahil dan bukannya disekat semata-mata. Nama atribut ditulis dengan huruf kecil sebelum ujian itu, jadi oNeRrOr dan ONERROR adalah nama yang ditolak sama seperti onerror. Elemen yang kandungannya HTML anggap sebagai teks mentah — skrip, gaya, textarea, iframe, tajuk — dialih keluar bersama kandungannya, kerana membukanya akan menampal sumber skrip ke dalam dokumen sebagai penanda.

Alamat pautan mendapat semakan mereka sendiri. Nilai ini dinyahkodkan entiti dan dilucutkan ruang kosong dan aksara kawalan sebelum skemanya dibaca, kerana itulah yang dilakukan oleh pelayar apabila ia menavigasi: javascript:alert(1) dan jav ascript:alert(1) kedua-duanya sampai ke tempat yang sama. Sahaja alamat http, https, mailto, tel, ftp dan relatif kekal. Rujukan aksara yang tidak dapat diselesaikan oleh alat — : ialah klasik — menyebabkan keseluruhan alamat ditolak dan bukannya dilalui, kerana penapis yang kurang memahami input daripada pelayar ialah penapis dengan lubang di dalamnya.

Tiada butang imej dan img tiada dalam senarai yang dibenarkan. Teg imej yang dibenarkan ialah permintaan keluar dari mana-mana dokumen berakhir, dan permukaan yang salah. Bagi editor yang menghasilkan prosa, ia juga tidak bernilai.

Pertahanan yang tidak bergantung pada mana-mana yang sempurna ini ialah pratonton. Ia dipaparkan dalam iframe dengan atribut kotak pasir yang tidak memberikan apa-apa - tiada skrip, tiada borang, tiada akses asal yang sama. Jika muatan pernah terselamat daripada senarai yang dibenarkan, pelayar masih akan menolak untuk melaksanakannya di sana. Itu adalah jaminan struktur dan bukannya janji tentang kod kami.

Had yang jujur: ini adalah pembersih berasaskan rentetan, bukan penghurai HTML5 penuh. Pembezaan parser — input di mana pelayar membina pokok yang berbeza daripada tokenizer ini — adalah kelemahan yang diketahui bagi setiap sanitiser yang dibina dengan cara ini. Untuk output anda menjana diri anda dalam editor ini yang baik. Untuk membersihkan HTML yang datang daripada orang yang tidak dikenali, gunakan sanitiser yang dijalankan terhadap pengurai sebenar, pada pelayan yang anda kawal.

Chmod: huruf besar ialah keseluruhan mesej

Mod fail Unix ialah dua belas bit: tiga bit kebenaran untuk setiap pemilik, kumpulan dan lain-lain, ditambah setuid, setgid dan bit melekit. Bentuk oktal ialah bacaan langsung bit tersebut, itulah sebabnya 4 + 2 + 1 = 7 bermaksud baca, tulis dan laksana.

Bentuk simbolik yang ls cetak ialah tempat bit khas menjadi menarik, kerana ia tidak mendapat lajurnya sendiri. setuid menggantikan watak laksana pemilik, setgid menggantikan watak laksana kumpulan, dan sticky menggantikan watak laksana yang lain. Huruf tersebut adalah huruf kecil apabila bit pelaksanaan asas juga ditetapkan dan UPPER huruf besar apabila ia tidak.

Jadi 4755 ialah rwsr-xr-x — program setuid yang boleh dilaksanakan — manakala 4644 ialah rwSr--r--, fail setuid yang tiada siapa boleh jalankan. Modal S ialah sistem yang memberitahu anda bahawa bit adalah lengai, dan ia hampir selalu merupakan kesilapan dan bukannya pilihan. Perkara yang sama berlaku untuk 1644, yang menunjukkan rw-r--r-T: bit melekit pada fail biasa di mana bit lain-laksana adalah jelas, yang pada kernel moden tidak melakukan apa-apa dengan tepat.

Dua lagi perbezaan yang patut dipertahankan. Cetakan ls rentetan sembilan aksara bukanlah hujah yang diambil oleh chmod: chmod mahukan senarai tugasan seperti u=rwx,g=rx,o=rx,u+s. Dan bit yang sama bermaksud perkara yang berbeza pada direktori daripada pada fail — laksana bermaksud "boleh masuk dan melintasi", setgid bermaksud "fail baharu mewarisi kumpulan ini", dan bit melekit bermaksud "sesiapa sahaja boleh mencipta, sahaja pemilik boleh memadam", itulah sebabnya /tmp ialah 1777.

docker run kepada compose: penghuraian dan perkara yang tidak ditukar

Penukar membahagikan arahan dengan tokenizer sedar petikan yang ditulis untuk alat ini. Tiada apa-apa yang dilaksanakan, dinilai atau diserahkan kepada shell. Perintah yang mengandungi tanda belakang, $(...) atau koma bertitik dibaca sebagai aksara literal, kerana satu-satunya perkara yang dilakukan oleh alat ini dengan input anda ialah membacanya.

Kebanyakan bendera memetakan dengan bersih: port, volum, persekitaran, label, dasar mulakan semula, keupayaan, pemeriksaan kesihatan, had sumber, DNS dan hos tambahan semuanya mempunyai kunci karang dengan maksud yang sama. Jumlah yang dinamakan dan rangkaian yang ditakrifkan pengguna memerlukan pengisytiharan peringkat atas serta rujukan perkhidmatan, jadi output membawa satu — dengan luaran: benar pada rangkaian, kerana larian docker rangkaian boleh menyertai adalah satu yang telah wujud.

Sesetengah bendera tidak mempunyai komposisi yang setara, dan di sinilah penukar biasanya gagal secara senyap-senyap. --rm bukan harta perkhidmatan: perkhidmatan karang tidak dialih keluar apabila ia keluar. -d menerangkan cara anda menggunakan CLI, bukan perkhidmatan itu. --link adalah warisan, --mount memerlukan bentuk yang panjang alat ini tidak menulis, --gpus bergantung pada pemandu anda. Setiap satu daripada ini menghasilkan amaran bernama dan bukannya lenyap. Bendera yang tidak diketahui menghasilkan amaran juga, dan dianggap sebagai tidak mengambil nilai, kerana meneka bahawa ia mengambil masa akan mengubah nama imej anda menjadi hujah dan menghasilkan fail yang salah dengan yakin.

Output tidak membawa versi peringkat atas: kunci. Karang v2 mengabaikannya dan versi semasa memberi amaran tentangnya; ia telah usang sejak Spesifikasi Karang menggantikan versi format fail lama.

Memetik bukan kosmetik. Pemetaan port yang ditulis sebagai 8080:80 tanpa petikan dibaca sebagai nombor oleh YAML 1.1 parser, dan ya, tidak, hidup dan mati ialah boolean dalam dialek yang sama. Apa-apa yang boleh disalah baca dipetik; apa-apa yang dibaca dengan bersih sebagai rentetan dibiarkan sahaja, jadi fail itu kekal boleh dibaca.

Cron: dua peraturan yang menangkap semua orang

Yang pertama ialah peraturan hari. Apabila kedua-dua hari dalam bulan dan hari dalam minggu ditetapkan kepada sesuatu selain daripada *, cron menjalankan tugas apabila EITHER sepadan — bukan apabila kedua-duanya melakukannya. Jadi 0 0 13 * 5 ialah "tengah malam pada 13hb, dan tengah malam setiap Jumaat", iaitu kira-kira lima kali sebulan, bukan "Jumaat ke-13", iaitu sekali atau dua kali setahun. Penjana memberi amaran apabila kedua-dua medan dihadkan, dan ayat yang ditulisnya menyebut "atau" dan bukannya "dan".

Yang kedua ialah zon waktu. Cron menggunakan zon mesin yang digunakannya, yang selalunya UTC pada pelayan dan hampir tidak pernah menjadi zon orang yang menulis crontab. Oleh itu, pratonton yang dijalankan seterusnya menanyakan zon mana yang hendak digunakan daripada menganggap zon anda. Masa dikira sebagai masa jam dinding di zon itu, jadi kerja harian kekal pada waktu tempatan yang sama merentas perubahan penjimatan siang dan bukannya hanyut sejam — dan waktu tempatan yang tidak wujud, dalam jam yang dilangkau setiap musim bunga, ditinggalkan daripada senarai, kerana cron juga tidak akan berjalan.

Sintaks itu sendiri adalah kecil: bintang, nombor, julat a-b, senarai a,b,c, langkah */n atau a-b/n, dan nama bulan dan hari JAN-DEC dan SUN-SAT. Kedua-duanya 0 dan 7 bermakna hari Ahad. Nilai kosong dengan langkah, seperti 5/15 dalam medan minit, bermaksud "dari 5 hingga akhir julat, setiap 15", iaitu minit 5, 20, 35 dan 50.

Pengesahan adalah dengan sengaja. 60 * * * * ditolak kerana minit berhenti di 59; * * * * 8 ditolak kerana medan hari berhenti di 7; */0 * * * * ditolak kerana langkah sifar tidak sepadan. Enam medan biasanya bermaksud ungkapan Kuarza atau systemd yang medan pertamanya ialah saat, jadi ralat mengatakan bahawa bukannya sahaja mengira. Jadual yang sah dari segi sintaksis tetapi tidak boleh dijalankan — 0 0 30 2 * meminta 30 Februari — diterima dan dibenderakan, kerana menolaknya adalah salah dan berdiam diri akan menjadi lebih teruk.

Apa yang berlaku kepada apa yang anda tampal

  • Setiap penukaran, cincang, penyahkod dan perbezaan berjalan dalam tab pelayar anda. Tiada input dimuat naik, dilog atau disimpan pada pelayan, kerana tiada pelayan yang terlibat selepas halaman dimuatkan.
  • Hashes datang daripada pelaksanaan Web Crypto sendiri pelayar, dan UUID daripada penjana rawak yang selamat secara kriptografi. Kedua-duanya tidak melibatkan panggilan rangkaian.
  • Tiada apa-apa yang anda taip ditulis pada storan tempatan atau kuki. Memuat semula halaman akan membuangnya; menutup tab membuangnya.
  • Analitis seluruh tapak berjalan sahaja pada hos pengeluaran kanonik yang dikonfigurasikan dan didedahkan dalam Dasar Privasi; tempatan dan hos pratonton menolaknya. Nilai, token, URL dan kandungan fail yang ditampal dikecualikan daripada acara analitis ToolAcre sendiri. Pengiklanan dilumpuhkan dalam konfigurasi semasa.
  • Yang berkata: kunci JWT atau API ialah bukti kelayakan langsung. Tabiat selamat adalah jangan sekali-kali menampal satu ke halaman web yang anda tidak tulis, walau bagaimanapun boleh dipercayai dakwaannya — termasuk yang ini.

Soalan

Bolehkah saya menampal HTML yang bermusuhan ke dalam editor untuk membersihkannya?

Anda boleh menampalnya, dan tiada apa yang akan dilaksanakan: pengendali tampal membersihkan muatan papan keratan sebelum apa-apa dimasukkan dan pratonton ialah iframe kotak pasir tanpa skrip dibenarkan. Tetapi jangan gunakan hasilnya sebagai kawalan keselamatan untuk input yang tidak dipercayai. Ini ialah senarai dibenarkan berasaskan rentetan untuk satu output editor sendiri, bukan penapis XSS tujuan umum dan penghurai pelayar boleh mencapai pepohon yang berbeza daripada tokenizer seperti ini. Untuk kandungan yang tidak dipercayai, bersihkan pada pelayan dengan penghurai HTML5 sebenar.

Mengapa editor memadamkan imej dan jadual saya?

Kerana mereka tiada dalam senarai yang dibenarkan. Imej ialah permintaan keluar dan permukaan kesalahan; jadual berada di luar tujuan editor ini. Kandungan teks mereka kekal, tag tidak. Itulah senarai yang dibenarkan berfungsi dan bukannya pepijat — tetapi ini bermakna ini bukan alat yang sesuai untuk mengedit dokumen sedia ada yang kompleks.

Mengapakah chmod 4644 menunjukkan huruf besar S?

Kerana setuid ditetapkan dan pemilik melaksanakan bit tidak. Huruf besar bermaksud bit khas tidak mempunyai apa-apa untuk bertindak: ia adalah fail setuid yang tidak boleh dilaksanakan. Huruf kecil s bermakna kedua-dua bit ditetapkan. Peraturan yang sama memberikan anda S untuk setgid dan T untuk bit melekit, dan mendapatkannya ke belakang ialah ralat tunggal yang paling biasa dalam kalkulator mod.

Adakah penukar docker menjalankan arahan saya?

Tidak, dan ia tidak boleh. Perintah dipecahkan oleh tokenizer yang memahami petikan dan tidak ada yang lain. Tiada eval, tiada shell, tiada proses anak — halaman tidak mempunyai cara untuk memulakannya. Semua yang anda tampal kekal dalam tab.

Mengapakah penukar memberi amaran daripada sahaja menjatuhkan bendera yang tidak dapat dikendalikannya?

Kerana fail karang yang secara senyap kurang daripada arahan yang diperolehnya adalah lebih teruk daripada tiada keluaran sama sekali: anda mengetahui dalam pengeluaran. Setiap bendera yang tidak diwakili dinamakan, dengan apa yang perlu dilakukan mengenainya. Jika anda tidak melihat amaran, tiada apa yang hilang.

Mengapa cron seterusnya dijalankan berbeza daripada apa yang dilakukan oleh pelayan saya?

Hampir selalu zon waktu. Cron menggunakan zon mesin yang menjalankannya; pratonton menggunakan zon yang anda pilih dalam menu lungsur. Tetapkannya kepada zon pelayan anda — selalunya UTC — dan mereka sepatutnya bersetuju. Calon yang lain ialah peraturan hari: jika kedua-dua hari dalam bulan dan hari dalam minggu ditetapkan, cron berjalan pada salah satu, yang lebih kerap daripada yang kebanyakan orang jangkakan.

Had

  • HTML sanitiser ialah senarai yang dibenarkan untuk keluaran editor ini sendiri, dilaksanakan sebagai tokeniser rentetan dan bukannya penghurai HTML5 penuh. Ia bukan penapis XSS tujuan umum dan tidak boleh digunakan sebagai penapis.
  • Editor tidak mempunyai imej, jadual, warna atau kawalan fon dan tiada cara untuk menambahkannya: semua yang di luar senarai dibenarkan dialih keluar.
  • Permukaan pengeditan menggunakan document.execCommand, yang ditamatkan dan tiada penggantian yang dilaksanakan. Pelayar masih menyokongnya; tingkah laku berbeza sedikit di antara mereka, terutamanya di sekitar sarang senarai.
  • Kalkulator chmod meliputi dua belas bit kebenaran sahaja. Senarai kawalan akses, atribut lanjutan, konteks SELinux, aritmetik umask dan Windows ACL semuanya berada di luar skop.
  • Penukar docker menterjemahkan satu arahan docker run ke dalam satu perkhidmatan. Ia tidak membaca Dockerfiles, tidak menyelesaikan imej dan tidak boleh menyatakan --mount, --gpus, --device, --link atau --volumes-from; setiap daripada mereka menghasilkan amaran bernama sebaliknya.
  • Bendera yang tidak dikenali oleh penukar dianggap sebagai tidak mengambil nilai. Jika bendera sedemikian mengambil satu, nilainya akan tersilap dibaca — amaran menyatakan demikian, dan mengalih keluar bendera adalah penyelesaiannya.
  • Penjana cron membaca format crontab lima medan sahaja. Kuarza enam medan dan ungkapan sistem, @reboot, dan L, W, # dan ? pengendali ditolak dan bukannya diduga.
  • Masa larian seterusnya datang daripada pangkalan data zon waktu pelayar sendiri melalui Intl. Ia adalah pratonton, bukan jaminan: mesin yang menjalankan cron mungkin mempunyai zon yang berbeza, versi pangkalan data yang berbeza atau daemon yang tidak berjalan apabila tiba masanya.