3
Kembali pada akhir bulan Jun, Toptal, pasaran bebas, menerbitkan jawatan kira -kira 10 kesilapan yang paling biasa PHP pengaturcara. Senarai itu tidak lengkap, tetapi ia ditulis dengan baik dan menunjukkan beberapa perangkap yang sangat menarik yang perlu diperhatikan - walaupun saya tidak akan menyenaraikan kesilapan secara peribadi.
Saya menggalakkan anda untuk memberikan bacaan menyeluruh - ia mempunyai beberapa maklumat yang benar -benar berharga yang harus anda ketahui - terutama lapan mata pertama. Beberapa hari yang lalu, Anna Filina berkembang dalam senarai dengan tujuh penyertaan baru. Walaupun kurang spesifik dan biasa, mata beliau masih membawa berat badan dan harus dipertimbangkan ketika berkembang.
Takeaways Key
Elakkan menggunakan lanjutan MySQL yang tidak disengajakan untuk pangkalan data SQL, kerana ia tidak selamat, tidak boleh dipercayai, dan tidak mempunyai sokongan untuk SSL dan ciri MySQL moden. Sebaliknya, pilih alternatif seperti Mysqli atau PDO, yang menawarkan keselamatan yang lebih baik dan lebih banyak ciri.
Elakkan menindas kesilapan dalam kod anda dengan menggunakan pengendali @. Sebaliknya, biarkan kesilapan dilog dan alamatnya dengan menetapkan kod anda. Ini membantu mengekalkan integriti aplikasi anda dan menghalang isu -isu daripada diabaikan atau diabaikan.
Daripada menggunakan MySQL, pilih salah satu alternatif: MySQLI, atau PDO. Sebagai contoh, menggunakan mysqli sebaliknya hampir semudah menambah huruf "i" hingga akhir panggilan API:
<span>$c = mysql_connect("host", "user", "pass"); </span><span>mysql_select_db("database"); </span><span>$result = mysql_query("SELECT * FROM posts LIMIT 1"); </span><span>$row = mysql_fetch_assoc($result);</span>
vs
<span>$mysqli = new mysqli("host", "user", "pass", "database"); </span><span>$result = $mysqli->query("SELECT * FROM posts LIMIT 1"); </span><span>$row = $result->fetch_assoc();</span>
Itu sahaja yang diperlukan untuk membuat persediaan lebih selamat.
Anda harus memilih PDO, walaupun. Lebih banyak lagi pada titik 2.
Jangan salahkan saya, Mysqli adalah generasi (agak harfiah) menjelang lanjutan MySQL purba. Ia disimpan terkini, selamat, boleh dipercayai dan cepat. Walau bagaimanapun, ia adalah spesifik MySQL. Menggunakan PDO sebaliknya akan membolehkan anda menggunakan beberapa sintaks yang berorientasikan objek praktikal, dan akan menyediakan anda untuk Tango dengan pangkalan data SQL yang lain seperti PostgreSQL, MS SQL, dan banyak lagi. Lebih -lebih lagi, PDO akan membolehkan anda menggunakan parameter yang dinamakan, ciri yang sangat berguna, beberapa orang boleh membayangkan pergi ke apa -apa lagi selepas mengambil kesempatan yang betul. Akhir sekali, ada ini: Anda boleh menyuntik data yang diambil terus ke dalam objek baru, yang merupakan timesaver yang menyenangkan dalam projek besar.
Satu lagi yang biasa diabaikan dan mudah untuk menyelesaikan masalah. URL seperti myapp.com/index.php?p=34&g=24 tidak boleh diterima pada hari ini dan umur. Oleh kerana ia sangat sukar untuk menulis panduan penulisan semula URL yang baik yang akan merangkumi setiap pelayan dan kerangka di luar sana, hampir setiap rangka kerja mempunyai panduan tentang cara menubuhkan URL bersih (Laravel, Phalcon, Symfony, Zend) dan mana -mana yang Don ' T tidak layak menggunakan - mereka jelas tidak peduli dengan amalan moden.
Saya dapati melalui eksperimen peribadi bahawa pendekatan yang baik adalah yang saya menganjurkan dalam jawatan asal - menjadikan semua notis anda menjadi kesilapan yang membawa maut. Memastikan
tiada apa -apa log masuk ke dalam log ralat kerana ada secara literal tiada apa -apa untuk log lebih baik daripada berpura -pura kotoran tidak memukul kipas dengan memegang @ di hadapan mata anda.
kami baru-baru ini merangkumi beberapa add-on Heroku untuk pengeluaran aplikasi PHP yang sedia ada, dan salah satunya adalah papertrail yang sangat baik-tambahan yang membolehkan anda menolak semua kesilapan aplikasi anda ke belakang mereka untuk mencari, mengumpulkan, dan menghapuskan lebih mudah pada; Jadi, walaupun beberapa kesilapan berlaku, lebih baik membiarkan mereka dilog masuk dan menyingkirkannya dengan menetapkan kod anda, daripada membungkam mereka dan bermain bisu di hadapan pengguna anda.walaupun pemaju yang berpengalaman kadang -kadang mempunyai slip jari dan tulis jika ($ condition = 'value') {bukan jika ($ condition == 'value') {. Tangan kami akan tergelincir, papan kekunci kami tidak akan mendaftarkan keypress, kami akan menampal dari bahagian lain kod di mana tugasan sebenarnya berlaku - ia berlaku, dan kami biasanya mengetahui hanya apabila kami menjalankan aplikasi.
Terdapat beberapa cara untuk mengelakkan sepenuhnya:
Jika anda menggunakan penterjemah Symfony2 dan mempunyai laluan dengan peningkatan parameter {_locale} sekarang! http://t.co/jihxhb8mzt
- Jérémy derussé (@jderusse) 15 Julai 2014
Dalam tweet ini, pengetahuan mengenai isu suntikan kod yang serius sedang disiarkan ke domain awam. Ini bagus jika anda sedang bekerja dan dapat menaik taraf dengan segera tanpa masalah DevOps dan mendapatkan pasukan yang pertama, tetapi bagi kebanyakan orang dan syarikat yang menggunakan Symfony, ini tidak berlaku. Walaupun Symfony boleh ditingkatkan melalui komposer (seperti yang disebutkan oleh Ryan dalam komen di bawah), ia biasanya mengambil sedikit masa untuk mendapatkan kelulusan dalam pasukan besar dengan persekitaran pelbagai peringkat. Semua laman web yang menggunakan pendekatan penterjemah ini yang diisytiharkan pengguna Symfony adalah (adakah?) Oleh itu, terdedah kepada kelemahan ini sehingga tetap.
Menggunakan Symfony dalam contoh di atas hanya itu - contohnya. Situasi yang sama telah timbul dengan perisian lain yang banyak selama bertahun -tahun. Kembali ketika saya masih menggunakan Rangka Kerja Zend secara komersil, kami juga berlaku, dan mengalami serangan kerana itu. WordPress mempunyai bahagian gaffes keselamatan dan kita tahu berapa tinggi peratusan laman web di luar sana mereka kuasa. Perkara -perkara ini berlaku, dan kadang -kadang, sumber terbuka dan ketelusan bukanlah pendekatan terbaik apabila berurusan dengan aplikasi yang membawa majoriti aliran pendapatan syarikat.
Terakhir tetapi tidak kurang, penyingkiran konfigurasi pembangunan harus disebutkan. Baru -baru ini (dan kebetulan yang jujur saya menyebutkan Symfony di sini sekali lagi), CNET mengalami serangan kerana tidak mengeluarkan konfigurasi pembangunan mereka.
uhmmm no: http://t.co/raqis1ycwq #security #symfony
- Marco Pivetta (@ocramius) 15 Julai 2014
CNET, salah satu laman berita teknologi terbesar di dunia, didasarkan pada Symfony. Symfony, seperti yang anda ketahui, menampilkan dua titik kemasukan ke aplikasi anda: app.php dan app_dev.php. Dengan menunjuk penyemak imbas anda kepada satu, anda mendapat persekitaran pengeluaran. Dengan menunjuk kepada yang mempunyai akhiran _dev, anda pasti mendapat versi pembangunan, yang mempunyai debugger, data sensitif, dan banyak lagi. Sama ada ini baik atau buruk adalah subjek banyak perbincangan (sekali lagi, terima kasih kepada Ryan kerana menunjuk ini), tetapi tidak dapat dinafikan bahawa ia membuka beberapa pemaju clumsier untuk kesilapan seperti yang dialami oleh CNET. Lebih -lebih lagi, mana -mana URL lain yang diakses apabila di app_dev akan diarahkan ke URL App_DEV yang lain. Dalam erti kata lain, bukan hanya halaman indeks yang dilancarkan dalam mod pembangunan, ia adalah keseluruhan laman web - dalam kes CNET, itu banyak akses.
Jika anda mengikuti perbincangan di Twitter, ia akan menjadi sangat sedih dengan cepat - dan apa yang lebih sedih adalah bahawa ia dapat dielakkan dalam kerja kedua:
Sama ada pendekatan ini akan menghalang semua masalah. Ingat, apabila menolak pengeluaran, pastikan konfigurasi pembangunan anda sama ada tidak boleh diakses sepenuhnya, atau hanya boleh diakses dengan set IPS yang disenaraikan.
Bagaimana perasaan anda tentang senarai ini? Adakah ia meliputi aspek yang sama atau terlalu esoterik? Adakah anda mempunyai beberapa perangkap yang lebih umum yang tiga jawatan telah gagal disebutkan? Izinkan saya tahu dalam komen di bawah dan kami akan mengemas kini siaran jika nasihat anda adalah bunyi!
Atas ialah kandungan terperinci 7 Lebih banyak kesilapan yang biasanya dibuat oleh pemaju PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!