Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte grafische Erläuterung der Codeigniter-Sicherheitsvorkehrungen in PHP

Detaillierte grafische Erläuterung der Codeigniter-Sicherheitsvorkehrungen in PHP

墨辰丷
墨辰丷Original
2018-05-24 10:14:581521Durchsuche

In diesem Artikel werden hauptsächlich die Sicherheitsvorkehrungen von Codeigniter in PHP vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

1. httponly

Sitzung muss httponly sein, sonst kann es sein, dass sie von xxs angegriffen wird, um die session_id des Cookies zu erhalten.

Sie müssen die ci_session des Frameworks, längere Ziffern und httponly verwenden. Diese sind alle standardmäßig konfiguriert.

Verwenden Sie nicht die native phpsession, sondern ci_session. ci_session-Ziffern sind länger.

Wenn Sie die native Sitzung verwenden möchten, sollten Sie sie wie folgt einrichten (php.ini):

session.sid_length //Die Länge der Sid sollte hier verlängert werden. Der Standardwert ist zu kurz

session.cookie_httponly = 1Die native Sitzung wird zu httponly.

2. phpinfo

Achten Sie darauf, die phpinfo-Seite zu schließen, da die Dump-Anforderungsinformationen möglicherweise von Angreifern verwendet werden. Zum Beispiel Cookie-Informationen.

3. Obligatorisches https für die gesamte Site

Springen Sie durch CDN, und die lokale Entwicklungsumgebung muss ebenfalls mit https ausgestattet sein. Wenn https in einigen Aspekten nicht verwendet werden kann, z. B. beim Nachrichten-Push, können Sie eine neue Site erstellen.

4. Strikter Modus

session.use_strict_mode = 1

Verwenden Sie nur die vom Server selbst generierte Sitzungs-ID, nicht die vom Benutzer-Client generierte Sitzungs-ID.

5. CSRF-Cross-Site-Request-Forgery

Das Cookie von A enthält die Sitzungs-ID der Site example.com und ist nicht abgelaufen Wenn Sie ein Bild in das Forum stellen und A dazu verleiten, auf das Bild zu klicken, wird die Anfrage als wahr getarnt. Der Browser von example.com glaubt, dass es wahr ist, und hängt das Cookie von example.com an Die Anforderungsinformationen sind der Code von B, der über eine asynchrone Anforderung an B gesendet wird und sich über dieses Cookie beim Konto von A anmeldet.

CI verfügt über einen Anti-CSRF-Mechanismus, das heißt, es fügt automatisch ein verstecktes CSRF-Feld in das Formular ein. Folgende Einstellungen sind erforderlich:

application/config/config.php:

$config['csrf_protection'] = TRUE;


Hinweis, Nach dem Öffnen werden alle Anfragen an ausgehende Websites blockiert. Wenn unsere Website das Verhalten aufweist, Daten von anderen Websites abzurufen, beispielsweise durch den Aufruf einer API, kann dieser Schalter nicht aktiviert werden.

6.

$this->input->post('a',true);

Solange Sie einen Parameter true hinzufügen, können Sie eine XSS-Filterung für die Beitragsdaten durchführen.

7. Wiederholung

Sie verschlüsseln Ihren Benutzernamen und Ihr Passwort und senden sie zur Anmeldebestätigung an den Server Mit diesen Benutzernamen und Passwörtern muss er die abgefangenen Datenpakete nur noch einmal bedienen, um sich einzuloggen. Das ist Replay.

Abwehrmaßnahmen 5 und 6: Jedes Formular enthält einen versteckten Zufallscode-Token, der nur einmal verwendet werden kann.

Nur ​​einmalige Token-Implementierung: Redis löscht es direkt nach Ablauf und Verwendung

8. Zusammenfassung: Sicherer Anmeldevorgang für Benutzer

f35d6e602fd7d0f0edfa6f7d103c1b57Grundlegende Sitzungsstrategie:

(1) Sitzung ist nur eine Sitzungssitzung und wird ungültig, wenn die Browser ist geschlossen. ;(2) Je kürzer die Sitzungsgültigkeitsdauer ist, desto sicherer ist sie, zum Beispiel 60 Sekunden;(3) Die Sitzungsaktualisierungszeit muss geändert werden dementsprechend beispielsweise 30 Sekunden;

(4) Redis zum Speichern der Sitzung einrichten.

ist wie folgt konfiguriert:

in php.ini:

session.gc_maxlifetime = 60

Dies ist die Gültigkeitsdauer der Sitzung. Der Standardwert beträgt 1440 Sekunden, also 24 Minuten. Ändern Sie ihn auf beispielsweise 60 Sekunden. Wenn die SID des Clients nach 60 Sekunden mit der SID des Servers übereinstimmt, sollte die Seite vor 60 Sekunden aktualisiert werden, um die SID zu aktualisieren > in application/config/config.php:

