Czasami jesteś zajęty i przekazujesz małe zadania młodszym programistom. Ale jeśli nie zwrócisz wystarczającej uwagi, znajdziesz się przy tego rodzaju kodzie w produkcji:
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
);
}
}
Biorąc pod uwagę, że usunąłem logikę zarządzania uwierzytelnianiem / sesjami dla zwięzłości, kto może mi powiedzieć, jaki może być problem z tą próbką?
Odpowiedzi:
Możesz ich uczyć. Wszyscy robią to na początku, nawet ty. Jeśli ten typ kodu trafia do produkcji, jest to wina starszych osób; nie młodszy.
Edytować:
Jedną z rzeczy, które zrobiłem, jest to, że osobiście zdecydowałem się proaktywnie prosić ludzi o sprawdzenie mojego kodu (w tym juniorów) przed wydaniem. Kod jest sprawdzany, młodzież postrzega go jako doświadczenie edukacyjne, ludzie tracą obawy przed recenzją kodu jako karą i zaczynają robić to samo.
źródło
Włam ich kod do oczu, a następnie pokaż im, jak to naprawić. W kółko, dopóki nie zrozumieją.
źródło
Możesz upoważnić ich do wzięcia udziału w zajęciach, gdy tylko dołączą do Twojej firmy, zanim uzyskają dostęp do kontroli źródła, co wprowadza ich w zastrzyki SQL, skryptowanie między witrynami, fałszowanie żądań między witrynami i inne typowe luki w zabezpieczeniach. Omów przykłady twarzą w twarz, przełam zły kod przed nimi, poproś, aby złamali zły kod i skieruj je na stronę OWASP, aby uzyskać więcej informacji, gdy „ukończą” szkołę.
Możesz dodatkowo nakazać korzystanie z niestandardowej biblioteki, która to załatwi, ale to tylko drugorzędne rozwiązanie, ponieważ na pewno będą uruchamiać niestandardowe zapytania, gdy stanie się to wygodniejsze.
Jeśli masz zasoby, przydatne może być również zapewnienie, że więcej starszych członków zespołu zweryfikuje swoje różnice przed zatwierdzeniem.
Wiedza to potęga!
źródło
Zakładając, że jest to niepewność, o której wspominali inni, jako programista dowolnego poziomu, łatwo zapomnieć, że getPost () nie zabezpiecza najpierw danych.
Jednym ze sposobów jest:
Każdy programista, który pobiera coś z tablicy o nazwie „insecure_data” i nie zadaje sobie trudu, aby to zabezpieczyć, jest ignorantem lub leniwy. Jeśli jest to pierwsze, zapewnij szkolenie, po którym musi być to drugie - i wtedy masz problem dyscyplinarny, a nie programistyczny.
źródło
Jednym z najlepszych przewodników, które przeczytałem na temat bezpieczeństwa w sieci, jest ten przewodnik bezpieczeństwa Ruby on Rails . Chociaż jest to Ruby on Rails, wiele koncepcji ma zastosowanie do każdego projektu internetowego. Zachęcam każdego nowego do przeczytania tego przewodnika.
źródło
Kod, który podałeś powyżej, jest podatny na atak wstrzykiwania SQL, ponieważ dane HTTP używane w zapytaniu nie zostały wyczyszczone
mysql_real_escape_string
ani w żaden inny sposób.źródło
Jeśli chodzi o twoje (przypuszczalnie nadrzędne) pytanie „w jaki sposób mogę zmusić programistów do zaprzestania robienia tego”, powiedziałbym, że regularnie ich mentorujesz, dokładnie wyjaśniając daną kwestię (i potencjalny błąd itp.) I podkreślając znaczenie luk w zabezpieczeniach kodu (zarówno pod względem wstrzykiwania SQL, jak i skryptów krzyżowych itp.) jest prawdopodobnie najbardziej sensownym rozwiązaniem.
Jeśli mimo wszystko powyższego nadal się psują (możesz rzucić okiem na ich zobowiązania, itp. Zamiast odkrywać „na żywo”), problem polega na tym, że ich zawiodłeś jako mentora, lub że być może muszą znaleźć coś bardziej odpowiedniego do życia.
źródło