Mengapa kita tidak meretas inti?

17

Saya tidak percaya bahwa pertanyaan ini belum dijawab di situs ini, tetapi saya tidak menemukannya ketika mencari, jadi ...

Mengapa kejahatan ide buruk melawan alam menjadi hacking?

  • Apakah benar-benar hebat untuk dapat meningkatkan versi inti Anda? Sebagian besar situs saya akhirnya memiliki core yang sangat ketinggalan zaman, jadi mengapa repot-repot?
  • Bahkan jika itu sangat buruk bagi pemilik situs, mengapa komunitas sangat peduli? Mengapa itu disebut sebagai "membunuh anak kucing"? Bukankah itu agak hiperbolik?
  • Peretasan inti sangat mudah, bukankah kita suka mengambil rute yang lebih mudah menuju solusi masalah?
  • Apakah tidak ada masalah yang hanya bisa diselesaikan dengan meretas inti? Lalu bagaimana?
beth
sumber
saya pikir jika Anda membuat situs web kecil sendiri tanpa tim, mungkin Anda dapat meretas inti jika Anda perlu, tetapi mengapa Anda membutuhkannya? saya percaya bahwa Anda dapat menyelesaikan masalah apa pun tanpa meretas inti
Petro Popelyshko
4
@ Tapi saya sebenarnya cukup serius tentang ini. Tambalan yang diperlukan untuk halaman aman di D7 telah digantung selama lebih dari satu tahun sekarang karena masalah dengan tes unit. Sejauh yang saya ingat masih ada bug di D6 dengan panjang nama mesin menu. Tak satu pun dari ini yang menunjukkan kemajuan untuk benar-benar berkomitmen.
mpdonadio
3
@ MPD Itu contoh yang bagus sebenarnya, saya tahu beberapa orang adil yang menyerukan patch itu untuk membuatnya (termasuk saya). Selain anak kucing, jelas kadang-kadang Anda benar-benar harus menambal inti dan tidak ada yang salah dengan itu selama tambalan itu didokumentasikan dengan baik dan tersedia untuk semua orang di tim. Ini juga berbicara tentang pentingnya memiliki proses penyebaran yang solid, proses yang tidak membabi buta melakukan pembaruan tanpa pemeriksaan semi-manual terjadi sebelumnya. Di tim (kecil) saya, kami hanya mendokumentasikan apa yang berubah dan memastikan semua orang tahu untuk memeriksanya sebelum memperbarui
Clive
3
Terapkan tambalan dan catat dalam file teks yang ada di root repositori Anda.
Charlie Schliesser
1
Saya akan ulangi menjadi "Jangan hack inti, kecuali Anda memiliki mekanisme untuk tetap memiliki pembaruan Anda". Ini membutuhkan pemikiran, dan berimplikasi pada alur kerja pengembangan Anda. Jika Anda atau tim Anda tidak siap untuk menjaga anak tambahan ini, jangan lakukan itu.
donquixote,

Jawaban:

9

Secara umum, ada tiga alasan untuk tidak mengubah kode inti Drupal:

  • Perubahan Anda akan hilang setiap kali Anda memperbarui Drupal, jika Anda tidak mengambil langkah-langkah yang diperlukan. Bahkan jika Anda membuat tambalan untuk versi Drupal saat ini yang Anda gunakan, tambalan tidak dapat diterapkan ke versi yang lebih baru, dan Anda juga perlu membuat tambalan untuk versi yang baru.

  • Perbaikan keamanan berlaku untuk inti Drupal seperti yang dipertahankan pada Drupal.org, tetapi tidak dapat diterapkan pada versi yang diretas. Itu berarti Anda harus memeriksa versi Anda tidak terpengaruh oleh masalah keamanan yang diajukan terhadap inti Drupal.
    Jika versi yang diretas Anda memperkenalkan masalah keamanan yang berbeda, Anda adalah satu-satunya orang yang dapat Anda temukan, karena Anda tidak memiliki dukungan dari tim keamanan yang menyelidiki cacat keamanan yang ada dalam kode inti Drupal, dan di pihak ketiga modul yang dihosting di Drupal.org.

  • Perubahan yang Anda perkenalkan mungkin tidak kompatibel dengan Drupal itu sendiri, tetapi juga dengan modul pihak ketiga, yang diperlukan untuk bekerja dengan inti Drupal, bukan dengan versi peretasan yang dapat dibuat.
    Setiap kali Drupal memperkenalkan fitur baru (yang masih terjadi di Drupal 7, dan di Drupal 6, meskipun dengan frekuensi lebih sedikit), atau perubahan API baru, ada kemungkinan versi yang diretas tidak sesuai dengan perubahan terbaru.

