防止垃圾邮件的API
防止垃圾邮件的API
任何人都可以提交反馈。即使是机器人,垃圾邮件发送者,等等。我们可以添加一些“验证码”的形式在某种程度上保护机器人,或者我们可以使用一些第三方api。
我已决定使用免费的Akismet服务展示如何调用一个API以及如何调用“乐队”。
Akismet签约上
注册一个免费账户akismet.com并获得Akismet API密钥。
根据Symfony HTTob娱乐下载PClient组件
而不是使用一个库,抽象Akismet API,我们将直接做所有的API调用。做HTTP调用自己更有效率(和让我们受益于Symfony调试工具的集成Symfony分析器)。ob娱乐下载
设计一个垃圾邮件检查程序类
下创建一个新类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
文件:
生产的“真实”环境变量应该被定义。
这工作得很好,但许多管理环境变量可能成为麻烦。在这种情况下,Symfony有一ob娱乐下载个“更好”的选择时存储的秘密。
存储秘密
许多环境变量,而不是使用Symfony可以管理ob娱乐下载库在那里你可以存储许多秘密。一个关键特性是能够提交库存储库中(但没有打开它的钥匙)。另一个很棒的特性是,它可以管理一个库/环境。
秘密是伪装的环境变量。
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——值
但如前所述,使用Symfony的秘密可能会更好。ob娱乐下载不安全的,但在秘密管理项目团队。所有的秘密都存储在仓库中,你唯一需要管理生产环境变量是解密的密钥。可以让任何人在团队添加生产秘密,即使他们没有生产服务器的访问。虽然涉及的设置多一点。
首先,为生产使用生成一对密钥:
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
要进一步