Ochrona przed spamem przy pomocy API
Ochrona przed spamem przy pomocy API
Każdy może przesłaćopinię。Nawet roboty, spamerzy itd。Możemy dodaćzabezpieczenie CAPTCHA formularza,赎w jakiśsposob ochronićsięprzed robotami, Możemy teżużyćzewnętrznych API。
Postanowiłem skorzystaćz darmowej usługiAkismet,赎zademonstrować,木菠萝wywołaćzapytanie API我木菠萝wykonaćpołączenie„poza widocznąwarstwą”。
Akismet Rejestracja w
Zarejestruj bezpłatne konto naakismet.com我uzyskaj klucz Akismet API。
Zależnośćod komponentu Sob娱乐下载ymfony HTTPClient
Akismet Zamiast korzystaćz biblioteki ktora obsługuje API, wykonamy wszystkie zapytania bezpośrednio做API。Wykonywanie zapytańHTTP samodzielnie jest bardziej efektywne(我pozwala南korzystać泽wszystkich narzędzi Symfony deob娱乐下载bugowania, takich木菠萝integracja z Symfony分析器)。
Projektowanie klasy垃圾邮件检查程序
Utworz nowąklasęw katalogusrc /
豆荚nazwąSpamChecker
w ktorej zawrzemy schemat działańodpowiadających咱wysłanie zapytania Akismet API我przetworzenie jego odpowiedzi。
Metoda请求()
Akismet klienta HTTP wysyła zapytanie POST pod URL ($ this - >端点
)我przekazuje tablicęparametrow。
MetodagetSpamScore ()
zwraca trzy wartości w zależności od odpowiedzi z API:
2
jeśli komentarz jest„rażącym spamem”(ang。明目张胆的垃圾邮件);1
jeśli komentarz może byćspamem;0
jeśli komentarz聂jest spamem。
提示
Użyj specjalnego adresu电子邮件akismet-guaranteed-spam@example.com
,赎wynik wywołania potraktowaćjako垃圾邮件。
Korzystanie泽zmiennychśrodowiskowych
KlasaSpamChecker
jest zależna od argumentuakismetKey美元
。Podobnie木菠萝w przypadku katalogu做zapisu plikow, możemy wstrzyknąć十论点咱pomocąadnotacji自动装配
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
- - - / src / SpamChecker.php+ + + b / src / SpamChecker.php@@ 3、6 + 3、7 @@名称空间的应用程序;使用App \实体\评论;+使用Syob娱乐下载mfony \ DependencyInjection \属性\ \组件自动装配;使用Syob娱乐下载mfony \ \ HttpClient \ HttpClientInterface合同;类SpamChecker @@ -11 7 + 12 7 @@类SpamChecker公共函数__construct(私人HttpClientInterface美元客户,——字符串akismetKey美元,+ #[自动装配(% env (AKISMET_KEY) %)]字符串akismetKey美元,){$ this - >端点= sprintf (https://%s.rest.akismet.com/1.1/comment-check, akismetKey美元);}
Akismet Z pewnością聂chcemy zapisywaćna stałe wartości klucza w kodzie więc zamiast迪高użyjemy zmiennejśrodowiskowej (AKISMET_KEY
)。
Następnie każdy programista ustawia faktycznązmiennąśrodowiskową滑zapisuje jej wartośćw pliku.env.local
:
W przypadkuśrodowiska produkcyjnego, należy zdefiniowaćfaktycznązmiennąśrodowiskową。
Działa nieźle,啤酒zarządzanie wieloma zmiennymiśrodowiskowymi może staćsięuciążliwe。W takim przypadku ob娱乐下载Symfony pozwala lepiej rozwiązaćprzechowywanie poufnych danych (ang。秘密)。
Przechowywanie poufnych danych (ang。秘密)
Zamiast używaćwielu zmiennychśrodowiskowych, Syob娱乐下载mfony może zarządzaćsejfemw ktorym można przechowywaćwiele poufnych danych。Jednąz kluczowych funkcji jest możliwośćzapisywania sejfu w repozytorium (jednak鹿角的第二叉klucza做jego otwarcia)。Kolejnąświetnącechą迪高rozwiązania开玩笑,że możemy zarządzaćjednym sejfem w ramach jednegośrodowiska。
Poufne戴恩sązamaskowanymi zmiennymiśrodowiskowymi。
Akismet Dodaj klucz API做sejfu:
1
美元ob娱乐下载symfony控制台的秘密:集AKISMET_KEY
1 2 3 4
请输入秘密值:>[好]秘密“AKISMET_KEY”加密“/ dev / config /秘密”;你可以提交它。
Ponieważuruchamiamy polecenie po拉兹pierwszy, w katalogu/ dev / config /秘密
pojawiły siędwa klucze。Następnie w tym samym katalogu zostałzapisanyAKISMET_KEY
。
Podczas进行wśrodowisku deweloperskim, możesz zdecydowaćsięna zapisanie w repozytorium sejfu oraz kluczy, ktore zostały wygenerowane w katalogu/ dev / config /秘密
。
Wartości poufnych danych mogąbyćnadpisane ustawieniem zmiennejśrodowiskowej o tej samej nazwie。
Sprawdzanie komentarzy pod kątem spamu
Podczas wysyłania nowego komentarza, prostym sposobem na sprawdzenie, czy spamem聂笑话,笑话wykorzystanie obiektu klasySpamChecker
przed zapisaniem danych做bazy danych:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36
- - - / src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ 7,6 + 7,7 @@使用App \实体\会议;使用App \ \ CommentType形式;使用App \ Repository \ CommentRepository;使用App \ Repository \ ConferenceRepository;+使用App \ SpamChecker;使用原则\ ORM \ EntityManagerInterface;控制器使ob娱乐下载用Symfony \包\ FrameworkBundle \ \ AbstractController;使用Syob娱乐下载mfony \ DependencyInjection \属性\ \组件自动装配;@@ -35 6 + 36 7 @@类ConferenceController延伸AbstractController请求请求美元,美元会议,会议CommentRepository CommentRepository美元,+ SpamChecker SpamChecker美元,#【自动装配(% photo_dir %)]字符串photoDir美元,反应):{$评论=新的评论();@@ -53年6 + 55岁,17 @@类ConferenceController延伸AbstractController} $ this - > entityManager - >保存($评论);++ $上下文= (+“user_ip”= > $请求- > getClientIp (),+“user_agent”= >请求- >标题- >获取美元(“用户代理”),+“推荐人”= >请求- >标题- >获取美元(“推荐人”),+“永久链接”= > $请求- > getUri (),+);+如果(2 = = = $ spamChecker - > getSpamScore(评论,上下文美元)){+把新\ RuntimeException(“明目张胆的垃圾邮件,走开!”);+}+$ this - > entityManager - >冲洗();返回$ this - > redirectToRoute(“会议”,(“鼻涕虫”= > $会议- > getSlug ()));
Sprawdź,czy dobrze działa。
Zarządzanie poufnymi danymi wśrodowisku produkcyjnym
Wśrodowisku produkcyjnym,平台。sh obsługuje ustawianiepoufnych zmiennychśrodowiskowych:
1
美元ob娱乐下载syob直播appmfony云:变量:创建——敏感= 1级=项目- y - name = env: =六边形abcdef AKISMET_KEY——值
啤酒木菠萝wspomniano powyżej, użycie sejfu przechowującego poufne戴恩może byćlepsze。聂zwiększa bezpieczeństwa,啤酒ułatwia zarządzanie nimi w zespole projektowym。Wszystkie poufne戴恩sąprzechowywane w repozytorium, jedynązmiennąśrodowiskową,o ktorąmusisz zadbaćwśrodowisku produkcyjnym, jest klucz odszyfrowujący。Dzięki temu każdy w zespole może dodaćpoufne戴恩,nawet jeśli聂马dostępu做serwerow produkcyjnych。Konfiguracja jest jednak nieco bardziej skomplikowana。
阿宝pierwsze, wygeneruj parękluczy做użytku produkcyjnego:
1
美元ob娱乐下载symfony控制台的秘密:生成密钥——env =刺激
在Linux和类似操作系统,使用
APP_RUNTIME_ENV =刺激
而不是——env =刺激
这避免了编译的应用程序刺激
环境:1
美元APP_RUNTIME_ENV = proob娱乐下载d symfony控制台的秘密:生成密钥
Akismet Ponownie wprowadźklucz做API w sejfie produkcyjnym,啤酒z wartością国防后勤局środowiska produkcyjnego:
1
美元ob娱乐下载symfony控制台的秘密:集AKISMET_KEY - env =刺激
Ostatnim krokiem jest wysłanie klucza odszyfrowującego做平台。sh poprzez ustawienie poufnej zmiennej:
1
美元ob娱乐下载syob直播appmfony云:变量:创建——敏感= 1级=项目- y - name = env: SYMFONY_DECRYPTION_SECRET——价值= ' php - r“回声base64_encode(包括(“配置/机密/刺激/ prod.decrypt.private.php”));””
Możesz dodawać我zatwierdzać(ang。提交)w repozytorium wszystkie pliki;klucz odszyfrowujący zostałdodany做.gitignore
automatycznie, więc nigdy聂zostanie w nim zatwierdzony。国防后勤局większego bezpieczeństwa można去usunąćz maszyny lokalnej, ponieważzostałjużwdrożony SymfonyClob娱乐下载oud:ob直播app
1
美元rm - f配置/机密/刺激/ prod.decrypt.private.php