防止垃圾邮件欺骗api
防止垃圾邮件欺骗api
Chiunque può inviare un feedback。雪崩机器人,垃圾邮件制造者。Potremmo aggiungere un po' di "captcha" al form per essere in qualche modo protetti dai robot, oppure possiamo usare API di terze parti。
免费提供反垃圾邮件服务Akismetper dimostrare come fare chiamate ad un'API e come fare la chiamata“fuori banda”。
Iscrizione ad Akismet
创建免费帐户akismet.come così ottenete la chiave API fornita dal servizio。
Aggiungere il componente HTTPClient di ob娱乐下载Symfony
我有我的图书馆,我有我的图书馆,我有我的chiamate。HTTP è più effente (e ci permette di beneficiare di tutti gli strumenti di debug di Symfony, come l'integrazioneob娱乐下载 con il Profiler)。
设计diuna类每il控制delospam
创建una nuova类内拉卡特尔src /
, chiamatelaSpamChecker
: la class conterrà la logica di chiamata alle API i Akismet e la logica per interpretarne le risposte:
Il metodo请求()
del client HTTP invia una richiesta POST all'URL di Akismet ($ this - >端点
) e passa UN array di parameter。
Il metodogetSpamScore ()
chiamata的翻译结果:
2
: se il commento è uno "spam palese";1
: seril commento potrebbe essere spam;0
: se il commento è sicuro e non è spam (il cosiddetto“ham”)。
提示
用特别的靛蓝akismet-guaranteed-spam@example.com
Per forzare il risultato Della chiamata a“spam”。
利用环境的可变性
洛杉矶的架势SpamChecker
Si basa sul parametroakismetKey美元
.来吧,就像漫画里的卡特尔一样自动装配
:
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);}
在这个世界上,有一个环境的变化,在这个世界上,有一个环境的变化AKISMET_KEY
).
在你档案里的"记忆的价值"的环境变量.env.local
:
根据生产环境,我将环境变量定义为“真实”。
好吧,这是一个变幻莫测的环境。在questo caso, Syob娱乐下载mfony offre un'alternativa "migliore" quando si tratta di conservare stringhe segrete。
Salvare stringhe segrete
环境的变化,Symfony può姿态ob娱乐下载portachiavi鸽子è可能的记忆串他隔离。Una caratteristica chiave è la possibilità di effettuare il commit del portachiavi nel repository (ma senza la chiave per aprilo)。这是一个伟大的卡拉特è这是一个美好的环境。
这是一种不一样的环境。
Aggiungete la chiave API Akismet al portachiavi:
1
$ob娱乐下载Symfony控制台的秘密:集AKISMET_KEY
1 2 3 4
> [OK] secret "AKISMET_KEY" encrypted in "config/secrets/dev/";你可以承诺。
Poiché è la prima volta che eseguiamo questo commando, sono state generate due chiavi nella cartella/ dev / config /秘密
.这是一个秘密的秘密AKISMET_KEY
, nella stessa cartella。
Per le stringhe segrete usate nell'ambiente di sviluppo, si può decidere di fare il commit del portachiavi e delle chiavi generate nella cartella/ dev / config /秘密
.
这是一种不可避免的情况,这是一种不可改变的环境。
Controllo dello spam nei commenti
Un modo semplice per controllare se Un commento附录ricevuto sia da marcare come spam consistnel richiamare la classse SpamChecker, prima di memorizzare i dati nel数据库:
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()]);
Controlliamo che funzioni bene。
手势在生产中隔离
Per la produzione, Platform.sh supporta l'impostazione di敏感环境的变化:
1
$ob娱乐下载syob直播appmfony cloud:variable:create——sensitive=1——level=project -y——name=env:AKISMET_KEY——value=abcdef
马,来吧,阿比阿莫già visto,我们有一条与之隔离的弦。ob娱乐下载不是在工作的尽头,而是在工作的尽头。分离的弦,记忆的记忆仓库,唯一的环境,生产的方式,变化的环境è。询问是否有可能建立一个特殊的团队,提供特殊的服务。图塔维亚il设置risulterà un po' più complesso。
在primo luogo, generare una coppia di chiavi per l'uso在produzione:
1
$ob娱乐下载Symfony控制台秘密:generate-keys——env=prod
在Linux及类似操作系统下,请使用
APP_RUNTIME_ENV =刺激
而不是——env =刺激
类型的应用程序的编译刺激
环境:1
$APP_RUNTIME_ENV=prod ob娱乐下载symfony控制台秘密:生成密钥
关于生产的新贸易壁垒,关于生产的价值:
1
$ob娱乐下载Symfony控制台的秘密:集AKISMET_KEY - env =刺激
L'ultimo passo è一个平台。sh, impostando una变量:
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”));”`
我在di阶段提交了一个git文件,但未提交。La chiave di decrittazione è stata aggiunta自动文件.gitignore
,在modo che sia esclusa da qualsiasi commit。Per maggiore sicurezza, è可能rimuoverla dalla macchina现场,essendo stata inclusa nel部署:
1
$Rm -f config/secrets/prod/prod.decrypt.private.php