ЗащитаотспамаспомощьюAPI
ЗащитаотспамаспомощьюAPI
Отзывможетоставитьктоугодно,включаяроботовиспамеров。Поэтому,чтобыснизитьпотокспама,мыможемлибодобавитьвформукапчу,либоиспользоватьсторонниеAPI。
ЯрешилиспользоватьбесплатныйсервисAkismet,чтобыпоказать,какможноработатьAPIсикаквыполнятьвнешниезапросы。
AkismetРегистрацияв
Зарегистрируйтебесплатныйаккаунтнаakismet.comAkismetиполучитеключAPI。
ДобавлениекомпонентаSyob娱乐下载mfony HTTPClient
AkismetМыбудемобращатьсякAPIнапрямуювместоиспользованиясоответствующейбиблиотекидляэтого。ВыполнениеHTTP-запросовсамостоятельноболееэффективно(кромеэтогодаётиспользоватьинструментыотладкиSymfony,вклob娱乐下载ючаяпрофилировщикSymfony)。
Созданиеклассадляпроверкинаспам
Вдиректорииsrc /
создадимновыйклассSpamChecker
Akismet API,которыйбудетсодержатьлогикуотправкизапросакиобработкуегоответа:
МетодHTTP-клиента请求()
AkismetотправляетPOST-запроснаURL-адрес($ this - >端点
)ипередаётмассивпараметров。
МетодgetSpamScore ()
возвращает3значениявзависимостиотответанаAPI-вызов:
2
:есликомментарийявляетсяявнымспамом;1
:есликомментарийможетбытьспамом;0
:есликомментарийнеспам(такназываемый火腿)。
提示
Используйтеспециальныйадресэлектроннойпочтыakismet-guaranteed-spam@example.com
,чтобыантиспам-сервиспометилтакоесообщениекакспамивытакимобразомсмоглипроверитьегоработу。
Использованиепеременныхокружения
КлассSpamChecker
зависитотпараметраakismetKey美元
。Какивслучаесдиректориейдлязагруженныхфайлов,мыможемвнедритьэтотпараметрспомощьюаннотации自动装配
:
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Разумеется,мынебудемхранитьзначениеключавкоде,поэтомуиспользуемпеременнуюокружения(AKISMET_KEY
)。
Затемкаждыйразработчикможетсамопределитьпеременнуюокружениявтерминалеилихранитьключвфайле.env.local
:
Однаковпродакшенедолжнабытьопределенатолько“реальнаяпеременнаяокружениявтерминале。
Этонеплохойрабочийвариант,хотяуправлениемножествомпеременныхокруженияможетстатьобременительным。ВтакомслучаеуSymfob娱乐下载onyестьлучшаяальтернатива,когдаречьзаходитохраненииконфиденциальныхданных。
Хранениеконфиденциальныхданных
Вместоиспользованиямножествапеременныхокружения,вSymfonob娱乐下载yестьхранилище,вкоторомможнопоместитьмногоконфиденциальныхданных。Средиоднойизключевыхособенностей——можносохранитьхранилищеврепозитории(нобезключа,чтобыегооткрыть)。Другоезамечательноепреимуществосостоитвтом,чтодлякаждогоокруженияможетбытьсозданособственноехранилище。
Наделетакиеконфиденциальныеданныеявляютсянеявнымипеременнымиокружения。
AkismetДобавьтеключвхранилище:
1
美元ob娱乐下载symfony控制台的秘密:集AKISMET_KEY
1 2 3 4
请输入秘密值:>[好]秘密“AKISMET_KEY”加密“/ dev / config /秘密”;你可以提交它。
Посколькумызапускаемэтукомандувпервые,онасгенерироваладваключавдиректорию/ dev / config /秘密
。ЗатемэтакомандасохраниласекретнуюстрокуAKISMET_KEY
вэтойжедиректории。
Дляхраненияконфиденциальныхданныхвпроцессеразработкивыможетесохранитьврепозиториихранилищевместесключамивдиректории/ dev / config /秘密
。
Всеконфиденциальныеданныетакжеможнопереопределитьпутёмопределенияодноимённойпеременнойокружения。
Проверкакомментариевнаспам
Приотправкеновогокомментарияоднимизпростыхспособовпроверитьегонаспам——вызватьантиспам-сервиспередсохранениемданныхвбазеданных:
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 ()));
Убедитесь,чтовсёработаетправильно。
Управлениеконфиденциальнымиданнымивпродакшене
Дляпродакшена平台。shподдерживаетустановкуконфиденциальныхпеременныхокружения:
1
美元ob娱乐下载syob直播appmfony云:变量:创建——敏感= 1级=项目- y - name = env: =六边形abcdef AKISMET_KEY——值
Однако,какотмечалосьвыше,использованиемеханизмаSymfonob娱乐下载yдляуправленияконфиденциальнымиданнымиможетбытьболеепредпочтительнымвариантом。Нонесточкизрениябезопасности,авпланеуправлениясекретнымиданнымивкомандепроекта。Посколькувсеконфиденциальныеданныехранятсяврепозитории,точтобыиспользоватьихвпродакшененужнатолькоспециальнаяпеременнаяокружениясключомдешифрования。Благодарятакомуподходукаждыйучастниккомандыможетдобавитьновыезащищённыепеременныеокружениядляиспользованиявпродакшене,дажееслиунегонеткнемудоступа。Хотядлянастройкиэтогопроцессанужнокое-чтосделать。
Преждевсего,сгенерируйтепаруключейдляиспользованиявпродакшене:
1
美元ob娱乐下载symfony控制台的秘密:生成密钥——env =刺激
在Linux和类似操作系统,使用
APP_RUNTIME_ENV =刺激
而不是——env =刺激
这避免了编译的应用程序刺激
环境:1
美元APP_RUNTIME_ENV = proob娱乐下载d symfony控制台的秘密:生成密钥
AkismetПовторнодобавьтеключвхранилищепродакшена,нотеперьужесегодействительнымзначением:
1
美元ob娱乐下载symfony控制台的秘密:集AKISMET_KEY - env =刺激
Последнийшаг——отправьтеключдешифрованияв平台。sh,установивспециальнуюдляэтогопеременную:
1
美元ob娱乐下载syob直播appmfony云:变量:创建——敏感= 1级=项目- y - name = env: SYMFONY_DECRYPTION_SECRET——价值= ' php - r“回声base64_encode(包括(“配置/机密/刺激/ prod.decrypt.private.php”));””
Можнодобавитьвсефайлыврепозиторий,таккакфайлсключомдешифрованияужеигнорируетсяв.gitignore
,поэтомуонникогданебудетзафиксирован。Длябольшейбезопасностилучшеудалитеегосвашегокомпьютера,потомучтоонужеестьвпродакшенеибольшенепонадобится:
1
美元rm - f配置/机密/刺激/ prod.decrypt.private.php