$config['sess_driver'] = 'redis';//设为用redis存储session
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;//设为会话session,关闭浏览器,客户端cookie即失效
$config['sess_save_path'] = 'tcp://127.0.0.1:端口号';//redis地址
$config['sess_match_ip'] = FALSE;//要不要验证ip是否一致
$config['sess_time_to_update'] = 30;//超30秒即刷新sid
$config['sess_regenerate_destroy'] = TRUE;//重新生成sid的时候删除旧sid

2cc198a1d5eb0d3eb508d858c9f5cbdbUnterscheidung zwischen Sitzungs-ID-Aktualisierung und Sitzungsablaufzeit:


Hinweis:

Diese Einstellungen stehen in engem Zusammenhang mit der Sicherheit und sollten sorgfältig unterschieden und verwendet werden.

Was bedeutet das obige

session.gc_maxlifetime

? Das heißt, die Zeit von der Generierung einer Sitzung bis zu ihrem Ablauf und ihrer Nichtverwendung. Wenn Sie Redis verwenden, ist dieser Wert klar, wenn Sie Redis zum Speichern von SIDs verwenden. Dies ist sehr klar erreicht, dieser Schlüsselwert wird gelöscht.

Was ist also mit dieser sess_time_to_update? Wie der Name schon sagt, ist dies die Aktualisierungszeit, was bedeutet, dass sie aktualisiert wird, wenn sie diese Zeit überschreitet. Die Aktualisierung erfolgt nicht automatisch, sondern beim Zugriff auf die Sitzung! Wenn wir eine Sitzung verwenden, wird das Intervall zwischen der letzten Sitzung und diesem Zeitpunkt bestimmt. Wenn das Intervall größer als dieser Wert ist, wird die Seite aktualisiert. Die übliche Leistung dieser Verwendung besteht darin, dass wir beim Aktualisieren der Seite die Sitzung zur Authentifizierung lesen müssen. Wenn die Seite aktualisiert wird, überschreitet das Intervall zwischen zwei Malen diese Zeit, d. h. die Aktualisierung der Seite wird mit der maximalen Lebensdauer kombiniert Oben bedeutet dies, dass die Aktualisierung abgeschlossen ist. Danach wird die Sitzung erneuert und eine neue Sitzung zusammen mit einem neu gestarteten Timer geschrieben.

Das heißt, wenn wir die Seite von Zeit zu Zeit aktualisieren, wird unser Aktualisierungsmechanismus bei Bedarf ausgelöst und unsere Sitzung läuft nicht ab, niemals, wenn Sie dort regelmäßig putzen. Wenn das Zeitintervall zwischen zwei Aktualisierungen maxlifetime überschreitet, wird das Anmelde-Timeout angezeigt und die Sitzung ist beendet. Denn wenn Sie nach Ablauf versuchen, ein Update durchzuführen, wird es offensichtlich nicht funktionieren und das Update schlägt fehl.

Zusammenfassend lässt sich sagen, dass diese maximale Lebensdauer bestimmt, wie viel Zeit wir zwischen zwei Aktualisierungen nicht überschreiten dürfen, andernfalls kommt es bei der Anmeldung zu einer Zeitüberschreitung und die Aktualisierung muss kürzer als die maximale Lebensdauer sein, was unvermeidlich ist, denn wenn sie größer ist, wird die Zeitspanne überschritten Die Aktualisierung ist nutzlos, da sie abgelaufen ist. Und ich denke, dass dieses Update vorzugsweise weniger als die Hälfte der maxlifetime dauern sollte. Wenn maxlifetime sehr lang ist (in der Hoffnung, die Benutzererfahrung zu verbessern, ist es für Benutzer immer nicht gut, sich immer anzumelden und eine Zeitüberschreitung zu verursachen), spielt es keine Rolle, ob das Update kürzer eingestellt ist, denn wenn es so eingestellt ist Um kürzer zu sein, besteht unter der Annahme, dass die Sitzung gestohlen wird, ein größeres Risiko. Es ist möglich, dass der Dieb bei der Verwendung abgelaufen ist, sodass die Sicherheit höher ist.

2cc198a1d5eb0d3eb508d858c9f5cbdbEinmal-Token:

Einmal-Token

Das Obige ist hoffentlich der gesamte Inhalt dieses Artikels Es wird für alle beim Lernen hilfreich sein.


Verwandte Empfehlungen:

PHPSo führen Sie Systembefehle durch Bypass-Deaktivierungsfunktionen aus

Eine Zusammenfassung der Verwendung von „{}“-Klammern in PHP

An die E-Mail von PHP senden

Das obige ist der detaillierte Inhalt vonDetaillierte grafische Erläuterung der Codeigniter-Sicherheitsvorkehrungen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn