Terkadang Anda sibuk dan mendelegasikan tugas-tugas kecil ke programmer junior. Tetapi jika Anda tidak menaruh perhatian cukup dekat Anda menemukan diri Anda dengan kode semacam ini dalam produksi:
class DivtoggleController extends Zend_Controller_Action {
public function closeAction() {
/* ... code removed for brevity ... */
$req = $this->getRequest();
$formData = $req->getPost();
$d = $formData['div'];
$i = $formData['id'];
$dm = new Model_DivtoggleManager();
$rs = $dm->setDivToggleById($d, $i);
}
}
class Model_DivtoggleManager extends Zend_Db_Table {
public function setDivToggleById($div, $id) {
$result = $this->getAdapter()->query(
"update div_toggle set " . $div . "=1 where id=" . $id
);
}
}
Jadi, mengingat saya telah menghapus logika manajemen otentikasi / sesi untuk singkatnya, siapa yang dapat memberi tahu saya masalah apa yang mungkin ada dengan sampel ini?
Jawaban:
Anda bisa mengajari mereka. Setiap orang melakukan ini pada awalnya, bahkan Anda. Jika jenis kode ini membuatnya menjadi produksi, itu adalah kesalahan orang tua; bukan junior.
Edit:
Salah satu hal yang telah saya lakukan adalah saya secara pribadi telah mengambil secara proaktif meminta orang untuk meninjau kode saya (termasuk junior) sebelum rilis. Kode ditinjau, orang-orang junior melihatnya sebagai pengalaman belajar, orang-orang kehilangan rasa takut akan peninjauan kode sebagai hukuman, dan mereka mulai melakukan hal yang sama.
sumber
Retas kode mereka di depan mata mereka lalu tunjukkan pada mereka cara memperbaikinya. Berulang-ulang sampai mereka mengerti.
sumber
Anda dapat memberi mandat kepada mereka untuk mengambil kelas segera setelah mereka bergabung dengan perusahaan Anda, sebelum mereka memiliki akses kontrol sumber, yang memperkenalkan mereka pada suntikan SQL, skrip lintas situs, pemalsuan permintaan lintas situs, dan kerentanan umum lainnya. Tutupi contoh-contoh secara langsung, pecahkan kode buruk di depan mereka, minta mereka pecahkan kode buruk, dan arahkan ke situs OWASP untuk info lebih lanjut begitu mereka "lulus".
Anda juga dapat mengamanatkan penggunaan pustaka kustom yang menangani ini untuk Anda, tapi itu hanya solusi sekunder karena mereka akan yakin untuk menjalankan kueri khusus saat itu menjadi lebih nyaman.
Jika Anda memiliki sumber daya, memastikan lebih banyak anggota tim senior memverifikasi perbedaan mereka sebelum melakukan dapat berguna juga.
Pengetahuan adalah kekuatan!
sumber
Dengan asumsi bahwa itu adalah rasa tidak aman yang disebut orang lain, sebagai pengembang tingkat apa pun, mudah untuk melupakan bahwa getPost () tidak mengamankan data terlebih dahulu.
Salah satu cara mengatasi hal ini adalah dengan:
Setiap pengembang yang mengambil sesuatu dari array yang disebut 'insecure_data' dan tidak repot-repot mengamankannya adalah bodoh atau malas. Jika yang pertama, berikan pelatihan, setelah itu yang terakhir - dan kemudian Anda memiliki masalah disiplin, bukan masalah pemrograman.
sumber
Salah satu panduan terbaik yang saya baca tentang keamanan web adalah panduan keamanan Ruby on Rails ini . Meskipun Ruby on Rails, banyak konsep yang berlaku untuk pengembangan web apa pun. Saya akan mendorong siapa pun yang baru untuk membaca panduan itu.
sumber
Kode yang Anda tautkan di atas rentan terhadap serangan injeksi SQL, karena input HTTP yang Anda gunakan dalam kueri belum dibersihkan dengan
mysql_real_escape_string
atau cara lain apa pun.sumber
Dalam hal pertanyaan Anda (mungkin mengesampingkan) "bagaimana saya bisa membuat programmer berhenti melakukan ini", saya akan mengatakan bahwa membimbing mereka secara teratur, dengan hati-hati menjelaskan masalah yang dipermasalahkan (dan potensi kejatuhan, dll) dan menekankan pentingnya kerentanan kode (baik dalam hal injeksi SQL dan skrip lintas situs, dll.) mungkin merupakan solusi yang paling masuk akal.
Jika mereka terus mengacau terlepas dari semua hal di atas (Anda mungkin ingin mengawasi komitmen mereka, dll. Daripada mencari tahu "hidup"), maka masalahnya adalah apakah Anda gagal sebagai mentor, atau bahwa mereka mungkin perlu menemukan sesuatu yang lebih cocok untuk hidup.
sumber