Yang mengatakan, adalah mungkin untuk membuat versi diretas, tetapi itu bukan tugas yang bisa dilakukan oleh satu pengembang, dengan cara yang sama Drupal tidak dikelola oleh satu orang. Bahkan, Pressflow adalah hack versi Drupal yang telah dibuat dengan kinerja dalam pikiran, dan untuk menyelesaikan beberapa masalah kinerja situs Drupal bisa memiliki.

Apakah tidak ada masalah yang hanya bisa diselesaikan dengan meretas inti? Lalu bagaimana?

Seringkali, dimungkinkan untuk mengubah fitur / perilaku tanpa mengedit kode inti Drupal. Selalu ada pengait yang memungkinkan untuk mengubah fitur / perilaku yang dimiliki Drupal, dan itulah metode yang disukai.

kiamlaluno
sumber
4
Saya dapat memposting dua masalah dunia nyata yang saya temui yang dapat menantang pernyataan dalam paragraf terakhir.
mpdonadio
3
In the case your hacked version introduces a different security issue...Saya tidak melihat ini sebagai argumen yang sangat kuat memodifikasi file inti versus apa pun. Jika saya tidak meretas inti, dan sebaliknya saya memperkenalkan masalah keamanan melalui modul maka sistem saya masih akan dikompromikan. Terkompromi dikompromikan, tidak masalah jika itu datang dari saya mengedit file yang ada, atau menambahkan yang baru.
Zoredache
@Zoredache Jika masalah keamanan ada di modul Anda, Anda selalu dapat menonaktifkannya, dan sisa situs akan berfungsi tanpa masalah keamanan, bahkan tanpa fitur. Jika Anda memperkenalkan masalah keamanan dalam kode inti Drupal, dan tidak mungkin hanya menyalin kembali file asli karena Anda juga mengubah skema beberapa tabel yang digunakan oleh Drupal, maka itu adalah masalah yang lebih besar.
kiamlaluno
2
Pernyataan bahwa "selalu ada kail ..." tidak benar. Tidak sepenuhnya tidak umum bahwa ada sesuatu yang dimasukkan ke dalam inti drupal yang tidak dapat diselesaikan tanpa peretasan, dan juga ada masalah terbuka untuk drupal dengan tambalan yang belum dilakukan, dalam hal ini Anda harus menambal inti untuk mengatasi masalah tersebut.
rooby
2
Tentu saja, tetapi itu adalah contoh sederhana. Dalam kebanyakan kasus ada kait, tetapi masih ada waktu Anda perlu menambal inti, kecuali jika Anda ingin menduplikasi banyak kode dan membangun sesuatu yang lebih khusus. Misalnya, untuk mengizinkan admin mengelola buku yang tidak diterbitkan dengan benar, Anda memerlukan tambalan di drupal.org/node/520786 atau jika Anda ingin pencarian SQL default drupal mencocokkan dengan sebagian kata (termasuk filter pencarian tampilan) Anda memerlukan tambalan di drupal.org / node / 498752 # comment-6001310 - mengatasi ini tanpa inti peretasan tidak layak.
rooby
14

Saya bisa menulis jawaban yang luar biasa di sini, tetapi saya hanya akan memposting tautan ini: Jangan pernah retas inti !

Alasan utama yang saya kira adalah bahwa jika Anda meretas inti untuk melakukan sesuatu yang Anda butuhkan, dan kemudian perbarui ... BANG! Perubahan Anda hilang. Kalah. Anda kemudian dapat mencoba dan memutar kembali kode dari VCS Anda, tetapi mengingat Anda tidak dapat memutar kembali pemutakhiran basis data dari Drupal core - Anda sedang mencari untuk memulihkan semua kode dari VCS, dan kemudian memulihkan basis data dari cadangan Anda. Setiap kali Anda mencoba untuk memutar kembali kode Anda, Anda mungkin akan kemudian menyadari bahwa cadangan database pra-pembaruan terakhir Anda gagal, dan Anda akan bersumpah lebih dari yang pernah Anda sumpah sebelumnya.

Juga - yang paling penting - jika Anda meretas inti, maka Dries dan Webchick keduanya membunuh anak kucing: -o

Chapabu
sumber
4
Apa, mereka membunuh anak kucing? Saya pikir itu adalah Tuhan. . Duniaku jatuh sendiri ...
Clive
1
Anda tahu, saya menulis komentar saya di atas sebelum saya melihat anak kucing disebutkan di sini.
mpdonadio
13

