机器多次恶意提交攻击简单防范
先说背景:机器不断的发送请求或者恶意提交,会给服务器造成很大压力;针对这种攻击
最优的策略是判断提交次数,产生动态验证码
,即判断ip规定时间内重复发送达到N次弹出验证码
。下面是小拽在实践过程中一个简单的识别ip,利用session记录和防御的过程。
识别和校验ip
过程如下;
识别ip
ip属于白名单直接通过[白名单策略:内网ip+指定ip表]
利用session存储ip的请求时间戳
校验规定时间内ip的请求次数
采取相应的措施
<code>/** * 获取和校验ip;同时防止短时间内多次提交 * * @notice :弹出验证码,需要替换掉echo $echo_str 即可。 * @return string :返回校验成功的ip */ protected function getAndCheckIP() { // 获取环境ip if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; // check 环境ip if (!$this->isWhiteList($ip)) { $echo_str = "提交过于频繁,请稍后再试!"; // 构建ip的时间栈数据 if (!is_array($_SESSION[$ip])) { $_SESSION[$ip] = array(); } if (isset($_SESSION[$ip][0])) { $_SESSION[$ip][] = time(); // session 保存时间为6小时。清理session $post_interval_first = time() - $_SESSION[$ip][0]; if ($post_interval_first > 21600) { $_SESSION[$ip] = array(); } // 两次提交小于1s,禁止提交 $post_interval_pre = time() - $_SESSION[$ip][count($_SESSION[$ip]) - 3]; if ($post_interval_pre </code>
白名单策略
白名单策略采用:内网ip放行和特定ip放行
<code>/** * 检验是否存在于白名单中 * * @param $ip :校验的ip * @return bool :校验结果 */ function isWhiteList($ip){ /** * 内网ip默认全部存在于白名单中 */ if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)){ return true; } // 是否在写死的whitelist 里面 return in_array($ip,$this->_WHTTE_LIST); } </code>
防攻击策略
小拽采用的比较简单的策略,如上面代码,实际过程中可以结合业务需求。
1s内禁止重复提交
5s内提交上限3次
60s内提交上限5次
6小时内提交上限10次
【转载请注明:机器多次恶意提交攻击简单防范 | 靠谱崔小拽 】
以上就介绍了机器多次恶意提交攻击简单防范,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

1. Black/White-List-IP-Einschränkungskonfiguration Nginx bietet mehrere Möglichkeiten, Black- und White-Lists zu konfigurieren. Hier sind nur zwei häufig verwendete Methoden. 1. Die erste Methode: Die Anweisungen „allow“, „denydeny“ und „allow“ gehören zu ngx_http_access_module. Nginx lädt dieses Modul standardmäßig, sodass es direkt verwendet werden kann. Diese Methode ist die einfachste und direkteste. Die Einstellung ähnelt der Firewall iptable. Verwendung: Fügen Sie direkt zur Konfigurationsdatei hinzu: #Whitelist-Einstellungen, gefolgt von „Zulassen ist zugänglich“ IPlocation/{allow123.13.123.12;allow23.53.32.1/100;denyall;}# Blacklist-Einstellungen,

So überprüfen Sie die IP-Adresse auf WeChat: 1. Melden Sie sich bei der Computerversion von WeChat an, klicken Sie mit der rechten Maustaste auf die Taskleiste am unteren Bildschirmrand und klicken Sie auf „Task-Manager“. 2. Wenn der Task-Manager angezeigt wird, klicken Sie auf „; Details“ in der unteren linken Ecke; 3. Aufgabenverwaltung Geben Sie die Option „Leistung“ des Browsers ein und klicken Sie auf „Ressourcenmonitor öffnen“; 4. Wählen Sie „Netzwerk“ und überprüfen Sie den WeChat-Prozess „Wechat.exe“; 5. Klicken Sie auf „ TCP-Verbindung“ unten, um die IP-bezogene Situation des WeChat-Netzwerks zu überwachen. Wenn Sie eine Nachricht senden und eine Antwort erhalten, wird die IP-Adresse der anderen Person angezeigt.

