CodeIgniter - Sicherheit
XSS-Prävention
XSS bedeutet Cross-Site-Scripting. CodeIgniter bietet XSS-Filtersicherheit. Dieser Filter verhindert böswilligen JavaScript-Code oder anderen Code, der versucht, Cookies zu entführen und böswillige Aktivitäten auszuführen. Verwenden Sie die Taste, um Daten durch den XSS-Filter zu filternxss_clean() Methode wie unten gezeigt.
$data = $this->security->xss_clean($data);
Sie sollten diese Funktion nur verwenden, wenn Sie Daten senden. Der optionale zweite boolesche Parameter kann auch verwendet werden, um die Bilddatei auf XSS-Angriffe zu überprüfen. Dies ist nützlich für das Hochladen von Dateien. Wenn sein Wert wahr ist, bedeutet dies, dass das Bild sicher ist und nicht anders.
SQL Injection Prevention
SQL Injection ist ein Angriff auf Datenbankabfragen. In PHP verwenden wirmysql_real_escape_string() Funktion, um dies zusammen mit anderen Techniken zu verhindern, aber CodeIgniter bietet eingebaute Funktionen und Bibliotheken, um dies zu verhindern.
Wir können SQL Injection in CodeIgniter auf die folgenden drei Arten verhindern:
- Escape-Abfragen
- Abfrage Biding
- Aktive Datensatzklasse
Escape-Abfragen
<?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() Die Funktion fügt automatisch einfache Anführungszeichen um die Daten hinzu und bestimmt den Datentyp, sodass nur Zeichenfolgendaten ausgeblendet werden können.
Abfrage 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 (?) Im zweiten Parameter der Funktion query () durch das Array ersetzt. Der Hauptvorteil der Erstellung von Abfragen auf diese Weise besteht darin, dass die Werte automatisch maskiert werden, was zu sicheren Abfragen führt. Die CodeIgniter-Engine erledigt dies 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]'));
?>
Bei Verwendung aktiver Datensätze wird die Abfragesyntax von jedem Datenbankadapter generiert. Es ermöglicht auch sicherere Abfragen, da die Werte automatisch ausgeblendet werden.
PHP-Fehler ausblenden
In der Produktionsumgebung möchten wir den Benutzern häufig 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 Site-Benutzern aus Sicherheitsgründen nicht anzeigen sollten.
Es gibt drei CodeIgniter-Dateien, die sich auf Fehler beziehen.
PHP-Fehlerberichterstattungsstufe
Unterschiedliche Umgebungen erfordern unterschiedliche Ebenen der Fehlerberichterstattung. Standardmäßig zeigt die Entwicklung Fehler an, aber durch Testen und Live werden sie ausgeblendet. Es gibt eine Datei namensindex.phpim Stammverzeichnis von CodeIgniter, das für diesen Zweck verwendet wird. Wenn wir Null als Argument an übergebenerror_reporting() Funktion dann wird das alle Fehler verbergen.
Datenbankfehler
Auch wenn Sie die PHP-Fehler deaktiviert haben, sind MySQL-Fehler weiterhin offen. Sie können dies ausschaltenapplication/config/database.php. Stellen Sie diedb_debug Option in $db Array zu FALSE Wie nachfolgend dargestellt.
$db['default']['db_debug'] = FALSE;
Fehlerprotokoll
Eine andere Möglichkeit besteht darin, die Fehler in Protokolldateien zu übertragen. Daher wird es den Benutzern auf der Website nicht angezeigt. Stellen Sie einfach dielog_threshold Wert in $config Array auf 1 Zoll application/cofig/config.php Datei wie unten gezeigt.
$config['log_threshold'] = 1;
CSRF-Prävention
CSRF steht für Cross-Site Request Forgery. Sie können diesen Angriff verhindern, indem Sie ihn im aktivierenapplication/config/config.php Datei wie unten gezeigt.
$config['csrf_protection'] = TRUE;
Wenn Sie ein Formular mit erstellen form_open()Funktion wird automatisch ein CSRF als verstecktes Feld eingefügt. Sie können die CSRF auch manuell mit dem hinzufügenget_csrf_token_name() und get_csrf_hash()Funktion. Dasget_csrf_token_name() Funktion gibt den Namen des CSRF und zurück get_csrf_hash() gibt den Hashwert von CSRF zurück.
Das CSRF-Token kann jedes Mal zur Übermittlung neu generiert werden, oder Sie können es auch während der gesamten Lebensdauer des CSRF-Cookies beibehalten. Durch Einstellen des WertesTRUE, im Konfigurationsarray mit Schlüssel ‘csrf_regenerate’ regeneriert das Token wie unten gezeigt.
$config['csrf_regenerate'] = TRUE;
Sie können URLs aus dem CSRF-Schutz auch auf die Whitelist setzen, indem Sie sie mit dem Schlüssel im Konfigurationsarray festlegen ‘csrf_exclude_uris’Wie nachfolgend dargestellt. Sie können auch reguläre Ausdrücke verwenden.
$config['csrf_exclude_uris'] = array('api/person/add');
Umgang mit Passwörtern
Viele Entwickler wissen nicht, wie sie mit Kennwörtern in Webanwendungen umgehen sollen, weshalb es wahrscheinlich vielen Hackern so leicht fällt, in die Systeme einzudringen. Beim Umgang mit Passwörtern sind folgende Punkte zu beachten:
Speichern Sie Passwörter NICHT im Nur-Text-Format.
Hash immer deine Passwörter.
Verwenden Sie zum Speichern von Passwörtern KEINE Base64- oder ähnliche Codierung.
Verwenden Sie KEINE schwachen oder defekten Hashing-Algorithmen wie MD5 oder SHA1. Verwenden Sie nur starke Passwort-Hashing-Algorithmen wie BCrypt, die in PHP-eigenen Password-Hashing-Funktionen verwendet werden.
Zeigen Sie niemals ein Passwort im Nur-Text-Format an oder senden Sie es nicht.
Setzen Sie den Passwörtern Ihrer Benutzer KEINE unnötigen Grenzen.