"Apa yang tidak bisa dilakukan peretasan untuk saya, pengembang?"

  • Situs Anda dapat ditingkatkan untuk rilis keamanan
  • Situs Anda dapat ditingkatkan untuk memperbaiki bug yang mengganggu pada intinya
  • Situs Anda dapat ditingkatkan untuk mendukung modul baru
  • Laporan bug dan permintaan dukungan Anda pada core dan contrib akan dapat ditanggapi
  • Anda ingin menggunakan CMS yang didukung, itu sebabnya Anda memilih Drupal. Ketika Anda meretas inti, dalam kata-kata webchick , "Jika Anda meretas inti, selamat! Anda telah membuat garpu Drupal Anda sendiri, dan sekarang Anda dan Anda sendiri yang bertanggung jawab untuk mempertahankannya!"

"Apa yang tidak bisa dilakukan peretasan untuk klien saya?"

  • Situs Anda dapat dikelola oleh orang lain setelah Anda memecat klien Anda / memenangkan lotere / tertabrak bus

"Apa yang tidak bisa dilakukan peretasan inti untuk komunitas saya?"

  • Laporan bug Anda akan benar-benar memberikan info berguna untuk pengelola modul inti atau kontrib.
  • Jika Anda menemukan bug yang sah di inti yang harus ditambal, garis antara 'peretasan inti' dan 'menjadi kontributor inti' sama baiknya dengan hanya memisahkan perubahan Anda dan mengunggahnya sebagai patch ke dalam masalah yang relevan. Biola! Core lebih baik untuk upaya Anda, dan nama Anda dikaitkan dengan memberikan kembali kode kepada komunitas.

Semua orang adalah pemenang ketika Anda tidak meretas inti!

beth
sumber
3
Tidak semua tambalan berkomitmen pada inti, bahkan yang sederhana.
mpdonadio
1
Benar, tetapi dengan mengunggahnya, Anda setidaknya memiliki catatan tambalan, apa yang dilakukannya, mungkin beberapa versi yang diperbaiki oleh orang lain, dan kemampuan untuk mengunduhnya dan menerapkannya ke proyek Anda lagi jika Anda memiliki pembaruan yang menimpa perubahanmu. Dan seringkali alasan mengapa itu tidak dilakukan, dan saran alternatif. Semuanya gratis.
beth
6

Saat ini saya sedang mengerjakan situs web inti yang diretas. Saya mengalami kesulitan menemukan bagaimana sesuatu yang sesederhana font sedang diatur. Saya juga menghabiskan beberapa hari memperbaiki bug yang diperkenalkan oleh peretasan inti. Saya menemukannya dengan mencari string di seluruh kode drupal.

Jika Anda tidak mengikuti struktur standar pemrograman di drupal maka bagaimana orang lain dapat menemukan dan mengedit perubahan yang Anda perkenalkan? Ini khususnya menyakitkan karena dalam drupal setiap file php tunggal dapat mengimplementasikan hook. Coba cari tahu mana yang menyebabkan masalah.

Pawel G
sumber
4
Ini. Jika Anda mewarisi situs yang dibangun di atas kerangka tertentu, dan kemudian menemukan bahwa kerangka itu diretas dan dengan demikian dokumentasi untuk kerangka itu berpotensi tidak relevan, Anda berada di dunia yang penuh kesakitan. (Selain semua alasan yang disebutkan di atas ...)
Charlie Schliesser
5
Taruhan Anda berharap Anda pernah mendengar tentang drupal.org/project/hacked sebelumnya?
Chris Burgess
Tampak bagus Chris. Saya pasti akan melihatnya.
Pawel G
Sistem kontrol Sumber yang layak harus dapat memberi tahu Anda apa yang telah berubah dan menunjukkan semua modifikasi ke inti. Mencari string dalam basis kode harus menjadi bagian standar dari alat bantu debug Anda di php.
Toby Allen
5

"Apakah tidak ada masalah yang hanya bisa diselesaikan dengan meretas inti? Lalu bagaimana?"

Untuk menjawab pertanyaan ini, ya, terkadang ada masalah yang harus Anda atasi yang berarti Anda harus meretas inti (atau modul kontrib).

Dalam hal ini saya yakin tidak masalah untuk meretas selama Anda memasukkan banyak komentar dalam kode yang diretas dan mendokumentasikan semua yang Anda ubah.