1. Legen Sie die Verzeichnis-Whitelist fest: Es gibt keine Einschränkung für den angegebenen Anforderungspfad. Wenn es keine Einschränkung für den Anforderungspfad zum API-Verzeichnis gibt, kann er als server{location/app{proxy_passhttp://192.168.1.111 geschrieben werden: 8095/app ;limit_connconn20;limit_rate500k;limit_reqzone=fooburst=5nodelay;}location/app/api{proxy_passhttp://192.168.1.111:8095/app/api}}#Weil Nginx der genauen Übereinstimmung Priorität einräumt

Ein Sitzungsfehler wird normalerweise durch den Ablauf der Sitzungslebensdauer oder das Herunterfahren des Servers verursacht. Die Lösungen: 1. Verlängern Sie die Lebensdauer der Sitzung. 3. Verwenden Sie Cookies. 4. Aktualisieren Sie die Sitzung.

Lösung des domänenübergreifenden Problems von PHPSession Bei der Entwicklung der Front-End- und Back-End-Trennung sind domänenübergreifende Anforderungen zur Norm geworden. Wenn es um domänenübergreifende Probleme geht, nutzen wir in der Regel Sitzungen und verwalten diese. Aufgrund von Richtlinieneinschränkungen für den Browserursprung können Sitzungen jedoch standardmäßig nicht über Domänen hinweg gemeinsam genutzt werden. Um dieses Problem zu lösen, müssen wir einige Techniken und Methoden verwenden, um eine domänenübergreifende gemeinsame Nutzung von Sitzungen zu erreichen. 1. Die häufigste Verwendung von Cookies zum domänenübergreifenden Teilen von Sitzungen

Konzept: uv (uniquevisitor): eindeutiger Besucher, jeder unabhängige mit dem Internet verbundene Computer (basierend auf Cookies) wird als Besucher betrachtet und die Anzahl der Besucher, die Ihre Website innerhalb eines Tages (00:00–24:00 Uhr) besuchen. Besuche desselben Cookies innerhalb eines Tages werden nur einmal gezählt. PV (Seitenaufruf): Besuche, also Seitenaufrufe oder Klicks, jeder Besuch der Website durch den Benutzer wird einmal erfasst. Wenn ein Benutzer dieselbe Seite mehrmals besucht, wird die Gesamtzahl der Besuche gezählt: Die gleiche IP-Adresse wird nur einmal zwischen 00:00 und 24:00 Uhr gezählt Ich gebe zunächst die Umgebung an, in der Nginx Version 1.7 ausgeführt wird. Das Backend Tomcat läuft dynamisch

Lösung für WLAN, bei dem keine IP-Zuweisung angezeigt wird: 1. Starten Sie das Gerät und den Router neu, schalten Sie die WLAN-Verbindung auf dem Gerät aus, schalten Sie das Gerät aus, schalten Sie den Router aus, warten Sie einige Minuten und öffnen Sie dann den Router erneut, um eine Verbindung zum WLAN herzustellen 2. Überprüfen Sie die Router-Einstellungen und starten Sie DHCP neu. 3. Setzen Sie die Netzwerkeinstellungen zurück, wodurch alle gespeicherten WLAN-Netzwerke und Passwörter gelöscht werden. 4. Aktualisieren Sie Nachdem Sie die Router-Firmware installiert haben, melden Sie sich bei der Router-Verwaltungsschnittstelle an, suchen Sie nach den Optionen für die Firmware-Aktualisierung und befolgen Sie die Anweisungen.

Problem: Heute ist in unserem Projekt ein Zeitüberschreitungsproblem aufgetreten, und Änderungen an den application.properties von SpringBoot2 wurden nie wirksam. Lösung: Die server.*-Eigenschaften werden verwendet, um den eingebetteten Container zu steuern, der von SpringBoot verwendet wird. SpringBoot erstellt eine Instanz des Servlet-Containers mithilfe einer der ServletWebServerFactory-Instanzen. Diese Klassen verwenden server.*-Eigenschaften, um den kontrollierten Servlet-Container (Tomcat, Jetty usw.) zu konfigurieren. Wenn die Anwendung als WAR-Datei auf einer Tomcat-Instanz bereitgestellt wird, gelten die server.*-Eigenschaften nicht. Sie gelten nicht,
