codeigniter
Absicherung Ihrer Webanwendung
Suche…
Einführung
Denken Sie daran, dass CodeIgniter ein Entwicklungs-Framework ist. Es ist nicht das Ziel, Ihre Anwendung sicher zu machen. Es gibt Ihnen lediglich die Werkzeuge, um es selbst zu tun. Wenn Sie sich die Sicherheitsseite von CI ansehen, ist es ziemlich klar, dass der Entwickler Application Security versteht und diese in ihre Anwendung integriert.
Wenn die WebApp-Sicherheit für Sie relativ neu ist, würde ich mit OWASP beginnen. Es könnte vorteilhaft sein, sich andere Frameworks wie Zend oder Cake anzuschauen, von denen ich glaube, dass sie mehr Vorreiter sind
Syntax
- $ freshdata = $ this-> security-> xss_clean ($ user_input_data);
Parameter
Array von Benutzereingaben | leer |
---|---|
Einfügen eines Arrays mit Benutzereingaben in xss_filter($array of user input) | Leer |
XSS-Prävention
XSS bedeutet Cross-Site-Scripting. CodeIgniter ist mit XSS-Filterungssicherheit ausgestattet. Dieser Filter verhindert, dass schädlicher JavaScript-Code oder anderer Code versucht, Cookies zu entführen und schädliche Aktivitäten auszuführen. Verwenden Sie zum Filtern von Daten durch den XSS-Filter die Methode xss_clean () wie unten gezeigt.
$data = $this->security->xss_clean($data);
Sie sollten diese Funktion nur verwenden, wenn Sie Daten übermitteln. Der optionale zweite boolesche Parameter kann auch verwendet werden, um die Bilddatei auf einen XSS-Angriff zu prüfen. Dies ist nützlich für das Hochladen von Dateien. Wenn der Wert true ist, bedeutet das Bild sicher und nicht anders.
SQL-Injektionsverhinderung
SQL-Injection ist ein Angriff auf die Datenbankabfrage. In PHP verwenden wir die Funktion mysql_real_escape_string () , um dies zusammen mit anderen Techniken zu verhindern, aber CodeIgniter bietet eingebaute Funktionen und Bibliotheken, um dies zu verhindern.
Wir können die SQL-Injektion in CodeIgniter auf drei Arten verhindern:
- Abfragen entgehen
- Query Biding
- Aktive Datensatzklasse
Abfragen entgehen
<?php
$username = $this->input->post('username');
$query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
$this->db->escape()
Funktion fügt die Daten automatisch in Anführungszeichen ein und bestimmt den Datentyp, sodass nur Zeichenfolgendaten gespeichert werden können.
Query Biding
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
Im obigen Beispiel wird das Fragezeichen (?) Durch das Array im zweiten Parameter der Funktion query()
. Der Hauptvorteil der Erstellung von Abfragen auf diese Weise ist, dass die Werte automatisch mit Escape-Zeichen versehen werden, wodurch sichere Abfragen erzeugt werden. Die CodeIgniter-Engine erledigt das automatisch für Sie, sodass Sie sich nicht daran erinnern müssen.
Aktive Datensatzklasse
<?php
$this->db->get_where('subscribers_tbl',array('status'=> active','email' => '[email protected]'));
?>
Mit Hilfe aktiver Datensätze wird die Abfragesyntax von jedem Datenbankadapter generiert. Es ermöglicht auch sicherere Abfragen, da die Werte automatisch entweichen.
PHP-Fehler ausblenden
In der Produktionsumgebung möchten wir den Benutzern oft keine Fehlermeldung anzeigen. Es ist gut, wenn es in der Entwicklungsumgebung für Debugging-Zwecke aktiviert ist. Diese Fehlermeldungen können einige Informationen enthalten, die wir den Benutzern der Website aus Sicherheitsgründen nicht zeigen sollten.
Es gibt drei CodeIgniter-Dateien, die mit Fehlern zusammenhängen. PHP-Fehlerberichtsebene
Eine andere Umgebung erfordert unterschiedliche Fehlerberichterstattungsstufen. Standardmäßig werden bei der Entwicklung Fehler angezeigt, beim Testen und Live werden sie jedoch ausgeblendet. Es gibt eine Datei namens index.php im Stammverzeichnis von CodeIgniter, die zu diesem Zweck verwendet wird. Wenn wir der error_reporting () - Funktion eine Null als Argument übergeben, werden alle Fehler ausgeblendet.
CSRF-Prävention
CSRF steht für standortübergreifende Anforderungsfälschung. Sie können diesen Angriff verhindern, indem Sie eine Option in der Datei application / config / config.php wie unten gezeigt aktivieren.
$config['csrf_protection'] = TRUE;
Wenn Sie ein Formular mit der Funktion form_open()
erstellen, wird automatisch ein CSRF-Token in ein ausgeblendetes Feld form_open()
. Sie können das CSRF-Token auch manuell mit der Funktion get_csrf_token_name()
und get_csrf_hash()
. Wie ihre Namen vermuten lassen, gibt die Funktion get_csrf_token_name()
den Namen des CSRF-Tokens zurück, während get_csrf_hash()
den Hash get_csrf_hash()
.
Das CSRF-Token kann für die Übermittlung jedes Mal neu erstellt werden, oder Sie können es auch während der gesamten Lebensdauer des CSRF-Cookies beibehalten. Wenn Sie die Konfigurationsoption 'csrf_regenerate' einstellen, wird das Token wie unten gezeigt regeneriert.
$config['csrf_regenerate'] = TRUE;
Sie können URLs aus dem CSRF-Schutz in die Whitelist aufnehmen, indem Sie im Konfigurations-Array Übereinstimmungen mit dem Schlüssel 'csrf_exclude_uris' wie unten angegeben festlegen. Sie können auch reguläre Ausdrücke verwenden.
$config['csrf_exclude_uris'] = array('api/person/add');
Missbrauchsdaten aus der Benutzereingabe entfernen
// XSS Filtering
$data = array(
'name'=> '<script>Abuse Data</script>'
);
$data = $this->security->xss_clean($data); // Clean Data
// Escaping Queries
<?php $username = $this->input->post('username'); $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '. $this->db->escape($email); $this->db->query($query); ?>
XSS-Verhinderung bei Benutzereingaben
Verlassen Sie sich nicht auf Benutzereingaben. Benutzereingabe alles wie das <script>
-Tag oder ein beliebiger Javascript- alert();
Daher müssen wir dies verhindern, dass alle Daten in unserem Browser nicht ausgeführt werden. Daher müssen wir die xss-Präventionsmethode verwenden, um unsere sicheren Daten auf Hacker-Hand zu beschränken, und auch die Verantwortung des Entwicklers für die Überprüfung der Eingaben von Benutzern und die Behebung von Fehlern durch das Programm.
Überprüfen Sie, ob dies ein Beispiel für die Verhinderung von xss in CodeIgniter ist.
$data = array(
'name' => "<script>alert('abc')</script>",
'email' => "[email protected]"
);
var_dump($data);
// Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(29) "" ["email"]=> string(19) "[email protected]" } // Result with alert
// now print data after xss filtering
$data = $this->security->xss_clean($data);
var_dump($data);
//Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(38) "[removed]alert('abc')[removed]" ["email"]=> string(19) "[email protected]" } // Result Without alert
Nach dem Hinzufügen von xss_filtering haben wir also kein Problem mehr, um Missbrauchscode auszuführen, der vom Benutzer eingegeben wird. und CodeIgniter ersetzen dieses Missbrauchs-Tag mit dem Schlüsselwort [removed]
.