Ngobrolin Keamanan bareng @mazipan - Ngobrolin WEB
Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. Topik, tautan dan pertanyaan menarik bisa dilayangkan ke https://ksana.in/ngobrolinweb Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.
Ringkasan Episode
Bantu KoreksiEpisode ini membahas tentang keamanan web (web security) bersama Mas Irfan, narasumber untuk ketiga kalinya. Diskusi dimulai dengan pengalaman Mas Irfan mencari pekerjaan selama 2 bulan dan pentingnya memiliki dana darurat (emergency fund). Topik utama adalah security yang sering dianggap sulit oleh banyak developer karena kurangnya exposure dan pembahasan, padahal security adalah tanggung jawab semua orang dalam tim pengembangan, bukan hanya tim IT security khusus. Episode ini menekankan bahwa security harus dianggap sebagai bagian dari produk, sama seperti performance dan accessibility.
Poin-poin Utama
- •Security adalah tanggung jawab semua orang dalam pengembangan software, dari front-end sampai back-end, bukan hanya tim IT security khusus
- •Ada banyak tools untuk security checking seperti CodeQL, SonarQube, DefectDojo, Snyk, dan Dependabot yang bisa membantu mendeteksi vulnerability
- •WordPress memiliki standar coding yang ketat dengan mantra 'sanitize early, escape late, always validate everything' untuk mencegah XSS
- •XSS (Cross-Site Scripting) adalah salah satu ancaman paling umum dan harus di-handle dengan sanitasi input dan escaping output
- •Security seringkali berbanding terbalik dengan productivity dan performance, sehingga perlu dicari keseimbangan yang tepat
- •Dependency management menjadi penting karena vulnerability di dependency bisa berdampak ke seluruh aplikasi, sebagaimana dibahas dalam artikel Dan Abramov tentang npm audit
- •Penting untuk menjadi advocate di tempat kerja masing-masing tentang security, performance, dan accessibility dengan pendekatan 'by design' sejak awal pengembangan
0:00SELAMAT MALAM
0:06Selamat malam semuanya, halu-halu.
0:14Selamat malam.
0:16Gimana kabar-kabar?
0:19Gimana puasanya lancar ya, mudah-mudahan ya?
0:22Saya, saya, saya tidak puasa.
0:24Bandirnya juga sudah mulai surut ya.
0:26Saya cuma kebanjiran, cuma kebanjiran.
0:30Tapi nggak kompleksnya, nggak kebanjiran.
0:32Cuma di luar komplek kebanjiran.
0:35Iya, akses. Jadi tidak bisa kemana-mana.
0:37Antarana sekolah juga jadi nggak bisa.
0:39Tapi hampir tiap hari hujan mulu ya sekarang ya.
0:43Sudah nggak sih, sekarang sudah aman sini mah.
0:45Sudah nggak?
0:46Sudah nggak.
0:47Cukia hujan hampir tiap hari.
0:49Nah tadi ada fitur baru, hujan es.
0:51Fitur?
0:53Serius?
0:54Gak tau kenapa, cuma nggak di tempat gue sih.
0:58Bisa ditampung nggak buat itu muka basah?
1:02Atau?
1:04Sayangnya biasa sih bukan es campur, bukan es krim, bukan es celu.
1:08Kasih sinyap lah.
1:10Meni hujan es daripada hujan abu vulkaniknya.
1:15Oh iya, itu benar.
1:17Komparasinya ekstrim.
1:19Berapa kali saya selama di Jogja berapa kali itu hujan abu vulkanik.
1:24Oh sering di Jogja ya?
Lihat transkrip lengkap
1:26Kalau si merapinya batuk-batuk atau lagi kena flu.
1:30Loh, itu pas Wissuda malam sebelumnya, ya pas letus.
1:38Jadi pas Wissuda itu masih hujan abu.
1:41Terus kan harusnya ada makan-makan, udah bayar juga.
1:46Terus ya Spakat di-cancel buat, ya pokoknya buat kayak donasi gitu.
1:52Pokoknya Wissuda paling ekstrim.
1:55Eh sebentar, Nara Sumber kita kita undang aja kali ya biar ngobrol.
2:00Iya, ngobrolnya belum 4, kasihan dong gue.
2:03Belum ngobrolin hujan abu.
2:05Hei, Nara Sumber kita.
2:08Selamat malam.
2:16Ini kita undang untuk yang ke-berapa kali, ke-2 atau ke-3 ya?
2:22Kesekeian.
2:24Kesekeian ya.
2:26Udah lumayan ini ya, lumayan sering diundang ya.
2:31Gimana kabarnya Mas Irfan?
2:33Terakhir kan lagi nyari kerjaan, sekarang udah ketemu.
2:35Alhamdulillah.
2:37Tepu tangan lagi dong.
2:40Gimana rasanya mencari pekerjaan di winter?
2:44Lumayan, sempat 2 bulan tidak gaji ya.
2:49Januari, Februari.
2:52Kalau pesennya sekarang ya, kayaknya perlu banyak nabung ya.
2:59Buat jaga-jaga biar runway-nya lebih panjang.
3:02Kita harus hitung kebutuhan hidup kita.
3:10Kalau ada tanggungan ya, punya semua all in good, di kali berapa, di kali 6.
3:15Itu harus punya ready fund.
3:19Entah dimasukin ke mana, tapi jangan deposito yang cairnya baru sekian tahun lagi.
3:256 bulan sekali.
3:27Kalau ngomong finansial bisa panjang nanti kita kalau saya Nara Sumbernya.
3:31Mungkin bisa kali ya, web finance ya.
3:35Finansial untuk para web deaf.
3:43Jadi malam hari ini rencananya kita mau ngobrolin tentang security atau keamanan.
3:53Ini salah satu topik yang disarankan oleh Mas Irfan sendiri, terus kita todong juga.
3:59Dan yang paling banyak vote-nya loh, di GitHub.
4:04Topiknya dari Mas Irfan, kontennya juga udah dikasih.
4:09Kontennya juga dari Mas Irfan.
4:11Orangnya juga sekarang dibawa ke sini.
4:13Buat terkenaan dulu, karena kan topik security ini kan jarang yang bahas ya.
4:21Kalau kita mau jadi developer itu kayaknya di belakang-belakang.
4:26Jadi kayaknya ada komunitasnya sendiri nggak sih?
4:30Ada, ada.
4:32Bahkan profisinya kan ada ya, IT security, atau governance.
4:39Ya, cybersecurity.
4:42Yang semoga topik kita ini bisa memberi pencerahan bagi teman-teman,
4:48khususnya vendor-vendor yang membangun situs untuk ini kita ya.
4:52Pertanyaan pertama adalah role ini atau tugas ini itu untuk developer secara umum atau ada role sendiri?
5:00Security itu mulai dari yang paling bawah sampai paling atas.
5:11Semua bertanggungjawab terhadap security.
5:14Sebenarnya kayak performance nggak sih?
5:16Dalam hal maksudnya walaupun mungkin kalau di perusahaan besar adalah performance specialist atau apa.
5:22Tapi sebenarnya kan ya itu kayak yang dibilang Irfan tadi.
5:25Kayak semua yang coding juga kita bisa pakai A, pakai B, pakai C.
5:31Tapi harus ada pertimbangan performance-nya aja.
5:33Jadi kan security juga kan kita dalam membuat keputusan dalam coding-an,
5:37itu kayak harus ada pertimbangan security-nya juga kan?
5:41Memang pada prakteknya biasanya kita punya specialist misalnya kayak di front-end ya.
5:53Kita punya front-end specialist.
5:54Di IT sec juga biasanya ada teman-teman yang memang profisinya memang di security aja tuh.
6:01Nah itu biasanya yang nge-handle end-to-end jadinya, security-nya.
6:06End-to-end means server-nya juga ngurusin, people-nya juga awareness-nya ngurusin, governance-nya ngurusin.
6:15Dan biasanya di IT sec juga ada spesialisasinya lagi.
6:19Nah tapi yang hari ini ingin kita bahas, at least yang deket sama kita aja deh.
6:25Soalnya kan kadang-kadang meskipun security itu kayak end-to-end ya topiknya.
6:29Tapi kan bahkan tim IT sec pun kadang-kadang meminta kita untuk eksekusi sesuatu.
6:35Nah di sini ketika IT sec meminta sesuatu dan dari sisi web developer-nya,
6:42knowledge-nya terlalu jauh gap-nya ya, itu rada sulit.
6:47Bahkan untuk implementasi hal-hal yang menurut mereka adalah kayak basic aja gitu.
6:52Maksudnya kayak di beberapa company tuh kayak di tempatku yang lama tuh ada ini.
6:57Jadi kalau kita mau deliver services atau web application ke production itu kayak ada security checklist.
7:05Nah security checklist itu isinya sebenarnya hal-hal dasar yang mestinya kita comply dulu
7:10sebelum kita deliver ini product ke production.
7:15Nah hal-hal dasar aja banyak web developer yang kesulitan untuk comply checklist-nya.
7:23Nah kan berarti melihat dari situasi ini,
7:27nah sepertinya kok topiknya jarang dibahas ya.
7:34Atau mungkin karena sebenarnya begitu-begitu aja mungkin ya.
7:37Karena banyak topiknya emang sebenarnya dari jaman kita belajar web dulu ya.
7:42Sudah ada tuh topik begitu. Mungkin ya karena nggak ada ini aja ya.
7:47Tapi praktiknya emang jadinya bahkan teman-teman yang senior pun kadang sulitan untuk ini harus diapain gitu.
7:58Atau harus ngapain gitu.
8:01Nah makanya pinginnya sih awareness-nya juga naik lagi.
8:04At least buat kita yang selama ini mungkin moding-nya di web-nya aja,
8:09entah front-end-nya, entah back-end-nya. Ternyata kita sehari-hari yang moding front-end dan back-end itu tetap ada awareness yang harus dinaikin soal security.
8:19Sama kayak awareness kita soal web performance, sama kayak awareness kita soal accessibility.
8:26Nah security itu ternyata jadi bagian dari product package-nya.
8:32Ya, salah satu.
8:34Dan bisa fatal kalau misalnya lu putih.
8:37Umumnya begitu. Umumnya kan kayaknya ada sebuah konsepsi bahwa soal security itu kayaknya kalau belum kecemplung,
8:45orang belum aware. Padahal kadang dampaknya ketika sudah kecemplung itu terlalu fatal.
8:51Kayak lubang di jalan ya?
8:55Kalau nggak ada yang kecemplung, belum ditambah itu jalan.
9:00Oh, belum kena batunya ya santai aja gitu ya? Gak ada masalah ya?
9:07Saya mau punya satu analogi yang berdasarkan pengalaman ini di rumah sakit mengenai kebersihan.
9:15Yang paling simpel aja itu adalah cuci tangan.
9:19Kalau misalnya di rumah sakit yang sudah tersandarisasi, salah satu yang paling terkena itu GCI, itu semua lini tahu cara cuci tangan yang benar.
9:33Yang enam langkah itu. Dan itu sesekali ada sekaya ahli inspeksinya itu menanyakan.
9:41-Ngeliatin orang cuci tangan? -Kaya sebagai pasien aja datang.
9:49Dia cuci tangan biasa tapi nggak ditegur sama salah satu cleaning service.
9:59Itu juga cara cuci tangan harus benar.
10:04Itu dari sisi inspeksinya dia harus tetap memantau dan melihat semua lini dari paling bawah sampai paling atas itu mengerti cara cuci tangan.
10:15Saya melihat security, at least yang dasar atau top ten atau owas top ten dulu deh.
10:23Itu mengerti dasar-dasar security dan cara menanganinya dan bagaimana menginteract.
10:32Implementasinya di dalam operationnya kita, mau dari moding, mau dari cara kita bekerja di kafe.
10:42Cara kita set password kita, cara kita menyimpan password itu sudah ada diatur.
10:50-Kita mulai dari mana? -Bagai contoh kalau misalnya saya mau kerja dari kafe, itu wajib pakai VPN.
11:10Meskipun wifi-nya pakai password, jadi kalau untrusted network wajib pakai VPN.
11:20Itu kan kadang relasinya ini juga ya karena memang ada beberapa domain yang memang nggak aksesibel buat publik dan cuma aksesibel via proxy atau VPN di kantor tersebut.
11:35Itu namanya Enforce.
11:40Karena kadang-kadang kita di software development kan kita bikin multi environment ya, let's say production, ada canary, ada staging.
11:50Environment environment di bawah production itu memang biasanya nggak aksesibel untuk publik.
11:57Sesebelnya buat internal VPN ya, tolong dijagain public accessnya biar nggak sembarangan di akses.
12:05Kalau kita mau ngomongin tentang security, salah satu referensinya adalah dari...
12:28-Shellscreen. -Shellscreennya hilang dari MDN.
12:37-Internet is a dangerous place. -Alimat pertamanya numpol web.
12:42-Internet is a dangerous place. -Iya.
12:45Jadi banyak resiko-resiko yang bisa terjadi ya, karena dari mulai email, password, kartu kredit, pembayaran, semuanya kita akses internet banking, semuanya di internet kan sekarang ya, semuanya serba internet.
13:06Jadi kalau disini itu ada beberapa jenis ya, beberapa jenis threat itu apa ya?
13:17-Ancaman. -Ancaman, ancaman.
13:20Ada beberapa ancaman. Dan sebenarnya web security itu nggak cuman kayak dari, kita harus mengamankan servernya aja.
13:28Ini semua ini ya, mulai dari aplikasinya, konfigurasinya, web servernya, terus operationnya cara penggunaan.
13:40Kalau di user itu misalkan harus ganti password setiap 6 bulan sekali, atau setahun sekali.
13:49Itu juga termasuk gitu, sampai ke client side nya juga harus dipikirkan. Jadi benar-benar semua ini, nggak cuman ini kerjaan anak BN, ini kerjaan anak PN nggak jadi semua.
14:02Nah untungnya, ini untung atau rugi ya, ini dua belah mata pisau sih. Karena kita sudah terbiasa menggunakan framework, termasuk juga ORM dan lain-lain, itu udah diurusin semua, nggak semua, sebagian sudah diurusin.
14:18-Best practice nya sudah diurusin. -Tapi kita nggak tahu, ternyata itu sudah diurusin gitu. Kita nggak aware.
14:28-Jadi kita nggak punya pengetahuan nya ya? -Ya, kita nggak punya pengetahuan nya. Yang kita tahu bahwa udah aman lah gitu kan, padahal sebenarnya belum tentu juga.
14:37Bisa aja ada ancaman yang lebih advanced ya, lebih mengerikan daripada itu.
14:44Sebagai satu contoh simple, kayak kita penggunaan framework atau CMS, misalnya yang sudah user password.
14:51Kalau misalnya saya bikin CMS jaman dulu, masih jaman kuliah, tanpa pengetahuan security, saya simpan aja username sama password nya itu.
14:59-Input text nya, plain text? -Bukan, password itu dalam plain text database, contohnya.
15:05Tapi kalau kita sudah pakai framework seperti Laravel, seperti Django, ColoPython, atau segala macam, itu sudah ada menyediakan user authentication module.
15:18Yang otomatis sudah menyediakan best practice yang si password nya itu sudah di hash, yang disimpan hash nya doang, contohnya.
15:27Tapi alhasilnya kalau kita hanya tahu pakai, jadi nggak tahu apa yang terjadi di belakang.
15:32Sekarang kita sudah pakai service-service semua ya, Out Zero, Firebase, Cognito, itu sudah mereka menyediakan.
15:44Which is good, tetapi kalau kita nggak tahu dasarnya, ya terjebak lama-lama.
15:50Sama ini nya sih kalau di real usage nya, roy nya juga kadang-kadang, soalnya kan kalau terparti gitu kita harus bayar ya.
16:02Kadang-kadang mereka milih terparti karena memang mungkin nggak punya tenaga yang maintain, nggak punya knowledge yang cukup.
16:13Dan mungkin harganya masih masuk akal buat mereka, tapi mungkin dari satu titik, pada satu titik kadang-kadang ujung-ujungnya balik lagi, mereka akan bikin sendiri.
16:27Jadi disini dijelaskan ada beberapa ancaman kalau di web security atau website security, yang pertama ada cross-site scripting atau XSS.
16:43Injection ya, client-side injection, jadi ada SQL injection, ya ini di client-side. Ini kalau front-end minimal banget, mesti tahu caranya protect ini sih, walaupun mungkin belum tahu yang lainnya.
16:59Ini kan common ya, tapi banyak yang nggak di handle XSS ini, kan yang sering digaung-gaungkan adalah jangan percaya terhadap apa yang di input sama user.
17:23Faktanya kalau QA-nya kreatif biasanya ada satu layer tuh yang akan nge-test dengan input-an yang legendaris tuh.
17:32Ya kayak input gitu mereka isinya pakai JavaScript gitu, script, alert, phone, semacam itu. Bahkan kayak XSS pun banyak kan nggak nge-handle, karena input biasanya kita handle aja, handle input, set ke step-nya, langsung aja kirim ke back-end gitu.
17:58Nggak ada proses sanitize di situ, jadinya ini juga opera-opera siapa yang harusnya sanitize, apakah front-end atau back-end, front-end-nya yang sanitize.
18:12Terserah, itu sebenarnya ini aja. Ya kan salah satu prinsipnya di back-end emang nggak boleh percaya dengan yang dikirim. Walaupun sudah disanitize.
18:28Orang developer front-end bekerja dengan mindset jangan percaya yang dikirim user. Yang dikirim user itu ya yang di browser kan client-side. Orang back-end juga bikin kodingan dengan mindset jangan percaya apa yang dikirim user lewat aplikasi front-end.
18:44Terus seharanya sekarang kan back-end biasanya dikonsumsi multiple client-nya. Let's say kayak browser, ada mobile app-nya, terus bisa jadi ada yang server-to-server, bisa jadi ada CLI gitu ya.
18:58Nah multiple client ini bikin prinsip bahwa tidak boleh percaya terhadap user input makin relevan gitu. Jadi memang sebaiknya di back-end memang sanitize lagi kalau memang input-input itu tidak seharusnya mengandung karakter-karakter yang tidak diinginkan.
19:17Tapi sebagai front-end juga nggak make sense juga kalau user input kayak kata-kata script gitu ya. Terus tiba-tiba kita kirim juga ke back-end. Jadi kalau kata-kata aku sih ya dua arah aja sih.
19:31Sama kalau malasnya script-nya di browser, kayak yang di layar, example.com/trickyjs-nya ngelakuin hal-hal yang berbahaya.
19:47Kalau dulu cookie masih bisa dibaca ya kalau sekarang udah dipartisi, tapi ya tetap aja kan bisa mengakibatkan ancaman security ya. Nah itu kan berarti kita harus limitigate.
20:01Biasanya base64 yang di encode, dijalankan gitu kan. Tapi bukan dijalankan dari domain lain ya. Misalnya dia benar-benar ada masalah nih di inputnya dia masukin JS yang base64 terus dijalankan di browser yang dijalankan oleh browser si user. Cookies masih bisa dibaca.
20:20Itu ada ini juga mas Ivan. Kita tahu pokoknya harus limitigasi duluan kan. Jangan nungguin sampai back-end bahaya. Di XSS tuh ternyata ada yang namanya self-exercise.
20:32Means mungkin kita meng-input sesuatu yang kita nggak tahu tapi sebenarnya itu melakukan XSS terhadap diri kita sendiri. Makanya di beberapa produk yang sudah prominent ini kata-kata Facebook gitu ya.
20:47Kalau kita buka DevTools-nya itu biasanya udah... Oh iya ada stop.
20:53Lo buka DevTools nih lo ngerti nggak mau ngapain? Jangan-jangan lo kopas dari suatu script yang lo nggak tahu script itu ngapain? Makanya dikasih tahu tuh.
21:04Kau berarti lo mau kombinasi sama social engineering gitu ya? Maksud orang yang nggak tahu kayak ditipu-tipu ini caranya biar bisa nge-hack... Contohnya DevTools.
21:18Nah itu script-nya bakal apa yang dilakukan kan misalnya ngambil login token atau apa dikirim ke server-nya si penipu.
21:26Sekarang DevTools... Itu tidak sengaja ya dilakukan oleh dirinya sendiri berarti. Betul. DevTools kita sekarang tuh kalau mau kopas...
21:35Harus bisa kita type dulu. Type dulu, allow, apa gitu. Coba aja.
21:44DevTools kita kalau dikonsolnya kita kopas nggak bisa. Eh, copas pertama kali nggak harus. Berarti sekarang DevTools itu bukan cuma buat ini ya. Buat peringatan juga kadang-kadang buat hiring juga ada ya?
21:58Ada. Masih ya. Bener-bener. Udah nggak sih. Jadang liat tapi semingat ya.
22:06Bener-bener. Alopasting. Oh iya itu alopasting. Ya diketik manual betul.
22:14Kadang ini ya sebeli ya. Sebeli ya yang biasa buka DevTools.
22:20Tapi kita... Tidak, itu cuma kalau installan baru kelihatannya kalau lagi habis update atau apa. Ini bisa nggak? Tidak, kalau type tetap bisa. Tidak, paste dari... Ambil dari misalnya dari MDN tadi.
22:38Dari MDN ya. Harus script dong kalau tes doang. Harus script ya? Iya. Iya maaf, maaf. Oh ini apa? Highlight. Highlightnya. Oke. Sekarang udah ya. Ini nggak bisa nih?
22:54Bisa karena udah pernah. Bisa. Karena udah pernah. Udah pernah. Udah pernah diallow ya. Iya waktu itu setelan baru.
23:02Bisa di-reproduce ya. Oh iya. Harus dihapus dulu semua kali datanya. Historinya. Mungkin.
23:10Nah untuk... Iya ngomongin soal SSS at least berarti dari sisi kita web developer tugasnya adalah dua. Yang satu ketika user menginputkan sesuatu kita make sure aja sanitize hal-hal yang memang kita tidak inginkan.
23:26Misalnya nama. Nama itu kita nggak mau mengandung HTML, mengandung JavaScript, mengandung CSS atau apa pun. Nah itu bisa sanitize.
23:38Yang kedua biasanya selain input yang dikirim dari user adalah output yang kita terima juga dari data source kita. Let's say hasil input user-nya nanti akan ditampilin di satu halaman lain gitu.
23:52Nah halaman lain itu juga mesti ngejagain just in case yang input memang nggak jagain gitu. Jadi yang nampilin itu kan mesti jagain.
24:01Menampilkan HTML. Makanya kalau di-react tuh kita punya lucu kan. Dangerous, scary. Bener, HTML. Jadi kalau cuma ngeprint string-nya, kalau ngerender string-nya itu otomatis di-strip ya nggak sanitize fully sih.
24:15Cuma skrip-skrip itu di-strip. Cuma dihilangin aja sama react. Tapi kalau mau beneran full HTML di-render, sampai command-nya dangerously set inner HTML.
24:28Itu juga ngasih awareness sebenarnya ke developer bahwa ketika kita pakai hal tersebut, make sure kita bener-bener trust dengan data source-nya.
24:38Misalnya oh ini memang dari database kita yang bisa kita control just in case suatu saat ada apa, kita bisa langsung apus aja dulu di database-nya atau dibenerin langsung dari database ya just in case.
24:49Atau kita man sanitize sendiri punya tang jawabnya dialihkan ke developer. Kalau Svel, itu tag-nya cuma @tml doang sih sayangnya.
25:00Karena kalau ikut tutorial official-nya Svel, ada warning-nya juga developer yang bertanggung jawab atas HTML ini di-render as is.
25:13Dari pengalaman ku, exercise ini emang most of the cases butuh tambahan effort. Jadi kita pake next.js pun nggak, otomotif-li exercise gitu tiba-tiba nggak ada exercise yang terjadi, harus ada campur tangannya gitu.
25:34Nah di security best practice-nya WordPress ada mantra-nya begini. Sanitize early, escape late, always validate, everything. Semuanya.
25:52Bahkan decoding best practice-nya atau WordPress decoding standard, pake PHP, code-sniper, dan pake linter-linter-nya si WordPress semuanya itu sudah diimplementasi mantra itu.
26:08Jadi, sanitize early. Jadi semua input dari user itu sudah harus di sanitize. Apapun itu. Paling awal saat baca dari post, HTTP post, HTTP get, atau request di PHP-nya, sanitize early.
26:26Jadi sebelum diproses, apapun itu, sebelum diproses, yang pertama kalian lakukan, sanitize dulu. Sesuai, mau itu text, sanitize text dulu. Mau itu HTML, sanitize dulu. Kalau itu JavaScript, sanitize dulu.
26:40And so on. Terus kemudian sebelum output terakhir ke user, sebelum output, itu di-escape dulu. Escape HTML, escape text, escape JS, escape attribute, pokoknya di-blank-kan dulu.
26:58- Sebelum output, escape. Terus always validate. - Escape itu maksudnya cuma normalize karakter-karakter itu kan? Special text. - Special karakter, apapun itu didecode.
27:10Jadi kalau tag HTML didecode. Jadi HTML kalau bisa escape attribute, berarti semua tag selain text dihapus, semua attribute tidak ada. Macam-macam. Terus...
27:25- Kalau nggak salah, disini disebutkan script, object, embed, and link. - Link. Semua dihapus. Kalau di-escape. Terakhir adalah always validate.
27:37Nah, always validate ini, datanya, kalau kita udah tahu itu misalnya data, datanya mengenai contohnya, kita tahu itu email, harus email gitu formatnya.
27:55Ya jangan allow everything else, validate aja itu sebagai email dulu. Terus kemudian kalau misalnya, ini ada nih contohnya kalau data sanitizing sama escaping,
28:10- kalau Mas Riza mau buka. - Boleh, boleh. - Validate, misalnya kalau itu memang hanya, kayak kata Mas Sipan tadi, hanya nama, ya udah nama.
28:28Jangan ada kasih idly, atau kasih bowl, nggak ada gitu. Plain text nama. Nah ini kalau di WordPress sudah sediakan sanitize underscore apa, macem-macem.
28:45Ya pake aja pada danan. Di Laravel juga punya, nggak cuma di WordPress. Laravel, Call United, semua ini ya. Ini semua sanitize. - Oke.
28:58- Kalau yang escape... - Kalau di jepaskir, andalan, don't purify. - Escaping ini di PHP, bisa di-scroll, nanti ada escape HTML, escape JS, escape ATRI pun, escape URL.
29:11Kalau kita udah tau itu URL, ya udah, hanya allow URL. Semua elemen di-clean. Nah ini, hanya dengan mantra ini aja, implementasi di kehidupan sehari-hari itu harus tetap aware dan itu nggak mudah.
29:30Harus tetap konsisten. - Oke. Beneran ya, si WordPress ini. Karena, oh iya, karena si WordPress apa ya, dia berhubungan dengan user generated content banyak ya, jadi...
29:45- Banyak ini di luar sana, pendapat di luar sana kalau WordPress itu nggak aman. - Nggak aman. - Ya, tapi kan yang bikin plugin-nya kebanyakan. Dan belum tentu semuanya aware.
29:59- Iya. - Nggak, dan saking banyak penggunanya sih, makin banyak penggunanya kan, kayak makin macem-macem nih orangnya. Mungkin makin banyak orang awam yang pakai, yang jauh dari teknologi, gampang dikibulin buat kopas sesuatu di DevTools misalnya. Itu kan kayak udah...
30:15- Atau disuruh install plugin. Kalau mau bikin begini-gini, udah install aja plugin-nya, upload aja plugin-nya, udah masuk plugin-nya. - Terus ekosistemnya terbuka semua, semua orang bisa bikin plugin.
30:29- Terus misalnya ada yang perlu plugin custom, terus bayar dari Fiverr, developer antar-berantah yang mau dibayar 1 dollar sejam. Itu plugin-nya bisa dipertanggung jawabin atau nggak kan, nggak tahu. Jadi maksud saya mungkin separohnya bukan salah WordPress-nya sendiri sih, cuma saking besar ekosistemnya aja.
30:52- Nah ini selama ini sih kayak cuma pakai ini aja sih. - Udah cukup, asal aware aja, tau oke, memang mau sanitize, sanitize.
31:02- Sama ini sih kayak punya standar buat kalau setiap QA ada unsur-unsur input kayak mempastiin ini di tes. Yang susah nge-enforce itu, bukan susah, maksud saya yang tricky dan mungkin orang banyak lewat itu nge-enforce itunya sih.
31:18- Kalau kayak tadi nih, misalnya kayak di WordPress atau ini, pakenya kan gampang, cuma tinggal pakai function yang udah ada aja. Maksudnya apapun itu mau di PHP atau apa, pasti udah ada library-nya.
31:30- Saya sangat terbantu sekali dengan ekosistemnya WordPress yang sudah menyediakan WordPress Coding Standard yang sudah menangkap hal-hal seperti XSS ini dari saat linter.
31:44- Oh ada linter-nya ya? - Kalau misalnya di JavaScript, temen-temen, ya namanya PHP, Coatsniver, itu sebenarnya static analysis.
31:53- Sebenernya kalau di JavaScript biasanya pakai apa? Untuk XSS ini. - Sonar? Apa-apa?
31:58- Nah untuk XSS ini, jadi kayak saat linter ada nggak kita nge-check kalau kita terima input, kita harus sanitize dulu? - Nggak, nggak ada.
32:09- Mungkin ada, gue sih nggak pernah. - Ya opionated kali ya. - Kesadaan developer, eh nggak tahu sih ada atau nggak.
32:17- Dan next desk? Dan next desk ada nggak? - Nggak, nggak pernah pakai, nggak pernah pakai. - Tapi ada kan sebenarnya ya?
32:24- Ini ya, plugin-based gitu ya. - Tapi nggak ada sih. - Plugin-based ya.
32:28- Tapi mungkin nggak se-komplete itu ya. - Se-popular. - Nggak se-komplete itu ya.
32:34- Bahkan kayak SonarQ pun nggak bisa nge-capture terlalu banyak use case. Kayak input-input yang harus di sanitize itu biasanya nggak diomelin.
32:44- Dia paling omelin kayak misalnya di React-nya masih ada yang pakai dangerous set inner HTML, dia ngasih tahu.
32:50- Karena tokennya jelas kan, lo ada dangerous set inner HTML, oh ini berpotensi XSS, bisa nggak pakai yang lain gitu.
32:59- Gitu-gitu, tapi nggak, dia nggak nge-capture oh input, input name itu harus disanitize dulu sebelum dikirim itu kan udah data flow ya.
33:09- Udah sulit tuh di static analyze biasanya begitu-begitu. - Benar, benar.
33:15- Tapi dari sisi backend juga harus jangan percaya juga apa yang dikirimkan sama klien sebenarnya.
33:21- Jadi tetap harus di double check dari sisi server, server side.
33:27- Nah masalah kan terlalu banyak fill juga ya kadang-kadang ya, jadi seringnya sih males gitu ya, nge-sanitize semua hal ya.
33:36- Jadi kadang-kadang at least yang critical dulu di sanitize deh, yang hal-hal yang mungkin fungsinya penting gitu.
33:45- Atau kayak email, email ya jangan yang aneh-aneh gitu. Yang berpotensi menimbulkan hal-hal aneh lah.
33:56- At least itu ngomongin XSS ya, XSS udah banyak juga. Mungkin banyak hal juga yang nggak selesai apa ya.
34:04- XSS tuh panjang ceritanya, masih ada ini yang lain.
34:10- Kalo dulu kan jaman dulu mungkin temen-temen yang nonton mungkin nggak ngalamin ya, dulu sempet ada atau banyak ya, ada banyak website
34:21- Yang kita bisa mengubah JavaScript, CSS-nya kayak Friendster.
34:26- Friendster, Myspace, Myspace.
34:30- Nah itu kan berbahaya sekali, kalo sekarang mungkin udah agak kurang ya, porsinya ya.
34:34- Kalo dulu Friendster bisa diinject, bisa diinject party.
34:37- Bisa diinject, iya.
34:38- Bisa diinject, bisa geser-geser.
34:42- Iya kalo sekarang mungkin orang udah semakin aware, jadi itu semakin beresiko ya, website-website seperti itu.
34:50- Mungkin juga penyebabnya si WordPress mengadopsi ketatnya apa, koding standar, menerapkan koding standar gitu ya, salah satunya karena kan tadi dia CMS.
35:00- Jadi user generated content, dan besar kemungkinan akan mengarah kesana kan, kalo misalkan dibiarkan lepas gitu.
35:06- Nah itu juga CMS tuh penting tuh Mas Riza, karena kebanyakan orang punya asumsi bahwa CMS ya udah asal jalan aja, padahal CMS itu kayak jantungnya.
35:17- Jantungnya, karena dia yang nge-produce kontennya kan.
35:20- Betul.
35:21- Jadi kalo dari CMS nya gak disanitas dengan baik, yang nampilin juga kocar-kacir, karena harus banyak yang disanitas juga di view nya gitu.
35:31- Tapi kalo dari CMS nya oke, itu kayak data source kita oke tuh, jadi seolah-olah kita nampilin data yang sudah trusted lah istilahnya.
35:39- Kita sudah percaya bahwa CMS kita sudah meng-sanitize dengan baik dari sisi konten inputnya, jadi ketika nampilin mungkin bisa lebih lega sedikit lah.
35:52- Ya mungkin juga, mungkin kita gak nyadar ya, misalkan kayak, wah CMS ngapain sih aman-aman banget orang kita mau bikin buat blog engine sendiri misalkan.
36:00- Ya kan kontennya kita yang nulis gitu, gak mungkin kita macem-macem kan, oke.
36:06- Gak cuma CMS berarti ya, ngomongin CMS itu berarti kayak internal tooling dan lain-lain yang temen-temen, mungkin back office nya gitu ya, seolah-olah gak penting gitu.
36:17- Bukan cuma article blog dan lain-lain ya CMS itu ya, LMS juga termasuk CMS kan sebenarnya.
36:24- Semua, kadang yang menjadi ini apa namanya, kalau misalnya tools-tools yang back office yang internal, ah trusted aja gitu kan yang pakai orang-orang sendiri gitu ya, tapi ya, we don't know, we don't know.
36:41- Sebaiknya kalau mau mulai yang oke sih emang dari data source nya dibenarin ya, jadi tempat user nginput-nginput nya itu di sanitaskan dengan baik, jadi bagian yang nampilin biasanya lebih bisa lega sedikit.
36:58- Harus dimulai sejak awal banget dari sejak ini ya. - Iya, kebetulan kemarin di kantor yang lama itu diriku sempat kayak ngikutin security test gitu dari BSSN.
37:17- Jadi kayak mereka punya apa, dari pemerintah itu punya apa, badan yang ngurusin hal-hal kayak gitu, terus mereka bisa ngetes ke menterian lain software-software nya dari ujung ke ujung.
37:33- Dari sisi mereka akan ngetes banyak hal termasuk kayak gini-gini SSS itu akan dicek, paling banyak ke Jeblos ya temen-temen justru yang pegang banyak form,
37:47jadi kayak misalnya saya kemarin ngajuin cuma aplikasi yang front-facing itu yang public-facing, jadi nggak banyak form inputnya, relatif aman kayak kita cuma ketemu satu-dua yang low priority lagi.
38:04- Tapi temen-temen yang ngahendal aplikasi yang punya banyak form inputnya itu biasanya banyak reportnya, nah yang begitu-begitu kan bikin sadar juga ya bahwa mungkin aplikasinya kita merasa kayaknya baik-baik saja,
38:21tapi begitu kita harus comply dengan suatu regulasi gitu ya, itu rumit tuh kalau udah terlanjur banyak begitu, apalagi light shape form nya banyak sulit, jadi kalau itu bisa dikerjakan di first place gitu ya
38:37ketika kita coding pertama kali itu rasanya nanti beban kalau kita mengajukan terhadap suatu compliance gitu lebih enak lah ya.
38:48- Ya berarti kayak WordPress itu misalnya contoh positifnya kan kalau mau bikin ini standarisasinya gini-gini-gini, kalau internal mungkin malah bisa kalau bikin form tuh kayak ada starternya atau template nya,
39:01jadi setiap mau bikin form harus dari template itu.
39:04- Terus kalau misalnya res API, misalnya semua data diterima dari res API, yang benar adalah state nya res API itu dibuat skema nya dulu,
39:21skema res API mau terima input nya, jadi input dari res API itu seperti apa, data field nya apa saja, dan didefine setiap field nya itu data type nya apa.
39:35Nah dari skema itu punya data field dan data type, setelah data type nya, itu yang berarti saat di backend,
39:45di validate lah itu datanya harus sesuai dengan data type, misalnya kalau inputnya adalah string, sorry data input nya adalah number yang dimasukin string ya sudah,
39:59itu sudah gak validate, jadi kembalian dari res API ini data gak benar.
40:06- Error.
40:07- Error, udah itu aja dulu, simpelnya pintu pertamanya adalah validate data itu dulu,
40:12keduanya baru disanitize, jadi jangan mohon temen-temen yang bikin skema nya untuk res API,
40:23jangan kan misalnya skema gak dibuat, res API field nya dibuat seiring berjalan saat development,
40:33nambah-nambah sesuka hati dan data type nya sesuka hati.
40:37- Atau dibuat gak sesuai, gak sesuai skema, itu lebih bahaya lagi gak sih?
40:41- Iya, bisa jadi.
40:43- Pastinya lebih misleading.
40:45- Lebih misleading, betul, dan saat di develop, ya cuma diterima doang, diterima dan ya tidak,
40:54ya udah langsung diproses, gak dibersihin dulu, harusnya dibersihin dulu.
41:01Jadi saat data disimpan ke database, itu udah pasti bersih sesuai dengan data type yang ditentukan.
41:11Dan framework yang seperti apa ya, yang saya tau kayak Yee kalau di PHP, Yee framework itu misalnya,
41:20dia sudah bisa membuat dari database skema, bisa menjadi model, dan dari model bisa langsung jadi skema,
41:30contohnya, dan itu sudah kayak best practice gitu.
41:34- Itu framework for 10x engineer ya.
41:40- 10x engineer.
41:42- Kalau mau bikin kayak sesuatu yang cepat aja, prototyping cepat tuh enak banget.
41:48Tapi jangan minta untuk custom-custom ya, susah opinionated ya.
41:54- Itu counterpartnya golang, kalau di golang kan nololah. - Semua manual.
42:00- Semua manual, tidak ada framework.
42:02- Iya, iya.
42:06- Kalau ini kan cuma bisa omputer doang ya, 10x engineer ya.
42:12- Ada sedikit asumsi, atau kayaknya rather real ya, jadi sedikit fact lah ya,
42:19kadang-kadang ya, security emang tidak berbanding lurus dengan performance atau productivity, kadang-kadang.
42:27Karena intensinya kalau di security itu ya, makin rubit biasanya makin baik tuh, makin banyak layer-nya makin baik.
42:36Sementara di performance, class is better kan kadang-kadang, semakin sedikit, semakin bagus.
42:42Kalau di security kalau bisa, ada banyak layer-nya nih, ada WAF-nya, ada apanya baru sampai ke service-nya.
42:49Kalau kita pinginnya semua ini, kayak tadi ngomongin SSS ya, itu kan.
42:55- Sama common grounder ya, atau mungkin stakeholder lainnya kayak harus memperjuangin, ini emang perlu.
43:01- Iya, tapi kadang-kadang security juga ini ya, security kalau kita bilang tadi adalah bagian package dari produknya,
43:10ketika kita sadar bahwa security adalah bagian dari produknya, jadi nggak bisa dihindarkan gitu.
43:19Inevitable gitu, jadi sama kayak ketika kita ngobrolin accessibility.
43:25- Itu udah bagian dari feature gitu ya? - Iya, ketika kita memiliki accessibility adalah edit value,
43:32itu yaudah nanti aja kita tambahin gitu. Tapi kalau itu udah jadi requirement, itu harus dikerjain gitu.
43:38Meskipun ada trade-off yang harus dibayar gitu.
43:41Let's say ngomongin web accessibility kan otomatis lebih banyak tag yang harus kita tulis ya,
43:47lebih banyak atribut yang harus kita tambahin.
43:49Maksudnya hasil akhirnya, size-nya makin naik.
43:52Tapi kan itu bikin dari rukar menjadi hal yang sudah secara sadar kita kerjakan,
43:58karena memang benefit-nya lebih banyak daripada mudaratnya istilahnya.
44:03Sama kayak security, apakah, let's say kayak tadi kita ngomongin sanitize di JavaScript,
44:09kadang-kadang yang paling populer dipakai adalah don't purify.
44:12Ketika kita tambahin don't purify, sudah pasti bundle size-nya naik.
44:17Jadi kan nggak sejalan tuh antara web performance dan security.
44:22Jadi mungkin cari balance-nya, mungkin cari hal yang masih bisa diterima sama timnya sendiri atau sama produknya.
44:31Misalnya security itu adalah top issue di produknya, jangan ambil risiko di situ.
44:39Tapi kalau performance adalah top priority.
44:43Nah, tetap basic security kayak XSS dan ada macam-macam yang lainnya,
44:51tetapi kita harus ada standarnya.
44:53Basic security itu harus kayak, ini nggak boleh nggak, harus, harus gitu.
45:00- Iya, tapi juga kadang-kadang kita juga cari jalan cepat ya.
45:04Misalnya kayak kita tahu ada don't purify, ya udah kita nggak mau bikin sendiri.
45:09Padahal sebenarnya mungkin kita bisa define requirement dari XSS-nya.
45:13Misalnya kita nggak mau cover semua hal, kita pengen cover hal-hal basic aja.
45:17Misalnya kita nggak mau input text script, kita nggak mau text style.
45:24Itu kan bisa kita regex aja atau bikin condition aja.
45:28Nah, bergantung kita mau scope-nya sebesar apa,
45:31tapi kalau kita nggak mau pushing, ya udah ambil generic approach aja,
45:35udah pakai don't purify, itu udah common use case udah dihandel di sana.
45:39Mungkin sebagian besar kita bahkan nggak pernah temui itu case-nya si don't purify,
45:45tapi kan berarti ada orang di luar sana yang menganggap itu common use case-nya.
45:49Itu pilihan aja sih.
45:51Kalau memang performance segitu pentingnya dari security-nya,
45:54mungkin bisa scope-nya dikurangin, cukup hal-hal yang critical aja yang disanitize,
45:59mungkin bisa bikin regex sendiri.
46:02Berarti kalau misalkan kita ngomongin tadi product, apakah artinya
46:08kalau kita mikirin security dari awal berarti proses pengertiannya akan lebih panjang?
46:13Otomatis kan ya?
46:15Iya, sama kayak performance juga.
46:18Performance kan meskipun kita bilang, performance web accessibility,
46:21meskipun kita bilang itu bagian dari requirement product-nya,
46:25tapi faktanya ada effort yang harus dikerjakan.
46:28Ada effort tambahan.
46:29Iya, let's say accessibility nggak semua orang bahkan punya knowledge-nya disitu.
46:33Maksudnya kan ada learning curve-nya di awal ya.
46:35Kalaupun sudah tahu learning curve-nya, testing-nya juga butuh testing yang terpisah.
46:41Untuk tes accessibility-nya misalnya kita biasa tes pakai mouse doang,
46:45sekali-kali harus tes pakai keyboard-nya, atau harus tes pakai voice-over-nya.
46:51Biasanya pakai line 4.
46:53Itu kan nambah waktu ya, termasuk performance yang misalnya kita sangat confidence dengan coding-an kita.
46:59Ya udah kita coding biasa, tapi kan pada akhirnya kita harus measure hasilnya ya.
47:03Adakah part-part yang kita miss gitu?
47:06Adakah part-part yang temen kita miss yang kita nggak ngah bahwa itu masuk ke master-nya?
47:10Itu kan jadi ada effort tambahan.
47:12Security juga begitu, kita punya set standarnya.
47:15Tapi pada akhirnya kita juga perlu tes lagi apakah standar ini sudah benar-benar comply atau belum.
47:20Jadi pada akhirnya memang ada tambahan dari hal-hal yang kita ingin capai sih.
47:26Akan ada cost dalam bentuk tenaga, waktu, dan uang.
47:32Tenaga dan waktu.
47:33Karena misalnya kalau sudah punya standar, tentunya harus dibikin jadi sebuah pengecekan yang kayak DCI.
47:43Jadi security itu bagian salah satu yang di-check DCI.
47:47Performance juga salah satu yang di-check DCI.
47:51Jadi lama-lama, ujung-ujungnya untuk nge-push 10 request saja, tes-nya banyak dari linter.
47:59Jadi dari linter, security check, accessibility test, kemudian performance test, sampai end-to-end test.
48:09Akhirnya 1 PR bisa 45 menit.
48:12Itu juga harus dipikirin, balik bodalnya bagaimana.
48:17Soalnya apalagi kalau kita nge-moding di private, yang mana kadang kita kayak GitHub Action mungkin nggak punya free tier yang cukup buat private repository kita.
48:31Berarti kan butuh spawn server sendiri, nyiapin server sendiri untuk jalanin CI-CI tersebut.
48:37Jadi kalau pun itu beneficial, juga mesti dipertimbangkan apakah kita masih mampu bayarnya atau nggak.
48:44Kalau nggak mampu bayarnya, mungkin hal-hal yang nggak kritikal banget dijalani di CI, mungkin bisa ditarik lebih awal.
48:53Terpisah jadi end-to-end test yang terpisah aja apa?
48:56Atau rantannya lebih terpisah ini aja.
48:59Jadi kalau di CI kan berarti kondisinya kita commit dulu, nanti jalan di suatu server yang harus dibayar ya. Kadang-kadang kalau kita nggak mau bayar server CI-nya, ditarik ke depan tuh.
49:14Jadi developer aja yang suruh jalanin itu, jadi make sure dia jalanin satu hal sebelum commit misalnya.
49:22Jadi productivity-nya turun, tapi kan jadi karena nggak mau bayar cost-nya, jadi productivity-nya turun sekali.
49:31Yang paling aman kan kita biasanya kalau commit, ngejalanin pre-commit ya.
49:37Pake husky.
49:39Ya, pre-commit itu biasanya at least udah ngejalanin free tier sama ASL-nya.
49:44Nah kalau kita tahu itu sudah dijalani di lokal, maybe kita nggak perlu lagi di CI.
49:49Ya udah terasa aja dengan pre-commit itu, jadi itu bisa di-skip di CI-nya.
49:54Let's say testing, testing-nya apakah harus testing semuanya?
49:59Mungkin ada strategi kayak ada istilah testing effective changes aja.
50:06Jadi yang ditest itu yang perubahannya aja.
50:10Use case-use case yang terdampak dari perubahannya, compare to source-nya misalnya, compare sama master-nya gitu.
50:17Kalau compare sama master-nya, misalnya dia cuma satu file aja.
50:20Jadi instead jalanin semua file yang bisa jadi dalam satu project 300-400an testing itu, jalanin aja satu file yang effective aja.
50:30Nah itu ada tekniknya juga, sudah ada tekniknya.
50:34Mungkin berbeda-beda tergantung tooling pilihannya, tapi prinsipnya bisa dikerjakan.
50:42Sama kayak tadi ASL-en juga sepertinya bisa yang effective aja kayak pakai husky clean-stage-ed gitu-gitu dia bisa ngetest.
50:52Clean-stage ya, clean-stage-ed.
50:53Again sama file-file yang changes aja, file-file yang berubah aja.
50:58Nah mungkin bisa dipanggil situasi.
51:00Ada strategi satu lagi yang saya pakai, contohnya visual regression testing itu kan cukup costly ya visual regression testing.
51:08Pasti ya.
51:09Jadi daripada setiap PR harus di-check visual regression testing, akhirnya kita decide visual regression testing hanya dilakukan sebelum post-production.
51:21Jadi test terakhir aja, eh ternyata masih ada masalah, ya udah perbaiki aja dulu.
51:27Jadi cuma satu langkah sebelum production aja.
51:30Di Guma ini mas Ivan, bukan pre-production malah post-production.
51:37Jadi iya modelnya adalah, kalau ada apa-apa kita tahu at least 25 menit setelahnya, terus kalau ada apa-apa kita perbaiki dulu.
51:49Kadang-kadang kalau nunggu 25 menit untuk deploy, mungkin nggak, nggak gitu oke buat beberapa tim yang memang delivery-nya kencang, delivery-nya terlalu kencang.
52:04Iya. Jadi itu kadang CIA juga menarik ya bisa dicari approach yang cocok juga sama kondisi tim dan kondisi produk dan keuangan.
52:16Itu ngobrolin soal security, memang ada beberapa praktisys yang naruh security check-nya di CIA-nya.
52:26Itu yang free kayak di GitHub itu ada namanya codeql, itu ada free tiernya.
52:34Jadi teman-teman bisa pakai, dipasang di GitHub Action, itu dia akan nge-check kayak macem-macem kayaknya apa namanya?
52:44Dependensi ke-check juga sama dia, terus ada beberapa common pattern yang bisa terdeteksi sama dia. Ini kayak ini loh versi mini-nya dari kayak yang lebih expert kayak model sonar cube dan lain-lain.
53:06Oh iya, karena dia kan cukup baru ya codeql ya kayaknya baru beberapa tahun belakangan, terus nggak tahu adopsinya cukup bagus apa nggak, keliatannya kok banyak yang nge-lemenin.
53:18Ada juga beberapa vendor yang nge-check, bantu kita nge-check untuk open source produk yang kita pakai, library-library yang kita pakai.
53:26Contohnya yang kayak snike, misalnya snjk.io, jadi bisa bantu pakai CIA-nya mereka jalan untuk code analysis, bisa nge-detek dari package lock-nya kita.
53:44Versi-versi javascript package yang kita pakai, jika ada vulnerability atau high risk, mereka bisa tangkap dan bisa kasih tahu kita, jadi PR-nya nggak bisa dipot.
53:58Itu berbayar ya, tapi kayaknya biasanya suka ada free tier-nya deh.
54:02Ada free tier-nya ini.
54:03Kalau yang open source mungkin.
54:04Open source gratis dia suka ya.
54:05Kalau yang open source mungkin ya, kayaknya biasanya gitu.
54:08Kan biasanya kan kita nggak ngeh ya, karena deep down kita punya dependensi itu ada masalah gitu.
54:16Itu ini sih ya, banyak alternatif juga mungkin bisa explore juga, kayak tadi ada sonar cube.
54:22Sonar cube itu ada dua versi juga, ada yang bisa self-hosted, jadi kalau temen-temen nggak mau bayar sonarnya bisa install sendiri di server sendiri.
54:31Ada yang versi clock-nya juga, which is biasanya orang lebih milih bayar orang aja.
54:37Boleh ini salah, tapi yang paling tua.
54:39Iya, mirip juga.
54:42Ada banyak juga kayak code climate atau apa gitu.
54:45Terus di kantorku yang terakhir itu pakai namanya defect dojo.
54:49Ini versi open source-nya lah dari kayak sonar cube.
54:55Ini juga di install self-hosted gitu.
54:58Ini tampilannya masih ada cupu sih.
55:00Iya, kayaknya masih pakai bootstrap ala-ala tahun 2015.
55:08Tapi it works, it works.
55:12Lambat, tapi it works. Dan masih fiturnya comparable lah sama sonar cube.
55:19Dia bisa deteksi kayak, kan dia bisa dipasang di CI itu.
55:23Dia bisa deteksi kayak dependency yang updated, misalnya tiba-tiba dependency-nya kena CVS yang high risk misalnya.
55:35Itu bisa langsung diprevent di PR atau MR-nya.
55:41Terus ada yang common pattern juga yang kayak misalnya kayak tadi tuh di React,
55:46dia bisa tahu bahwa dangerously set inner HTML berpotensi XSS.
55:54Atau misalnya kita bikin regec, tapi regec-nya berpotensi bisa di DDoS.
56:00Kan umum banget ya regec kena DDoS tag ya.
56:03Nah itu dia bisa tahu dari static code kita.
56:06Itu static analysis semua ya?
56:09Iya, static analysis. Jadi cukup membantu lah.
56:12Dan memang kan butuh role tambahan ya.
56:16Karena cukup kompleks untuk ngedeteksi security, vulnerability gitu.
56:21Tapi sonar cube itu setelah aku ada ininya juga, ada linter gitu ya.
56:26Jadi bisa diturunin tuh naik ke langsung lokal developer-nya.
56:31Tapi nak suruh diriku nggak pernah pakai soalnya.
56:34Ini hardware template banget ya.
56:36Ini belinya di Temflores ini, admin LTE.
56:44Gue pernah pakai ini template.
56:48Karena dia kan open source ya, jadi ya sudah lah ya.
56:52Orang-orang security ini kan emang nggak peduli sama STPI-nya.
56:56Yang penting nggak ada tampilan.
56:59Typical kayak team data juga. Mereka punya banyak tooling loh.
57:03Diriku sempat bantuin team data juga.
57:06Team data tuh banyak banget tooling-nya.
57:08Sama kayak team security juga mungkin punya banyak tooling dan punya banyak dashboard-nya.
57:11Jadi mereka mungkin nyobain 1-2 tooling yang harus mereka coba-cobain.
57:17Yang mungkin sebenarnya secara fungsi saling beririsan gitu ya.
57:21Masih pakai jQuery nih template ini.
57:24Ya itu. Terus ada alternative di GitHub juga kita bisa aktifin.
57:30Dependabot atau kalau itu bawaan dari GitHub-nya, tinggal diaktifin aja.
57:41Atau third party dulu tuh ada namanya Renovate.
57:46Ini mirip sama Dependabot. Sebelum Dependabot ada tuh namanya Renovate.
57:50Itu akan directly ngasih... apa namanya?
57:56Yes, bikin pull request ketika ada update. Terutama yang kena-kena ini ya.
58:04Kena-kena CVE ya.
58:06Jadi ada potensi security whole.
58:11Dependabot ini bagus kok dia bisa kita customize, bisa kita configure, bisa kita combine di grouping.
58:18Tapi ini juga ini ya. Pernah baca artikelnya ini nggak ya? Artikelnya Dan Abramov?
58:26Belum. Banyak artikelnya mana?
58:28Tapi kayaknya coba, kan Dan udah jarang lagi coba cari Mas Riza dan Abramov tuh. Apa sih overreacted apa gitu ya?
58:35Overreacted ya?
58:36Iya harusnya ada. Gue lupa apa ya. Nah itu NPM audit broken by design.
58:43Itu tahun 2021. Basically LDR-nya adalah kan dia maintainer React nih.
58:52Dan somehow React kan dipake oleh banyak library.
58:58Sebagai dependency ya.
59:00Dependency itu kan next step ya. Chaining gitu ya.
59:04Nah kalau yang bawah kena CVE itu naik ke atas kena semua tuh.
59:08Oh gitu. Yang atas-atasnya di mark juga.
59:11Iya dong.
59:13Kita require React. Ternyata React require small library.
59:19Nah small library-nya kena CVE. Gimana caranya kita perbaiki?
59:22Kan kita nggak import library kecil ini. Kita cuma import React.
59:27Oh tapi saat kita install React, yang dependency itu.
59:34Kalau punya team security biasanya itu par noh kalau ngeliat begini.
59:41Jadi apapun CVE-nya mau di lokasinya sedalam apapun library-nya itu maunya diperbaiki.
59:50Karena tulisannya kritikal. Ada 7 kritikal. Kan ngeri ya?
59:55Kayaknya ngeri.
59:57Ini masih high. Ada yang kritikal Mas.
1:00:01Nah itu juga kita jadi mesti ngerti approach-nya tuh.
1:00:05Bahwa let's say kita punya dependency React.
1:00:09Tapi ternyata dependency-dependency-nya React yang kena.
1:00:12Itu kan ada triknya ya gimana untuk bisa naikin dependency-dependency-nya React.
1:00:19Tanpa kita nunggu React-nya naikin dependency-dependency yang dipake gitu.
1:00:23Kan kalau kita mau tutup mata ya udah tungguin React naikin aja.
1:00:27Tapi emang kita pernah denger React naikin versi untuk bump dependency kecil yang dipake?
1:00:35Itu hampir jarang hampir.
1:00:37Bahkan approach yang diambil kayak Next.js itu dia compile library-library kecilnya.
1:00:43Let's say dia pakai slugify.
1:00:45Instead of dia require dari npm-nya langsung.
1:00:49Kayaknya di compile, ditaro di langsung kodenya Next.js.
1:00:59Jadi ketika kita require Next.js bisa jadi package lock-nya nggak sedalem ketika kita bikin library sendiri.
1:01:06Yang biasanya kita require banyak.
1:01:08Tapi kan sebenarnya dia tetap pake ya.
1:01:11Jadi somehow kalau ada report, kita nunggu team Next.js-nya compile versi barunya.
1:01:18Tapi approach dari sisi kita jadi sebenarnya nggak tahu itu kalau ada npm-nya di...
1:01:27Oh berarti kayak npm di curasi dulu ya sama mereka ya?
1:01:30Ya kayak di bikin binary sendiri jadi sama mereka.
1:01:34Gak lewat npm.
1:01:37Jadi ini loh, jadi debatable apakah cara yang diambil sama Next.js adalah?
1:01:43Memang seharusnya ya ketika kita deliver satu library ya?
1:01:47Atau apakah npm yang desainnya yang nggak oke aja gitu?
1:01:53Kayaknya sih yang kedua ya.
1:01:59Karena yang bikinnya pun udah kabur bikin produk baru ganti deh.
1:02:06Kayaknya yang kedua nggak bisa perbaiki kayaknya.
1:02:10Udah bikin baru aja deh.
1:02:14Tapi jadinya at least dari sisi kita sebagai web developer,
1:02:21kita mesti tahu nih misalnya kita require library A
1:02:26bagaimana caranya kita ingin naikin dependency dari library A.
1:02:30Makanya kalau di URN itu ada resolution dan lain-lain itu
1:02:35kita mesti tahu cara pake resolution itu gimana.
1:02:38Itu kayak kita naikin dependency kita tanpa harus nunggu
1:02:44dependency utama yang kita pake naikin versinya.
1:02:47Tapi jadinya kita...
1:02:50Betul sekali, itu maksa kan.
1:02:52Maksa yang dibawahnya dinaikin.
1:02:54Tapi jadinya sebenarnya kita jalan di jurang tuh.
1:02:58Karena kita naikin paksa dependency yang
1:03:02mungkin belum di expect berjalan dengan baik sama
1:03:06dependency utama yang kita pake.
1:03:09Nah tapi ya itu pilihan aja.
1:03:12Kalau kita sangat peduli dengan hal itu,
1:03:15mungkin pake semacam resolution atau apa itu
1:03:18itu mungkin membantu untuk resolve
1:03:20CV-CV yang nggak direct dependency kita.
1:03:24Nah tapi just in case kita nggak mau terlalu peduli dengan itu,
1:03:29jadi aku sih ngerasa mungkin ya
1:03:32mengabaikan beberapa hal itu mungkin tidak apa-apa.
1:03:35Tapi ketika ada tim IT sec di company-mu,
1:03:43itu biasanya akan di-enforce selalu.
1:03:45Ini ada security, ada security bahkan di beberapa tool
1:03:49kayak SonarCube atau tadi apa namanya ya.
1:03:53Dan lain-lain lah ya.
1:03:55Dan Defect Dojo itu mereka kayak ngasih ranking gitu.
1:03:59Jadi let's say repository A,
1:04:05dependency-nya udah baru semua itu dia bisa dapet A gitu misalnya.
1:04:09Dapet B, dapet C, dapet D, kayak ada rankingnya gitu.
1:04:12Tergantung seberapa banyak yang kita nggak kerjain.
1:04:15Jadi IT sec sebenarnya lebih mudah tuh.
1:04:18Karena mereka udah lihat dashboard,
1:04:20yang udah ada rankingnya udah sikat aja di yang DD.
1:04:22Nggak boleh deploy ke production misalnya.
1:04:25Sangat-sangat-sangat berbantu oleh co-stores begitu.
1:04:28Jadi kalau memang ada timnya yang aware di sana,
1:04:33yang mau nggak mau emang kita mesti tahu langkah-langkanya
1:04:37untuk nge-solve hal-hal yang mungkin agak tricky-tricky nih.
1:04:41Yang nggak kita pake langsung kah, atau hal-hal lainnya.
1:04:46Tapi just in case nggak ada IT sec-nya,
1:04:49mungkin kita cukup peduli dengan dependency utama aja lah.
1:04:53Biasa kalau dev dependency saya cuekin,
1:04:56kalau memang nggak penting-penting amat projeknya,
1:04:58kalau misalnya projek pribadi,
1:05:00dev dependency ya sudahlah, gitu.
1:05:02Sama kayak yang di-complain sama Bungdan tadi, Mas Ivan.
1:05:06Jadi ada beberapa CVE yang katanya, let's say...
1:05:10Denial of service.
1:05:12Iya, tapi itu berdampak terhadap library yang kita jalanin di lokal kita dengan...
1:05:20Browser list contohnya, browser list.
1:05:23Kan browser list nggak bakal sampai ke public.
1:05:27Nggak di-compile.
1:05:29Iya.
1:05:31Jadi mungkin dicari aja yang...
1:05:37Sesuai kos dan waktu, tetapi juga tetap harus aman.
1:05:41Tampaknya masih oke, tapi juga effortnya mungkin masih ketakar.
1:05:45Nah, trick-ku ya biasanya ya,
1:05:49biar hal-hal begini itu nggak memberatkan ya.
1:05:53Biasanya point pertama adalah being effective di kerjaan musahari-hari, gitu.
1:06:03Jadi kalau kita bisa deliver kerjaan kita dengan tepat waktu,
1:06:07atau bahkan ahead of timeline, gitu ya.
1:06:10Itu ngerjain hal-hal begini itu nggak sulit sebenarnya,
1:06:13karena kita punya banyak waktu luang, guys.
1:06:15Ada waktunya.
1:06:17Misalnya ada lah.
1:06:19Betul, sekali.
1:06:21Tapi ini akan jadi problem kalau kerjaan kita ada keseret-ceret terus, gitu.
1:06:25Misalnya yang ngasih deadline nggak ngotak lah,
1:06:28atau kitanya nggak bisa ngejar deadline-nya, gitu.
1:06:34Misalnya yang nggak bisa ngejar deadline kan bisa jadi salah kita di estimation ininya ya.
1:06:40Iya, salah estimasi ya.
1:06:42Masa kita bikin estimasi, kita nggak expect.
1:06:48Ya, tapi juga semakin lama kan pada akhirnya kita semakin ngerti ya dengan produk kita ya.
1:06:57Yang hasil akhirnya, outcome-nya adalah secara efektivitas juga makin oke tuh.
1:07:03Jadi yang tadinya mungkin ngerjain satu halaman butuh 5 hari,
1:07:07makin lama let's say setahun di perusahaan tersebut,
1:07:11nggak sampai 2 hari selesai.
1:07:14Nah, dengan makin experience kita di bidang kita sendiri,
1:07:17itu ngerjain hal-hal gini makin jadi kayak hal yang ya sudahlah,
1:07:21gue kerjain aja.
1:07:23Iya, betul, betul, betul.
1:07:25Jadi ngerjain hal-hal kayak performance, accessibility, security,
1:07:30itu akan jadi hal yang nggak gitu memberatkan
1:07:33ketika kita perform juga di pekerjaan utama kita, gitu.
1:07:37Tapi itu akan jadi beban yang berat banget,
1:07:41kalau ke pekerjaan utama kita aja nggak pernah beres, gitu.
1:07:44Keter-teran ya, kalau keter-teran ya, buru-buru mikirin performance dan security.
1:07:48Iya, jadi salah satu yang harus diinfestasi.
1:07:51Salah satu yang harus diinfestasi ketika, sorry, dikit ya.
1:07:56Oh iya, Mas Irfan dulu kali.
1:07:59Iya, dikit ya, Mas Irfan ya.
1:08:01Jadi dari aku yang saat ini baru join ke company baru,
1:08:05biasanya yang pertama tak kejar buat diinfestasi adalah
1:08:08getting context-nya sebanyak mungkin
1:08:11biar bisa produktif di kerjaanku secepat mungkin, gitu.
1:08:15Iya, jadi akhirnya,
1:08:17gue bisa ngerjain banyak ideas gue di kerjaan gue, gitu.
1:08:23Termasuk misalnya company gue misalnya belum gitu aware soal performance,
1:08:27gue bisa tambahin kerjaan itu bahkan ketika hal itu belum disuruh, gitu.
1:08:31Belum di-enforce, gitu.
1:08:33Tapi kalau nunggu di-enforce itu udah mati-matian kita belum ready.
1:08:38Secara knowledge bahkan mungkin kita belum ada,
1:08:41tapi udah diharuskan, itu sulit.
1:08:44Tapi kalau kayak kita bisa playing around di awal ya,
1:08:47let's say kita udah mulai coba-coba security,
1:08:50coba-coba tooling-nya, gitu.
1:08:52Itu rasanya akan lebih mudah ya.
1:08:55Jadi kalau pindah ke company baru,
1:08:57buru-buru cepet biar jadi engineer yang produktif, gitu.
1:09:00Itu akan menolong banyak hal.
1:09:03Menarik, menarik.
1:09:05Jadi kayak punya stock senjata sendiri, gitu ya.
1:09:10Kayak punya stock cheat sheet sendiri.
1:09:14Saya punya pendangan yang sedikit berbeda.
1:09:18Contohnya begini nih,
1:09:20kalau misalnya kayak security atau performance deh,
1:09:24security namanya by design,
1:09:26bukannya dalam pengambilan keputusan saat kita,
1:09:29sebelum implementasi kita udah memikirkan,
1:09:32ini harus performance by design dan secure by design.
1:09:36Jadi bukan kayak, maksudnya,
1:09:39selagi kita membangunnya,
1:09:41itu sudah wajib memikirkan security dan performance.
1:09:46Kalau memang itu yang di-enforce,
1:09:50bisa dibilang enforced lah, di-enforce dari atas.
1:09:53- Iguidalnya seperti itu. - Karena misalnya gini,
1:09:57kalau misalnya kayak perbaikan performance atau perbaikan security,
1:10:00kalau sudah diujung dan baru mau diperbaiki kebelakang,
1:10:04itu lebih berat sebenarnya.
1:10:07Itu pendanaan saya.
1:10:10Itu common sense, tapi praktikalnya sulit.
1:10:13Ya, idealnya tidak.
1:10:15Ya, ngomong aja hal yang sudah dekat sama kita lah,
1:10:19performance gitu ya.
1:10:20Kan kita selalu ngomong performance by design, gitu.
1:10:23Kalau bisa performance, ya emang sudah ada di kepala kita,
1:10:26sudah ada di tangan kita ketika kita coding pertama kali, gitu.
1:10:31Jadi sudah kebayang nanti akan jadi apa.
1:10:33Tapi praktiknya gimana?
1:10:34Kan selalu back effort kerjaannya, kan.
1:10:37Kerjaannya kayak sampai production dulu, dipest, balik lagi, gitu loh.
1:10:41Jadi kerjaannya maju-mundur, maju-mundur, gitu.
1:10:44Security pun kadang maunya begitu ya.
1:10:46Let's say ada security checklist.
1:10:49Tapi faktanya security checklist itu seringnya di-running
1:10:52kayak seminggu sebelum production, atau dua minggu sebelum production.
1:10:56Which mungkin kalau pun ada sesuatu,
1:10:58gue udah nggak punya waktu cukup untuk fix itu.
1:11:01Karena sudah habis waktunya di awal.
1:11:06Tidak bagus, tapi kurang realistis.
1:11:11Lebih praktis, lebih praktis.
1:11:14Iya, maksudnya kalau kita ngobrolin kayak,
1:11:16"Wih, harusnya memang begitu."
1:11:18Itu inilah utopia yang harus dikejar lah, ya.
1:11:22Harusnya naranya tetap benar-benar masif banget.
1:11:24Dan praktiknya developer yang kerja di konteks sempat kerja,
1:11:28kerjaannya kan banyak.
1:11:30Tapi itu juga bisa jadi ini ya.
1:11:31Jadi salah satu ide kita buat di company yang dimanapun kita kerja sekarang.
1:11:36Bahwa itu memang topik yang mungkin bisa dibawa,
1:11:39itu disampaikan ke hal yang lebih ramai, gitu.
1:11:43Bahwa urusan performance, security, accessibility itu
1:11:47akan lebih ringan kalau kita bisa ngobrolin itu di depan.
1:11:50Atau kita bisa desain itu dari awal.
1:11:53Daripada nunggu kecebur.
1:11:55Ya.
1:11:56Biasanya dari sasi kayak, ya.
1:11:58Dali ke tasks work-press tadi kan, contoh work-press tadi.
1:12:01Kalau bahasa ininya jadi vicious cycle.
1:12:04Jadi kalau misalnya kita mengignore dari awal,
1:12:07terus udah deliver, baru diperbaiki,
1:12:10akhirnya kerjaan yang belum rampung kemarin tambah lagi ke belakang.
1:12:14Mundur lagi ya.
1:12:15Tambah lagi kita punya kerjaan yang feature yang selanjutnya.
1:12:19Dan akhirnya lama-lama kita jadi kehilangan waktu yang...
1:12:24Ada ini lah, ada oport ini tuh untuk jadi advocate lah.
1:12:27Jadi mudah-mudahan teman-teman yang dengerin jadi advocate di tempatnya masing-masing.
1:12:33Masa kalau jadi lambat, nggak deploy-deploy,
1:12:37kan anggota tim yang lain jadi kayak trauma kan.
1:12:40Aduh, ribet. Jadi kayak apa? Mengasosiasikan itu sebagai hal yang ngereputin semua.
1:12:46- Menhabat ya. - Terlalu istim.
1:12:48Kayak traumatis lah. Yang nggak traumatis, cuman itu negatif lah.
1:12:52Jadi kacau semua kan.
1:12:54- Tapi biasanya sih hal-hal begitu sebenarnya pada akhirnya pasti bisa dinego ya.
1:13:00Kayak security checklist pun, ya kita berusaha comply sebanyak mungkin.
1:13:04Tapi ketika produknya misalnya udah ada ceremony release yang sudah dijadwalkan di tanggal berapa misalnya.
1:13:11- Itu susah ya. - Ya sudahlah ya.
1:13:14Deploy dulu, nanti kita bareng-bareng kerjain.
1:13:16Untuk kita tahu sebenarnya problemnya di mana, cuman kita nggak punya waktu aja untuk fix tersebut.
1:13:22Nah, itu kan sama juga performance ya.
1:13:24Kadang-kadang kita tahu aja itu nggak...
1:13:27Tapi kayaknya gue nggak punya waktu atau nggak punya kesempatan untuk deep dive lebih banyak gitu.
1:13:35Karena beberapa things kan memang perlu digali dulu tuh untuk bisa proper tuh kayak di performance apalagi.
1:13:43Kadang-kadang satu hal, kompromit ya.
1:13:45Kita tahu prinsipnya kalau bikin image ya harus lazy load.
1:13:52Karena nggak punya waktu ya udah pake native lazy load aja dulu, pake loading lazy dulu.
1:13:57Padahal di common approachnya kadang mereka pake intersection observer lah, ada-ada tambahan kode.
1:14:04Tapi karena nggak punya waktu, udah passing ke platform aja dulu.
1:14:08Bismillah dulu nanti tambahin sisanya gitu.
1:14:12- Tapi loading lazy sudah support. - Sudah dari common banget ya.
1:14:16Sudah baseline, sudah baseline. Sudah semuanya pake.
1:14:20Oke, ini kita udah hampir setengah sebelas.
1:14:24- Jadi mungkin satu dulu ya. Jadi malam ini kayaknya baru... - Kita baru XSS doang.
1:14:30Belum escape injection, cross-site forgery.
1:14:34Karena kita larinya ke CICD sama pipeline.
1:14:40Tapi itu penting juga. Bisa ada security checks juga di sana terjadi.
1:14:47Apa minggu depan kita omongin lagi tentang escape injection?
1:14:51Bisa nanti kita lihat ya jadwal ya.
1:14:54Mudah-mudahan nanti bisa ini, Mas Riza, bisa mengundang teman-teman ya.
1:14:59Memang oke di security. Karena gue percaya mereka lebih kompetent dan mungkin bisa mengarahkan kita ke arah yang tepat.
1:15:08- Ada banyak lah bisa dicolek-colek. - Ada banyak lagi kita ngobrol-ngobrol.
1:15:12- Kita colek-colek. - Pengen dengar perspektifnya orang yang emang spesialisenya di...
1:15:17- Betul, sekali. - Bukan kita yang perspektif.
1:15:21- Ya beberapa yang Kak tulis tuh seperti ini cukup aktif di X2.
1:15:26Jadi boleh lagi kelek-kelek. Jadwalkan satu buat kapan, satu buat kapan.
1:15:30Karena ini topiknya labor ya.
1:15:32- Betul-betul. - Jadi kita bisa bahas security 2, security 3, security 4.
1:15:37- Banyak ini. Kayaknya topik satu malam, satu episode aja cukup ini. Lebih dari cukup bisa sampe berapa bulan ini.
1:15:43Jadi sebelum apa? Gimana Ivan?
1:15:47- Ada satu mantra juga soal security yang pernah saya baca tadi mana.
1:15:52Tapi selalu terngiang, keamanan itu berbanding terbalik dengan kenyamanan.
1:15:58- Kenyamanan. Yes. - Tetapi keamanan itu untuk keselamatan.
1:16:03- Hei, hei, hei. - Kasi tepuk tangan.
1:16:08- Tepuk tangan dulu dong. Mana sound effect-nya?
1:16:11Tapi bukan saya quote-nya, saya baca dimana.
1:16:20- Saya juga punya satu tools yang baru ingat. Sebenarnya ini tools udah cukup lama tau.
1:16:27Kan temen-temen tau ya, kayak co-pilot. Nah ini buatannya EWS, namanya code risk part.
1:16:33Ini kan AI code completion juga kan ya.
1:16:36Tapi kelebihannya dia adalah dia punya security scan.
1:16:42Jadi bisa dipakai freemium ya, freemium.
1:16:47Jadi bisa dipakai, pakainya itu dia ada ini, ada tombolnya, tinggal klik aja run security scan.
1:16:53Nanti dia akan lihat kode kita ada vulnerability atau enggak.
1:16:58- Co-pilot bisa nggak? - Butuh ini kali, additional prompt.
1:17:04- Butuh additional, iya. Nah ini kayak misalkan...
1:17:07- Weh, abses skin dimasukin di info. - Eh, contoh.
1:17:12- Weh, ini lucu.
1:17:15- Nah lucu-lucu lho Mas Sipal, nanti ada yang beneran melakukan hal itu lho.
1:17:22Aduh, iya juga ya.
1:17:26- Iya, jadi ini salah satu kelebihannya adalah dia punya fitur itu.
1:17:30Jadi mungkin kalau temen-temen bingung mau mulai dari mana nih security ya,
1:17:34bisa pakai tools-tools yang udah kita sebutkan tadi ya.
1:17:37Kalau mau tau lebih lanjut bisa cek di komentar.
1:17:40Oke, nah sebelum mudahannya ada satu pertanyaan nih, saya nggak tahu kita bisa jawab atau nggak ya.
1:17:46Silakan baca aja. - Saya jelas nggak bisa sih.
1:17:48- Bisa jawab atau nggak?
1:17:52Konteks WAF, WAF itu apa? - Firewall.
1:17:56Web Application Firewall. - Firewall.
1:17:59- Oke. Masih oke untuk kita menggunakan WAF sebagai primary defense,
1:18:03atau kita harus mulai beri kesolusi yang lain?
1:18:06Ada pendapat?
1:18:10- Enaknya sih kalau WAF biasanya udah integrated ya sama cloud computing-nya ya.
1:18:16Kayak di AWS ada, di GCP ada, tinggal pakai aja.
1:18:20Jadi integrated sama cloud kita, jadi gampang buat di set up.
1:18:25At least biasanya kita bisa nge-prevent hal-hal yang common lah.
1:18:30Misalnya kayak kita bisa kasih red limiter di sana.
1:18:33Let's say satu orang atau satu IP atau satu user ID,
1:18:38nggak boleh request lebih dari 300 dalam berapa waktu gitu.
1:18:44At least itu kita bisa kasih red limiter.
1:18:46Terus biasanya di WAF juga kita bisa blocking-blocking by pattern tuh,
1:18:51by user agent lah, by IP lah, just in case tiba-tiba kita kena di DOS,
1:18:58kita bisa deteksi aja apakah IP-nya generated atau IP-nya fix dari suatu tempat tuh.
1:19:06Ya kalau fix dari suatu tempat juga bisa di-double check dulu sih sebelum nge-block.
1:19:10Karena beberapa IP yang biasanya terlihat sama WAF itu kadang-kadang IP bukan dari kliennya,
1:19:16tapi kayak operator-nya.
1:19:18Kalau nge-block operator-nya ya semuanya kena.
1:19:22Kalau yang banyak pulse ya.
1:19:24Oh maksudnya NAT ya?
1:19:25NAT, kayak satu area ya.
1:19:28Atau dari operator ini ya kadang-kadang operator si internet-nya atau apa gitu, takutnya gitu.
1:19:35Jadi dilihat-lihat lagi.
1:19:37Just in case kalau yakin banget beberapa IP memang tidak wajar,
1:19:43enaknya bisa cepat di-block tanpa banyak can-sin-cong deploy sana-deploy sini ya.
1:19:49Jadi itu adalah kayak pertahanan paling gampang lah.
1:19:53Kita nggak perlu ngutang-atik di banyak tempat bisa di-block.
1:19:57Tapi ya tentu saja security itu kadang layer-layer juga ya.
1:20:00Misalnya ya kayak di-block layer tambahin lagi kayak capture-nya, tambahin hal lain lagi yang bisa nolong.
1:20:08Jadi mungkin bisa kombinasi dengan tools lain.
1:20:12Tapi apakah WAF perlu kalau ngelihat beberapa keperluan tersebut
1:20:16kayak Red Limiter, DDoS Attack lah buat basic-nya sih rasanya masih perlu ya.
1:20:22Perlu ya.
1:20:24Dan sudah cukup ya jadi primary defense berarti ya?
1:20:28Yang first layer kan?
1:20:30Yang main lain.
1:20:32Yang main mental lah ya.
1:20:34Ada juga kasus-kasus kayak dengan WAF bisa kita stop malicious code injection juga bisa.
1:20:44Jadi kalau mereka HTTP pose dengan pattern tertentu nggak bisa.
1:20:50Kalau DDoS tadi sudah disampaikan Mas Ipan.
1:20:54Ada juga dengan pakai WAF kita juga bisa untuk nge-setting different zone.
1:21:04Jadi kalau misalnya admin area hanya bisa di-assess oleh IP tertentu saja.
1:21:10Contohnya hanya pakai IP proxy.
1:21:12Jadi benar-benar hanya company proxy aja yang bisa masuk.
1:21:17Itu juga pakai WAF.
1:21:19Beberapa WAF tuh sekarang sudah pinter juga.
1:21:24Mas Ipan sekarang udah kayak ada semacam AI atau ML-nya gitu loh.
1:21:27Jadi mungkin patternnya nggak lagi regex atau yang traditional.
1:21:33Bisa menyesuaikan.
1:21:37Amazon kan AOS punya saya lupa namanya.
1:21:44Antivirus kan biasa juga di WAF kan. Jalannya di Node.
1:21:49Kalau misalnya kayak company enterprise dan mereka punya antivirus.
1:21:54Sebelum mengakses sebuah situs mereka ada antivirusnya dulu.
1:22:02Oke semoga menjawab ya pertanyaannya ya.
1:22:09Kalau gitu berarti kita udahan dulu karena udah hampir.
1:22:13Udah secepat amat ya.
1:22:15Nanti susah bangun sahur nih.
1:22:18Atau kita lanjut sampai sahur.
1:22:21Mas Ipan jam kerjanya SGT atau Jakarta?
1:22:31Singap atau WIB?
1:22:33Ada sejam.
1:22:35Tapi kan bisa jadi 9 sampai jam 5.
1:22:41Terima kasih banyak buat temen-temen buat semuanya.
1:22:44Terima kasih banyak juga buat Mas Irfan.
1:22:47Terima kasih banyak buat teman-teman buat semuanya.
1:22:50Terima kasih banyak buat teman-teman buat semuanya.
1:22:53Terima kasih banyak buat teman-teman buat semuanya.
1:22:56Terima kasih banyak buat teman-teman buat semuanya.
1:22:59Terima kasih banyak buat teman-teman buat semuanya.
1:23:02Terima kasih banyak buat teman-teman buat semuanya.
1:23:05Terima kasih banyak buat teman-teman buat semuanya.
1:23:08Terima kasih banyak buat teman-teman buat semuanya.
1:23:10Terima kasih banyak buat teman-teman buat semuanya.
1:23:13Terima kasih banyak buat teman-teman buat semuanya.
1:23:16Terima kasih banyak buat teman-teman buat semuanya.
1:23:19Terima kasih banyak buat teman-teman buat semuanya.
1:23:22Terima kasih banyak buat teman-teman buat semuanya.
1:23:25Terima kasih banyak buat teman-teman buat semuanya.
1:23:28Terima kasih banyak buat teman-teman buat semuanya.
1:23:31Terima kasih banyak buat teman-teman buat semuanya.
Suka episode ini?
Langganan untuk update episode terbaru setiap Selasa malam!
Episode Terkait
21 Jul 2025
Bedah Situs meutia.net - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #NgobrolinWEB! Malam ini kita akan membedah situs yang disubmit oleh salah satu penonton ki...
13 Mei 2025
Web Performance Update - Ngobrolin WEB
Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. ...
8 Apr 2025
Bedah Situs - Ngobrolin WEB
Kali ini, kita akan membedah situs baru, terutama seputar performa web. Mulai dari Core Web Vitals (LCP, CLS, INP) hingg...