Manchmal ist man beschäftigt und delegiert kleine Aufgaben an Junior-Programmierer. Wenn Sie jedoch nicht genau genug aufpassen, finden Sie sich mit dieser Art von Code in der Produktion wieder:
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
);
}
}
Wenn ich der Kürze halber die Authentifizierungs- / Sitzungsverwaltungslogik entfernt habe, wer kann mir dann sagen, welches mögliche Problem mit diesem Beispiel auftreten könnte?
Antworten:
Du kannst sie unterrichten. Jeder tut dies am Anfang, auch Sie. Wenn diese Art von Code es in die Produktion schafft, ist es die Schuld der älteren Leute; nicht der Junior.
Bearbeiten:
Eines der Dinge, die ich getan habe, ist, dass ich persönlich Leute aktiv gebeten habe, meinen Code (einschließlich der Junioren) vor einer Veröffentlichung zu überprüfen. Der Code wird überprüft, die Junioren sehen darin eine Lernerfahrung, die Leute verlieren die Angst vor einer Codeüberprüfung als Strafe und beginnen, dasselbe zu tun.
quelle
Hacken Sie ihren Code vor ihren Augen und zeigen Sie ihnen, wie sie ihn beheben können. Immer und immer wieder, bis sie verstehen.
quelle
Sie können sie beauftragen, eine Klasse zu besuchen, sobald sie Ihrem Unternehmen beitreten, bevor sie Zugriff auf die Quellcodeverwaltung haben. Dadurch werden sie in SQL-Injektionen, Cross-Site-Scripting, Cross-Site-Request-Fälschung und andere häufige Schwachstellen eingeführt. Behandeln Sie Beispiele von Angesicht zu Angesicht, brechen Sie schlechten Code vor sich, lassen Sie sie schlechten Code brechen und verweisen Sie sie auf die OWASP-Site, um weitere Informationen zu erhalten, sobald sie ihren Abschluss gemacht haben.
Sie können zusätzlich die Verwendung einer benutzerdefinierten Bibliothek vorschreiben, die dies für Sie erledigt. Dies ist jedoch nur eine sekundäre Lösung, da sie sicher benutzerdefinierte Abfragen ausführen wird, wenn dies bequemer wird.
Wenn Sie über die Ressourcen verfügen, kann es auch nützlich sein, sicherzustellen, dass mehr hochrangige Mitglieder des Teams ihre Unterschiede vor dem Festschreiben überprüfen.
Wissen ist Macht!
quelle
Unter der Annahme, dass es sich um die Unsicherheit handelt, auf die sich andere als Entwickler jeder Ebene bezogen haben, kann man leicht vergessen, dass getPost () die Daten nicht zuerst sichert.
Ein Weg, um dies zu umgehen, ist:
Jeder Entwickler, der etwas aus einem Array namens "unsichere_Daten" abruft und sich nicht die Mühe macht, es zu sichern, ist entweder unwissend oder faul. Wenn es das erstere ist, bieten Sie Schulungen an, danach muss es das letztere sein - und dann haben Sie ein Disziplinarproblem, kein Programmierproblem.
quelle
Eine der besten Anleitungen, die ich zur Web-Sicherheit gelesen habe, ist diese Ruby on Rails- Sicherheitsanleitung. Obwohl es sich um Ruby on Rails handelt, gelten viele Konzepte für jede Webentwicklung. Ich würde jeden neuen ermutigen, diesen Leitfaden zu lesen.
quelle
Der Code, den Sie oben verlinkt haben, ist anfällig für einen SQL-Injection-Angriff, da die HTTP-Eingaben, die Sie in der Abfrage verwenden, nicht mit
mysql_real_escape_string
anderen Mitteln bereinigt wurden .quelle
In Bezug auf Ihre (vermutlich übergeordnete) Frage "Wie kann ich Programmierer dazu bringen, damit aufzuhören?" Würde ich sagen, dass Sie sie regelmäßig betreuen, das betreffende Problem (und die möglichen Auswirkungen usw.) sorgfältig erläutern und hervorheben Die Bedeutung von Code-Schwachstellen (sowohl in Bezug auf SQL-Injection als auch Cross-Site-Scripting usw.) ist wahrscheinlich die sinnvollste Lösung.
Wenn sie trotz alledem immer wieder durcheinander kommen (vielleicht möchten Sie ein Auge auf ihre Verpflichtungen usw. werfen, anstatt "live" herauszufinden), besteht das Problem entweder darin, dass Sie sie als Mentor im Stich lassen, oder dass Vielleicht müssen sie etwas finden, das besser für ihren Lebensunterhalt geeignet ist.
quelle