垃圾邮件voorkomen中间层API
垃圾邮件voorkomen中间层API
edereen kan反馈geven。Ook脚本zoals机器人en垃圾邮件发送者。我们甚至“验证码”kunnen tovogen aan het formula ulier waardoor het zeker niveau van bescherming krijgt tegen dit sort脚本。的,我们不能使外部API的。
Ik heb besloten om de freesAkismetservice te gebruiken, om te latzien hoe je een API kunt aanroepen en hoe je de call "out of band" kunt maken。
Aanmelden bij Akismet
熔合是免费的akismet.comen ontvang de Akismet API key。
Symfony httpclient组件ob娱乐下载
在apats van een specifieke library te gebruiken voor de Akismet API中,zullen we alle API调用直接ui。HTTP-calls是efficiënter (Symfony调试工具,zoals de integratie met de Symfony profiteren)。ob娱乐下载
甚至是垃圾邮件检查员
Creëer een nieuwe class onder desrc /
Map遇到了de naamSpamChecker
。在我们的逻辑上,在我们的思想上,在我们的思想上,在我们的思想上:
德请求()
HTTP客户端verstuurt een POST请求naar de Akismet URL ($ this - >端点
) en geeft hier甚至散发着参数。
德getSpamScore ()
method geeft, afhankelijk van de API-response één van deze 3 wararden terug:
2
: als de reaction "overduidelijk spam"是;1
: als de reaction“mogelijk spam”kan zijn;0
: als de reaction“geen spam”(火腿)是。
提示
特色菜akismet-guaranteed-spam@example.com
电子邮件的结果,甚至打电话给垃圾邮件。
Omgevingsvariabelen gebruiken
德SpamChecker
阶级是afhankelijk van eenakismetKey美元
论点。Net als bij de上传目录,kunnen we deze injecteren via een自动装配
annotatie:
12 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合同;-11,7 +12,7 @@类SpamChecker公共函数__construct(private HttpClientInterface $client,- string $akismetKey,+ #[Autowire('%env(AKISMET_KEY)%')] string $akismetKey,) {$this->endpoint = sprintf('https://%s.rest.akismet.com/1.1/comment-check', $akismetKey);}
我们在代码中硬编码。在plaats daarvan gebruiken we de omgevingsvariabele (AKISMET_KEY
).
在德瓦尔德斯兰的石碑上,他是个人的.env.local
bestand:
Voor productie moet even“echte”环境变量gedefiniëerd worden。
那是过去了,maar beheer van veel环境变量kan omslachtig worden。ob娱乐下载Symfony heefy甚至是“更好的”选择,它必须小心的秘密。
秘密bewaren
在platts van veel omgevingsvariabelen te gebruiken, kan Syob娱乐下载mfony甚至库在这里我有秘密。甚至belangrijke特征hiervan是de mogelijkheid om de vault aan de repository toe te voegen (maar zonder de decryptiesleutel om de inhoud te lezen)。甚至一个重要的特征是dat je één vault per omgeving kan beheren。
秘密zijn verkapte环境变量。
Voeg de Akismet key toe aan de vault:
1
$ob娱乐下载Symfony控制台的秘密:集AKISMET_KEY
1 2 3 4
> [OK] secret "AKISMET_KEY" encrypted in "config/secrets/dev/";你可以承诺。
Omdat dit de ererste keer是我们的突击队员在de/ dev / config /秘密
gegenereerd地图。德AKISMET_KEY
秘密werd vervolgens在diezelfde地图opgeslagen。
Voor发展秘密kan je er Voor kiezen om de vault en de sleutels死于/ dev / config /秘密
目录zijn gegenereerd te committen。
秘密kunnen ook worden overschreven door甚至环境变量遇到dezelfde naam在te stellen。
反应控制员操作垃圾邮件
enenvoudige manier om nieuwe reacties te controleren op spam,是垃圾邮件检查器aanroepen voordat de gegevens在数据库worden opgeslagen:
12 34 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\Entity\Conference;使用App \ \ CommentFormType形式;使用App \ Repository \ CommentRepository;使用App \ Repository \ ConferenceRepository;+使用App \ SpamChecker;使用原则\ ORM \ EntityManagerInterface;控制器使ob娱乐下载用Symfony \包\ FrameworkBundle \ \ AbstractController;使用Syob娱乐下载mfony \ DependencyInjection \属性\ \组件自动装配;@@类ConferenceController扩展AbstractController请求$ Request,会议$ Conference, CommentRepository $ CommentRepository,+ SpamChecker $ SpamChecker,#[autoire ('%photo_dir%')] string $photoDir,): Response {$comment = new comment ();@@ -53,6 +55,17 @@ class ConferenceController extends AbstractController} $this->entityManager->persist($comment);++ $context = [+ 'user_ip' => $request->getClientIp(),+“user_agent”= >请求- >标题- >获取美元(“用户代理”),+“推荐人”= >请求- >标题- >获取美元(“推荐人”),+ 'permalink' => $request->getUri(),+);+ if (2 === $spamChecker->getSpamScore($comment, $context)) {+ throw new \RuntimeException('公然的垃圾邮件,走开!');+}+$ this - > entityManager >冲洗();return $this->redirectToRoute('conference', ['slug' => $conference->getSlug()]);
控制器失灵了。
秘密存在于产品中
在productie ondersteunt Platform.sh het instellen van敏感的环境变量:
1
$ob娱乐下载syob直播appmfony cloud:variable:create——sensitive=1——level=project -y——name=env:AKISMET_KEY——value=abcdef
Zoals hierboven besproken是het gebruik van Symob娱乐下载fony secrets mogelijk更好。Niet voor de veiligheid, maar om het beheer van秘密,甚至让voor het项目团队。所有秘密都是在仓库里的秘密是在仓库里的秘密是在生产的秘密。那个maakt het voor iedereen在他的团队中mogelijk产品机密toe te vogen, zelfs als geen toegang hebben tot产品服务器。装置更复杂。
在产品方面:
1
$ob娱乐下载Symfony控制台秘密:generate-keys——env=prod
在Linux及类似操作系统下,请使用
APP_RUNTIME_ENV =刺激
而不是——env =刺激
类型的应用程序的编译刺激
环境:1
$APP_RUNTIME_ENV=prod ob娱乐下载symfony控制台秘密:生成密钥
Voeg het Akismet secret opnieuw toe in de productie vault, maar nu meet de productie waarde:
1
$ob娱乐下载Symfony控制台的秘密:集AKISMET_KEY - env =刺激
Als laatste stap configureren we de decryptiesleutel op Platform.sh door het instellen van een敏感变量:
1
$ob娱乐下载syob直播appmfony cloud:variable:create——sensitive=1——level=project -y——name=env:SYMFONY_DECRYPTION_SECRET——value= ' php -r“回声base64_encode(包括(“配置/机密/刺激/ prod.decrypt.private.php”));”`
我能在我的身上看到一切;解密密钥是自动的.gitignore
说错了,说错了。Voor meer veiligheid kan je deze van je lokale机器verwijderen, omdat deze al gedeploy是:
1
$Rm -f config/secrets/prod/prod.decrypt.private.php