Pada Stack Overflow, saya melihat banyak kode PHP dalam pertanyaan dan jawaban yang memiliki pertanyaan MySQL yang sangat rentan terhadap serangan injeksi SQL, meskipun solusi dasar tersedia secara luas selama lebih dari satu dekade.
Apakah ada alasan mengapa jenis potongan kode ini masih digunakan saat ini?
Jawaban:
Saya pikir itu sebagian besar karena a) ketidaktahuan b) kemalasan. Pemula biasanya tidak tahu banyak tentang injeksi sql, dan bahkan ketika mereka mendengarnya, mereka mengabaikannya karena itu jauh lebih sederhana dan lebih mudah untuk kode seperti itu.
sumber
PHP sengaja membuatnya sangat, sangat mudah bagi orang yang tahu sedikit untuk membuat halaman web dinamis yang bermanfaat. Ini berarti bahwa PHP akan menarik banyak pemula, yang menciptakan sesuatu yang bermanfaat, belajar dari contoh-contoh lain yang bermanfaat, dan berbalik untuk mengajar orang lain bagaimana melakukan hal yang keren dan bermanfaat ini. Hasilnya adalah banyak kode buruk, dan pasokan programmer yang tidak tahu yang lebih baik.
Itu hanya membuat segalanya lebih buruk bahwa sebagian besar programmer yang kompeten tidak ingin melakukan apa pun dengan PHP. Ini mengurangi basis orang yang berpengalaman yang mau mengajar orang lain dengan lebih baik. Tetapi mengapa mereka menghindari PHP? Baik untuk kombinasi faktor. Sebagian mereka tidak suka berurusan dengan kutil bahasa. Dan sebagian karena mereka lebih suka bekerja dengan kode yang baik, dan tidak ada banyak PHP yang bagus di luar sana.
Konstelasi masalah yang tepat ini digunakan untuk menimbulkan Perl. Sebagai contoh yang cemerlang, perhatikan kasus Matt Wright, seorang remaja yang antusias yang ingin menyediakan banyak skrip CGI yang bermanfaat, terdokumentasi dengan baik, dan mudah dipasang pada 1990-an. Sayangnya dia tidak mengerti apa-apa tentang keamanan, dan juga orang-orang yang ingin menggunakan barang-barangnya. Hasilnya adalah Arsip Arsip Matt Wright, yang merupakan aliran masalah keamanan tanpa akhir untuk skrip CGI awal. Meskipun ada upaya seperti http://www.scriptarchive.com/nms.html , masalahnya tidak membaik untuk Perl sampai penyedia hosting berbagi membuat PHP lebih nyaman daripada yang lainnya. Itu menyebabkan masalah pindah dari Perl ke PHP.
sumber
Sayangnya ada ton dari lebih dari yang buruk tutorial PHP di luar sana dan beberapa buku PHP yang lebih tua juga mengisap memberitahu orang-orang untuk menulis kode yang tepat (tidak menggunakan register_globals dll).
Selain itu, dengan
magic_quotes_gpc
diaktifkan di masa lalu, orang tidak peduli untuk melarikan diri karena "itu hanya berhasil".sumber
Secara pribadi, saya percaya PHP mudah digunakan, jadi tentu saja itu mudah disalahgunakan.
sumber
Sebagai manusia, dan seorang programmer, saya merasa sangat mudah untuk melakukan kesalahan, dan mengabaikan hal-hal tertentu, terutama ketika terdesak waktu.
Mudah, dan mungkin terlalu menggoda, untuk menyalahkan bahasa tertentu, karena terlalu mudah diakses untuk kebaikannya sendiri. Tapi itu akan menutupi masalah yang lebih besar dari falibilitas manusia, terlepas dari bahasa yang dipilih untuk diprogramkan.
Memang, kita sudah jauh sejak bahasa assembly, dan saya pikir saya akan jauh lebih produktif pemrograman dalam bahasa yang lebih modern, seperti PHP, Python, Ruby, atau Java.
PHP (dan bahasa skrip lain) sebenarnya telah menurunkan penghalang untuk masuk. Itu mungkin berarti bahwa lebih banyak pendatang baru dalam pemrograman mencoba PHP terlebih dahulu. Tapi itu tentu saja tidak juga berarti bahwa semua programmer PHP entah bagaimana kurang berkualitas, atau kurang mampu belajar dari kesalahan mereka daripada programmer dari bahasa lain.
Rasmus Lerdorf menciptakan PHP dalam bentuk aslinya pada tahun 1994, telah berevolusi sejak saat itu. Dalam inkarnasinya yang paling modern, ia mendukung pemrograman berorientasi objek, serta kerangka kerja yang luar biasa, seperti Symfony. PHP sebagai bahasa telah terbebas dari kendala aslinya, dan telah berkembang untuk menawarkan fleksibilitas besar dalam bagaimana pemrogram dapat memilih untuk menggunakannya. Anda dapat menggunakannya untuk membuat skrip 9.000 kode spaghetti, atau Anda dapat menggunakannya dalam konteks kerangka MVC modern, seperti Symfony: itu pilihan Anda!
Saya sangat curiga bahwa kerentanan keamanan tidak terbatas pada satu bahasa saja. Sangat menggoda untuk menghapus semua pemrogram PHP yang entah bagaimana kurang mampu, atau lebih rentan untuk menulis kode tidak aman. Tetapi saya bertanya-tanya berapa banyak dari itu bias bahasa, dan seberapa banyak itu fakta?
sumber
Saya pikir bagian dari masalahnya adalah orang-orang yang hanya menyalin kode tanpa repot-repot belajar apa yang mereka lakukan, tetapi benar-benar dalam pikiran saya cara kita mengajarkan porgamnming rusak dan itu adalah salah satu alasan mengapa ada begitu banyak kode buruk. Kami mengajarkan sintaks di luar konteks dan para pemula tidak tahu kapan harus menggunakan sesuatu dan kapan tidak atau masalah apa yang ingin diselesaikan oleh sintaks dan masalah apa yang tidak ingin dipecahkan. JADI mereka menggunakan palu ketika kunci pas akan menjadi alat yang lebih baik.
Jadi sebagai contoh alih-alih mengajar hanya sintaks, Anda mengatur kursus seperti (Jelas akan ada lebih banyak langkah, ini hanya contoh dasar membangun dari masalah dasar ke masalah yang lebih kompleks daripada hanya mengajar sintaksis):
sumber
Saya pikir Anda akan menemukan jumlah contoh MS SQL + ASP / ASP.NET yang sama yang rentan.
Saya merasakan masalah ini sebagian berasal dari kenyataan bahwa ketika Anda mencoba mengajarkan sesuatu, katakanlah memfilter data menggunakan klausa WHERE, maka Anda benar-benar tidak ingin mengacaukan contoh Anda dengan keluar dari string kueri dengan benar atau menggunakan perintah parametris.
Saya telah melatih pengembang selama bertahun-tahun dan saya bisa berempati dengan orang-orang yang menulis kode mengerikan dalam tutorial. Terkadang itulah yang paling mudah dipahami. Namun, di samping saya selalu menunjukkan kode yang rentan dan membuatnya menjadi topik sampingan yang menarik.
sumber
Penulis asli PHP, Rasmus Lerdorf , dalam entri blognya yang terkenal menganjurkan pengembangan "tanpa kerangka" . Meskipun untuk query SQL ia menggunakan PDO, jadi tidak ada risiko injeksi SQL. Masih cukup jelek dan usang dibandingkan dengan kerangka kerja MVC modern dengan lapisan ORM.
sumber
Anda bisa menyalahkan praktik buruk ini di PHP itu sendiri. Versi lama PHP (hingga tahun 2006) akan keluar dari semua variabel input GET dan POST sehingga cocok untuk interpolasi kueri basis data OLEH DEFAULT. Lihat http://php.net/manual/en/security.magicquotes.php
sumber
stripslashes()
, Anda sudah salah melakukannya.Jangan bingung tujuan tutorial, yaitu untuk menunjukkan sesuatu secara sederhana, dengan apa yang harus dilakukan dalam lingkungan produksi. Sebagai contoh, sebagian besar kode tutorial yang saya tulis memiliki sedikit atau tidak ada pengecekan error / exception. Saya mencoba mengingatkan pembaca bahwa kode itu hanya menunjukkan bagaimana melakukan tugas tertentu, bukan bagaimana mencakup semua hasil yang mungkin.
sumber
most tutorial code I have written has little or no error/exception checking.
.Ketika saya sedang belajar PHP saya melihat beberapa buku PHP + MySQL ini, dan ya saya merasa itu berkontribusi pada praktik buruk itu. Tetapi saya memiliki simpati, karena mereka mengajar bahasa , bukan praktik pemrograman yang baik. Kalau tidak, di mana itu akan berakhir?
sumber