php - 如何在我的垃圾邮件蜜罐中执行 PHP
问题描述
我想在我的网站上放置一个蜜罐,以阻止垃圾邮件机器人填写我的表格。
我发现这个答案似乎很有用。它建议在您的页面上包含一个不可见的复选框:
<input
type="checkbox"
name="contact_me_by_fax_only"
value="1"
style="display:none !important"
tabindex="-1"
autocomplete="off"
>
但是,建议 PHP 测试复选框是否已被选中:
$honeypot = FALSE;
if (!empty($_REQUEST['contact_me_by_fax_only']) && (bool)
$_REQUEST['contact_me_by_fax_only'] == TRUE) {
$honeypot = TRUE;
log_spambot($_REQUEST);
# treat as spambot
} else {
# process as normal
}
我以前没有使用太多 PHP。我的问题:
- 我可以把这个 PHP 和周围的
<?php
?>
标签放在我的 html 代码中吗? - 如果是这样,我把 PHP 放在哪里有关系吗?它必须在表格之后(例如)吗?
- 在 PHP 部分说
#process as normal
,我需要在这里放什么吗? - 还是我应该将 PHP 放在我创建的 post.php 文件中以发布我的表单?
如果有帮助,我的 html 代码的表单部分:
<form action="post.php" method="post">
</br>
<label for="email"></label>
<input type="email" placeholder="Enter your email address..."
name="email" required>
<button type="submit" class="signupbtn">Sign Up</button>
<input type="checkbox" name="contact_me_by_fax_only"
value="1" style="display:none !important" tabindex="-1" autocomplete="off">
</form>
我正在尝试遵循这个答案。我仍然不确定一切应该去哪里。我不明白我什么时候告诉代码当它是人类响应时去做;我希望它提交表单,但我不知道它如何与 php.ini 结合在一起。
<html>
<head>
<title>Page Title</title>
<link href="https://fonts.googleapis.com/css?family=Quicksand"
rel="stylesheet">
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="shortcut icon" href="fav.ico" >
<meta name="description" content="">
</head>
<body>
<div class="home_pic">
<img border="0" style="border-color: black" src="pic1.png"
height="700px">
</div>
<div class="home_text">
Some words for the website
</div>
<?php
if (isset($_REQUEST['contact_me_by_fax_only']) && (bool)
$_REQUEST['contact_me_by_fax_only'] == TRUE) {
$honeypot = TRUE;
log_spambot($_REQUEST);
// treat as spambot -- I don't need it to *do* anything if spambot
?>
<?php
exit(); // all done if a spambot
} else {
// process as normal -- here we will use a function, note that in PHP
// scope rules will hide most global variables from the function!
process_human_response();
}
function process_human_response()
{
<!--DOES THE FORM GO IN HERE NOW?-->
<form action="post.php" method="post">
</br>SIGN UP:
<label for="email"></label>
<input type="email" placeholder="Enter your email address..."
name="email" required>
<button type="submit" class="signupbtn">Sign Up</button>
<input type="checkbox" name="contact_me_by_fax_only"
value="1" style="display:none !important" tabindex="-1" autocomplete="off">
</form>
?>
</body>
</html>
对不起,我很困惑。
解决方案
那是您的表单提交到的处理页面的 PHP。
从 Nicholas Summers 的帖子中复制代码,我将添加一些示例 HTML 来澄清它。
<?php
$honeypot = FALSE;
if (!empty($_REQUEST['contact_me_by_fax_only']) && (bool)
$_REQUEST['contact_me_by_fax_only'] == TRUE) {
$honeypot = TRUE;
log_spambot($_REQUEST);
// treat as spambot -- here we will place the HTML "inline"
?>
<html>
<body>
<p>Tasty spam, thanks!</p>
</body>
</html>
<?php
exit(); // all done if a spambot
} else {
// process as normal -- here we will use a function, note that in PHP
// scope rules will hide most global variables from the function!
process_human_response();
}
function process_human_response()
{
//... get data from $_REQUEST
//... process data
?>
<html>
<body>
<p>Thank you good human!</p>
</body>
</html>
这表明将您的代码和 HTML“内联”放置在第一种情况(垃圾邮件)的全局级别,并在人类函数中显示另一种方式。
正如所指出的,如果您不复制任何共享 HTML,代码通常更短且更易于维护,如下所示:
共享页面开头:
<html>
<head> <!-- and shared CSS, JS files here --> </head>
<body>
一些 PHP 逻辑来确定它是否是垃圾邮件机器人
<?php
if (isset($_REQUEST['contact_me_by_fax_only']) && (bool)
$_REQUEST['contact_me_by_fax_only'] == TRUE) {
$honeypot = TRUE;
log_spambot($_REQUEST);
// treat as spambot -- here we will place the HTML "inline"
?>
包含垃圾邮件机器人的响应 HTML,“内联”完成。因为这是 PHP 代码的“if”情况,所以只有当 if 测试为真(= spambot)时,才会将这个 HTML 发送到浏览器
<p>Tasty spam, thanks!</p>
继续为if
案例编写 PHP 代码,然后切换到else
案例。
<?php
exit(); // all done if a spambot
} else {
// process as normal -- here we will use a function, note that in PHP
// scope rules will hide most global variables from the function!
process_human_response();
}
?>
页面末尾的共享 HTML
</body>
</html>
调用即将处理人类响应的函数
function process_human_response()
{
//... get data from $_REQUEST
//... process data
?>
此 HTML 在函数内部,因此仅在调用此函数时才发送
<p>Thank you good human!</p>
完成功能
<?php
}
?>
推荐阅读
- python - python票务系统,在列表中使用字典或列表?
- c - GCC 是否优化汇编源文件?
- string - 创建一个接受字符串的函数并创建一个接受布尔值和字符串的函数
- php - SQLSTATE[HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:YES)(SQL:select * from `cats`)
- javascript - 如何在页面重新加载事件后将 React 组件与子组件保持一致?
- reactjs - 尝试导入错误:“PostsReducer”未从“./store/reducers/posts_reducer”导出
- java - 如何证明一个类不是线程安全的
- boolean - 如何解决 ∀ a : bool → bool, ∀ b : bool, a (a (ab)) = ab in Lean
- algorithm - 算法对输入的大小是线性的 (O(n)),但是如果输入大小是指数的怎么办
- php - Laravel Redis 作业没有排队