Récemment, plusieurs frères d'applications sociales sont venus me voir pour me faire part de leurs doléances, disant que leur interface API est brossée tous les jours, et que le chargement des images est si lent que l'utilisateur s'en maudit directement. De nos jours, il n'est pas facile de s'engager dans des produits sociaux, les concurrents crawlent malicieusement les données, les bandes de chantage brossent les interfaces, le serveur ne bouge pas pendant les temps d'arrêt, l'expérience de l'utilisateur est au plus bas. J'ai jeté un coup d'œil à leur architecture, un bon gars, un serveur API nu directement exposé au réseau public, même pas une protection décente, ça n'attend pas d'être martelé ?
Les interfaces API sont vulnérables aux attaques CC, à l'enregistrement malveillant, au bombardement de SMS, au crawling de contenu, et les ressources statiques telles que les images et les vidéos sont confrontées au risque de vol de chaîne, d'attaques lentes et d'épuisement de la bande passante. Se contenter de compter sur la résistance du serveur est tout simplement irréaliste - plus le coût de la machine sur le ciel, ne pas ajouter l'expérience de la machine crash. J'ai vu trop d'équipes s'engager dans la sélection technique de la fosse, acheter une IP de haute défense mais découvrir que la vitesse de chargement des images est touchante, avec un CDN ordinaire et ne peut pas empêcher la couche API d'attaques de précision.
Une solution vraiment efficace doit reposer sur une gouvernance en couches : la protection des API doit être suffisamment stricte pour identifier les utilisateurs normaux et le trafic malveillant ; le chargement des ressources doit être suffisamment rapide pour garantir une expérience d'accès globale. Ces éléments doivent être combinés avec la capacité de nettoyage distribué et la stratégie de planification intelligente du CDN de haute défense, plutôt que d'acheter simplement une grande largeur de bande pour terminer le travail. Ci-dessous, j'ai combiné mon expérience avec celle des tests, pour expliquer comment atterrir.
Commençons par la logique de base de la protection des API. Ne croyez pas la propagande de la “protection en un clic”, les attaques d'API ont depuis longtemps évolué pour simuler le comportement de personnes réelles. J'ai constaté qu'il est facile de se fier uniquement à la restriction de la fréquence IP, en particulier pour les réseaux de campus et d'entreprise qui partagent des prises NAT. La clé est de construire une image à partir de plusieurs dimensions : les caractéristiques temporelles des requêtes, les empreintes digitales des appareils, l'intégrité de la chaîne d'appels API, et même le caractère raisonnable de la logique d'entreprise.
Par exemple, la protection de l'interface de connexion, en plus de la limite de vitesse normale de l'IP, vous devez ajouter une vérification secondaire de la vérification humaine. Lorsque la même IP lance plusieurs demandes de connexion dans un court laps de temps, la vérification par curseur est déclenchée en premier lieu ; si elle continue à être anormale, le code de vérification par SMS est demandé. Cet ensemble de combinaisons permet d'éliminer l'attaque par écrasement du 90%. Voici la configuration de limitation dynamique du flux que nous avons mise en œuvre dans la couche Nginx :
Mais le niveau Nginx ne peut assurer que la protection de base, les règles plus détaillées doivent s'appuyer sur le WAF. Les CDN de haute défense du marché fournissent une fonction de règles personnalisées, j'ai comparé CDN5 et CDN07, l'écart de flexibilité de la stratégie est très important. Le moteur de règles de CDN5 prend en charge l'extension de script Lua, peut ancrer des données de contrôle du vent en temps réel, telles que cette configuration :
La configuration des règles de CDN07 est assez faible, bien que l'interface soit élégante, mais la couche inférieure repose toujours sur l'ensemble des règles WAF traditionnelles, qui sont fondamentalement inefficaces dans l'attaque de la logique commerciale. La récente nouvelle fonction edge de 08Host est un point lumineux, qui peut directement exécuter la logique JavaScript dans le nœud CDN pour réaliser le contrôle du risque commercial, par exemple, “si le même utilisateur prête attention à plus de 100 personnes dans les 5 minutes, il déclenche automatiquement la vérification”. Le même utilisateur suit plus de 100 personnes en cinq minutes, ce qui déclenche automatiquement la vérification de ce type de contrôle du risque d'entreprise.
La protection des ressources d'images est une autre histoire. La vitesse de chargement des images des applications sociales affecte directement le taux de rétention, mais il est facile de se faire piéger par le vol de chaîne et les attaques DDoS en cas de trafic important. Je suggère de séparer complètement le trafic dynamique du trafic statique : les API sont placées sur des lignes de défense élevées, tandis que les images et les vidéos sont placées sur des lignes accélérées. De nombreuses personnes essaient de s'épargner des problèmes en accélérant l'ensemble du site, ce qui a pour effet de mettre en cache les demandes d'API et d'entraîner un désalignement des données.
La meilleure solution consiste à utiliser des noms de domaine différents pour diviser l'activité : api.yourapp.com pointe vers un CDN de haute défense, img.yourapp.com pointe vers un CDN purement accéléré. De cette façon, le trafic d'attaque n'encombrera pas la bande passante de l'image, et vous pouvez optimiser la configuration pour différents scénarios. N'oubliez pas d'activer la chaîne antivol et l'authentification par jeton pour les domaines d'images, afin que les gens ne prennent pas facilement votre lit d'images comme un repas gratuit :
La stratégie de mise en cache doit également être conçue avec soin. La durée de mise en cache des petits fichiers tels que les avatars et les émoticônes peut être plus longue (plus de 30 jours), et il est recommandé de mettre en cache les images de flux en fonction de la hiérarchie des niveaux de chaleur : le contenu chaud est mis en cache au niveau du nœud périphérique, et le contenu froid est récupéré à la source. J'ai testé la fonction de préchauffage intelligent du cache sur le CDN5, en poussant le contenu qui devrait exploser vers les nœuds périphériques à l'avance, et le délai de chargement des images a chuté de 40% pendant les heures de pointe du soir.
L'environnement du réseau mobile est complexe, mais il faut aussi tenir compte de l'optimisation du protocole. Dans un environnement de réseau faible, les performances du protocole HTTP/3 sont nettement meilleures que celles du protocole HTTP/2, en particulier dans le cas du taux élevé de perte de paquets du réseau 4G. Cependant, à ce stade, le coût de l'ouverture complète de QUIC est élevé, il est recommandé que le premier nom de domaine d'image pour ouvrir HTTP/3 pilote, nom de domaine API pour maintenir le protocole TCP pour assurer la fiabilité. 08Host HTTP/3 mise en œuvre est plus stable, et prend en charge la récupération de connexion 0-RTT, les scénarios de commutation de réseau mobile fréquents est très sympathique.
Les alarmes de surveillance ne doivent jamais être négligées. J'ai déjà été appelé au milieu de la nuit pour faire face à une attaque parce que je n'avais pas configuré d'alarme de surcharge de la bande passante. Désormais, je configurerai trois niveaux d'alertes en arrière-plan du CDN : envoi d'un rappel lorsque la bande passante dépasse 80%, déclenchement automatique de l'expansion élastique lorsque le QPS est anormal, et appel direct lorsque le taux d'erreur 5xx dépasse 1%. Un fournisseur de services CDN vraiment fiable devrait fournir des rapports d'attaque en temps réel. Par exemple, la fonction d'analyse des attaques de CDN07 affiche clairement le type d'attaque, la région source et l'IP d'attaque TOP.
Enfin, un mot sur la maîtrise des coûts. Le prix des CDN de haute défense a beaucoup d'eau, n'achetez pas directement en fonction de l'offre du site web officiel. Les grandes quantités peuvent passer par le prix contractuel, qui est généralement réduit de 5 à 7 %. Si le trafic est faible, il est plus rentable d'utiliser la facturation basée sur le volume, mais il faut faire attention à l'explosion de la facture causée par un trafic soudain. Il existe un moyen astucieux : le trafic API vers le forfait de défense élevée, les images et les vidéos vers le forfait de trafic bon marché (tel que le forfait de trafic de temps mort de 08Host), le coût global peut être réduit de 60% ou plus.
Quelle que soit la perfection du programme technique, il ne sert à rien s'il n'est pas accompagné de processus de soutien. Il est recommandé de mettre en place un système de test de pénétration régulier, au moins une fois par mois pour effectuer une analyse complète des vulnérabilités. Les nouvelles fonctionnalités doivent être mises en ligne avant l'examen de sécurité, en se concentrant sur la vérification de la puissance de l'interface et du contrôle de l'autorité. L'environnement en ligne est strictement isolé et il est interdit d'introduire la configuration de la base de données de test dans l'environnement de production - j'ai vu ce type d'erreur de bas niveau pas moins de dix fois.
En fin de compte, l'essence de la protection consiste à trouver un équilibre entre l'expérience et la sécurité. Si l'on scelle trop fort, on tue l'utilisateur réel ; si l'on scelle trop lâche, on exploite les failles par le chantage. La meilleure solution consiste à mettre en place une défense multicouche : les nœuds en périphérie pour effectuer un filtrage à gros grain, le cluster central pour contrôler le vent à grain fin, puis en combinaison avec les données du client signalées pour former une boucle fermée. Ne vous attendez pas à une solution unique, la sécurité est un processus continu de confrontation.
Après de nombreuses vérifications, j'utilise désormais une combinaison de programmes : protection des API avec CDN5 + passerelle de contrôle des vents, accélération des images avec le réseau de planification intelligent 08Host, données importantes, puis mise en place d'une couche de transmission cryptée privée. Cet ensemble d'architecture permet de supporter la pression quotidienne de dix millions d'applications sociales, avec un taux d'interception des attaques API de 98% ou plus, et un contrôle du temps de chargement des images P90 inférieur à 800 ms. La clé réside dans la maîtrise des coûts, et non dans le fait que la protection doit rendre l'architecture trop complexe.
Parler sur le papier est toujours superficiel, on veut vraiment prévenir les attaques mais il faut aussi continuer à itérer. Il est recommandé d'effectuer un exercice trimestriel d'attaque et de défense pour simuler des scénarios d'attaque réels afin de tester le système de protection. Rencontrer de nouvelles techniques d'attaque et mettre à jour les règles en temps utile, ne pas attendre les problèmes pour y remédier. N'oubliez pas : il n'existe pas de système de sécurité absolu, mais seulement une évolution continue de la stratégie de défense.

