In der Webentwicklung ist die Begrenzung der Anzahl der Benutzeranforderungen eine der wichtigsten Maßnahmen, um die Systemsicherheit und das Ressourcenmanagement sicherzustellen. Insbesondere in einigen Szenarien, in denen böswillige Angriffe verhindert werden müssen (z. B. Brute -Force -Cracking, Crawler -Angriffe usw.) oder die Häufigkeit von API -Anfragen kontrolliert werden muss, ist die Begrenzung der Anzahl der Sitzungsanfragen besonders wichtig. In diesem Artikel werden Sie vorgestellt, wie Sie SessionIDInterface in PHP verwenden, um die Anzahl der Sitzungsanforderungen zu begrenzen und eine einfache Implementierungsmethode anzugeben.
SessionIDInterface ist eine Schnittstelle, die von der PHP 7.1+ -Version eingeführt wird, mit der flexiblere Managementmethoden für die Sitzung bereitgestellt werden können. Es ermöglicht Entwicklern, ihre eigene Sitzung und Speichermechanismen für Sitzungen zu definieren. Durch die Implementierung dieser Schnittstelle können Entwickler anpassen, wie Sitzungs -IDs generiert und verarbeitet werden, was mehr Freiheit für die Sicherheitskontrolle bietet.
Die Begrenzung der Anzahl der Sitzungsanfragen besteht in der Regel dazu, die folgenden Situationen zu verhindern:
Brute Force Cracking : Verhindern Sie bösartige Benutzer daran, ihre Konten zu knacken, indem sie häufig Passwörter ausprobieren.
Crawler -Angriff : verhindert, dass Automatisierungswerkzeuge durch häufige Anfragen Serverressourcen konsumieren.
API schützen : Häufige API -Anfragen einschränken, um Schnittstellenmissbrauch oder DDOS -Angriffe zu vermeiden.
In PHP kann die Kombination der Sitzung die Anzahl der Anforderungen pro Sitzung problemlos steuern. Wir können die Anzahl der Anfragen für jede Sitzung verfolgen, indem wir einen Zähler festlegen und gemäß den Anforderungen einschränken.
Um dies zu erreichen, müssen wir zunächst sicherstellen, dass die Sitzungsverwaltung anpassen kann, wie Sitzungs -IDs generiert werden, und gleichzeitig die Sitzung verwenden, um die Anforderungen der Benutzeranforderung zu speichern. Im Folgenden werden wir die spezifischen Implementierungsschritte einführen.
Erstellen Sie zunächst eine benutzerdefinierte Klasse, um SessionIDInterface zu implementieren und zu steuern, wie die Sitzungs -ID über diese Klasse generiert und gespeichert wird. Wir verwenden die Standard -Sitzungs -ID von PHP nicht direkt, sondern generieren sie nach unseren Anforderungen.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">namespace</span></span><span> </span><span><span class="hljs-title class_">App</span></span><span>\</span><span><span class="hljs-title class_">Session</span></span><span>;
</span><span><span class="hljs-keyword">use</span></span><span> </span><span><span class="hljs-title">SessionHandlerInterface</span></span><span>;
</span><span><span class="hljs-keyword">use</span></span><span> </span><span><span class="hljs-title">SessionIdInterface</span></span><span>;
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">CustomSessionId</span></span><span> </span><span><span class="hljs-keyword">implements</span></span><span> </span><span><span class="hljs-title">SessionIdInterface</span></span><span>
{
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateId</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-comment">// Generieren Sie einen Brauch Session ID</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">uniqid</span></span><span>(</span><span><span class="hljs-string">'session_'</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validateId</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$id</span></span></span><span>)
{
</span><span><span class="hljs-comment">// verifizieren Session ID Wirksamkeit</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">'/^session_\w+$/'</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>);
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Im obigen Code wird die GeneratED -Methode verwendet, um eine neue Sitzungs -ID zu generieren, und valididId wird verwendet, um zu überprüfen, ob die angegebene ID dem erwarteten Format erfüllt. Durch diese Klasse können wir die Erzeugung und Überprüfung von Sitzungs -IDs steuern, um sicherzustellen, dass jede Sitzung eindeutig ist.
Öffnen Sie als Nächstes die PHP -Sitzung und verwenden Sie das $ _Session -Array, um die Anfrage des Benutzers zu speichern.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-comment">// Erhöhen Sie den Zähler jedes Mal, wenn Sie anfordern</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>])) {
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>] = </span><span><span class="hljs-number">0</span></span><span>;
}
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>]++;
</span><span><span class="hljs-comment">// Grenzen setzen</span></span><span>
</span><span><span class="hljs-variable">$maxRequests</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>] > </span><span><span class="hljs-variable">$maxRequests</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Die Anzahl der Anfragen hat die maximale Grenze erreicht,Bitte versuchen Sie es später erneut!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-comment">// Führen Sie die normale Geschäftslogik weiter aus</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Anzahl der Anfragen:"</span></span><span> . </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>];
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
In diesem Code prüfen wir zunächst, ob Request_Count vorhanden ist, und wenn nicht, initialisieren Sie auf 0. Bei jeder Anforderung wird der Zähler durch 1. Wenn die Anzahl der Anforderungen den Maximalwert überschreitet, gibt das System eine Eingabeaufforderung aus und beendet die Ausführung.
Um zu vermeiden, dass die Anforderungen des Benutzers während des langfristigen Gebrauchs ohne Grenzwert zunehmen, können wir den Zähler löschen, wenn die Sitzung abläuft oder wenn eine bestimmte Bedingung erfüllt ist. Durch Festlegen der Ablaufzeit der Sitzung kann die Sitzungsanzahl nach einer Zeit automatisch zurückgesetzt werden.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// aufstellen Session Ablaufzeit ist 10 Minute</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'session.gc_maxlifetime'</span></span><span>, </span><span><span class="hljs-number">600</span></span><span>); </span><span><span class="hljs-comment">// 600 Zweite</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'last_request_time'</span></span><span>])) {
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'last_request_time'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>();
}
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">time</span></span><span>() - </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'last_request_time'</span></span><span>] > </span><span><span class="hljs-number">600</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">session_destroy</span></span><span>(); </span><span><span class="hljs-comment">// Sitzung läuft ab,Zerstöre die Sitzung</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Sitzung läuft ab,Bitte melden Sie sich erneut an"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'last_request_time'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dieser Code implementiert die Verfallskontrolle der Sitzung. Wenn die Sitzung 10 Minuten überschreitet und keine Anfrage gestellt wird, wird die Sitzung automatisch zerstört und die Sitzung des Benutzers ist abgelaufen.
Über die obige Methode können wir die Sitzungs -ID in PHP mit SessionIDInterface anpassen und den Sitzungsspeicher verwenden, um die Anzahl der Anforderungen zu begrenzen. Durch einfache Code -Implementierung können wir böswillige Anforderungen effektiv verhindern und die Sicherheit des Systems verbessern und gleichzeitig die Benutzererfahrung sicherstellen.
Ich hoffe, der praktische Leitfaden in diesem Artikel wird Ihnen hilfreich sein und Ihnen helfen, Gespräche besser zu verwalten und Anfragen während des Entwicklungsprozesses zu begrenzen.