Misalnya, untuk setiap perubahan inti atau contrib, saya membuat saya membuat patch. Jika itu generik dan bermanfaat bagi orang lain, saya kirimkan ke drupal.org dalam suatu masalah, jika tidak, itu untuk saya gunakan sendiri.

Saya kemudian mengkomit file tambalan ke kontrol versi saya bersama dengan perubahan kode.

Ini berarti bahwa saya dapat melihat dengan mencari file tambalan jika ada sesuatu yang diretas.

Selain itu, saya juga menambahkan daftar retasan ke dokumentasi pengembang untuk situs tersebut (Anda harus memiliki dokumentasi pengembang untuk kepentingan orang lain yang mungkin berfungsi di situs ini dan untuk diri Anda sendiri ketika Anda melupakan hal-hal yang tak terhindarkan).

Dalam dokumentasi peretasan ini, saya mencantumkan setiap peretasan dengan apa yang dilakukan peretasan dan mengapa, modul / file terpengaruh, nama file tambalan yang berisi kode peretasan, dan tautan ke masalah drupal.org terkait jika ada satu (hampir selalu) dalam kasus saya ada).

Maka Anda dan siapa pun yang bekerja di situs di masa depan memiliki daftar lengkap peretasan dan tidak perlu khawatir tentang sesuatu yang tidak sengaja rusak dengan pembaruan.

Kemudian untuk proses pembaruan, saya memeriksa daftar peretasan saya dan melihat sekilas file tambalan di semua modul yang saya perbarui. Jika ada peretasan dan memiliki masalah drupal.org, saya memeriksa masalah untuk melihat apakah versi terbaru memiliki tambalan, dalam hal ini saya menyingkirkan peretasan dengan pembaruan dan menghapusnya dari daftar peretasan saya (buat yakin dengan melihat pesan komit drupal.org bahwa apa yang dilakukan sama dengan versi tambalan yang Anda gunakan, atau setidaknya secara fungsional sama).

Jika tambalan tidak dilakukan, yang harus saya lakukan adalah memperbarui modul dan menerapkan kembali tambalan. Dalam banyak kasus, tambalan akan tetap berlaku bersih dan prosesnya mudah, tetapi kadang-kadang Anda harus melakukan reroll tambalan untuk versi baru dan kemudian memasukkan versi baru tambalan ke repositori lokal Anda (bersama dengan mempostingnya ke yang relevan masalah drupal.org jika berlaku).

Hal lain yang ingin saya lakukan jika saya memiliki lebih banyak tambalan atau tambalan yang berinteraksi dengan fungsionalitas inti suatu modul (atau hanya modul khusus yang meluas di atas modul drupal.org), adalah untuk memeriksa catatan rilis dari modul yang diperbarui ( itu berarti semua versi ada di antara versi Anda saat ini dan versi yang sedang Anda perbarui) dan pastikan tidak ada apa pun di sana yang dapat merusak kode Anda. Catatan: Banyak pengelola modul yang baik hari ini dengan memberikan catatan rilis lengkap tetapi masih banyak yang melakukan catatan rilis sampah. Dalam hal ini dalam beberapa kasus saya membaca semua pesan komit sejak versi saya saat ini (ini biasanya hanya dalam kasus di mana saya memiliki kode kompleks yang berinteraksi secara mendalam dengan modul lain). catatan:

Kemudian, setelah memperbarui (pada salinan pengembangan situs), uji secara menyeluruh. Anda pada akhirnya akan belajar apa arti menyeluruh setelah beberapa bug lolos.

Kemudian ketika sudah cukup diuji, tingkatkan situs langsung atau dorong pembaruan lokal Anda ke atas atau apa pun proses penyebaran Anda.

Alasan mengapa semua orang mengatakan tidak melakukannya, bahkan jika itu lebih mudah: Karena kebanyakan orang tidak memiliki sistem seperti yang saya uraikan, jadi ketika tiba saatnya untuk melakukan pembaruan, atau situs tersebut diserahkan kepada orang lain untuk bekerja pada, itu menjadi mimpi buruk dan banyak waktu (kadang-kadang banyak waktu) harus dihabiskan untuk memecahkan bug dan melacak peretasan dan mencari tahu mengapa mereka ada di sana, dll.

Jika Anda pernah mewarisi situs seperti itu, Anda akan sepenuhnya memahami :)

jorok
sumber
2

Jika Anda mencari nafkah dari menginstal dan membuat situs web Drupal, maka Anda harus selalu memperbaruinya. Jika sebagian besar situs Anda kedaluwarsa, Anda tidak profesional.

jalal
sumber