Защитаотспамаспомощью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
- - - / config / services.yaml+ + + b / config / services.yaml@@ -12 6 + 12 7 @@服务:可以使用autoconfigure:真正的#自动注册你的服务作为命令,事件订阅者,等困境:字符串$ photoDir:“% kernel.project_dir % /公共/上传照片”+字符串$ akismetKey:“% env (AKISMET_KEY) %”#在src /可以使类作为服务#这将创建一个服务每个类的id是完全限定的类名
AkismetРазумеется,мынебудемхранитьзначениеключавконфигурационномфайлеservices.yaml
,поэтомуиспользуемпеременнуюокружения(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 37
- - - / src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ 7,6 + 7,7 @@使用App \实体\会议;使用App \ \ CommentFormType形式;使用App \ Repository \ CommentRepository;使用App \ Repository \ ConferenceRepository;+使用App \ SpamChecker;使用原则\ ORM \ EntityManagerInterface;控制器使ob娱乐下载用Symfony \包\ FrameworkBundle \ \ AbstractController;组件使用ob娱乐下载Symfony \ \ HttpFoundation \文件\ \ FileException异常;@@ -35 7 + 36 7 @@类ConferenceController延伸AbstractController} #(路线(“/会议/{蛞蝓}”,名字:“会议”))公共函数显示(请求美元请求、会议会议上,美元CommentRepository CommentRepository美元,字符串photoDir美元):反应+公共函数显示(请求美元请求、会议会议上,美元CommentRepository CommentRepository美元,SpamChecker SpamChecker美元,字符串photoDir美元):反应{$评论=新的评论();$ = $ this - > createForm形式(CommentFormType::类,评论美元);@@ -53、6 + 54 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