gpt4 book ai didi

php - 以经过验证的形式接收空电子邮件

转载 作者:搜寻专家 更新时间:2023-10-31 21:24:42 24 4
gpt4 key购买 nike

我从我的联系表中收到了很多空邮件。因为它有验证,我不知道这怎么可能。

这是我的表格(只给了一行表示):

<form id="contact-form" method="post" action="contact.php" role="form">
<div class="messages"></div>

<div class="controls">
<div class="row">
<div class="col-xs-10">
<div class="form-group">
<label>Aanhef *</label>
<div class="label-group">
<label class="radio-inline"><input class="radio" type="radio" required="required" value="Dhr." name="titel">Dhr.</label>
<label class="radio-inline"><input class="radio" type="radio" required="required" value="Mevr." name="titel">Mevr.</label>
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div>

<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="form_email">E-mail adres *</label>
<input id="form_email" type="email" name="email" class="form-control" pattern="^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,})$" placeholder="Uw e-mailadres *" required="required" data-error="Uw e-mailadres (zonder spaties!)">
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div>
</form>

这是我的验证(contact.php):

<?php


// configure
$from = 'myemail';
$sendTo = 'myemail';

$senderNaam = $_POST['naam'];
$senderEmail = $_POST['email'];

$subject = 'Contact';
$okMessage = '<p>Send succesfully!</p>';
$errorMessage = '<p>Error!</p>';

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-Type: text/html; charset=utf-8" . "\r\n";
$headers .= "From: ". $from. "\r\n";
$headers .= 'Reply-To: '. $senderNaam." <".$senderEmail.">\r\n";

// let's do the sending

try
{
$emailText = "New message\n=============================\n";

$emailText = "<table>
<tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Naam:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['titel']." ".$_POST['naam']."</td></tr>
<tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Bedrijfsnaam:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['bedrijfsnaam']."</td></tr>
<tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Adres:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['straat']." ".$_POST['huisnummer']." ".$_POST['toevoeging']."</td></tr>
<tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Postcode:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['postcode']." ".$_POST['letters']."</td></tr>
<tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Woonplaats:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['woonplaats']."</td></tr>
<tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Telefoonnummer:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['kengetal']." ".$_POST['telefoon']."</td></tr>
<tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>E-mailadres:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['email']."</td></tr>
<tr><td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Bericht:</td><td style='padding-left: 10px; font-weight: bold;'>".$_POST['bericht']."</td></tr>
</table>";

mail($sendTo, $subject, $emailText, $headers);

$responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
$responseArray = array('type' => 'danger', 'message' => $errorMessage);
}

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$encoded = json_encode($responseArray);

header('Content-Type: application/json');

echo $encoded;
}
else {
echo $responseArray['message'];
}

?>

在 SO 上的一篇帖子中,有人说,我引用:“您是否考虑过可以直接从浏览器访问操作 url 而无需任何类型的 POST 数据?这将使所有“字段”为空。”

这可能是问题所在,但我不知道如何解决。有人知道吗,因为我的邮箱正在运行完整的 LOL。

编辑 1:好吧,我试过了:

// add all your other fields here
if (!isset($_POST['naam']) || !isset($_POST['email'])) {
mail($sendTo, $subject, $emailText, $headers);
}
$responseArray = array('type' => 'success', 'message' => $okMessage);

但没有结果,仍然可以在我的浏览器中打开 contact.php,显示“表单发送成功”:(。

最佳答案

您没有在 PHP 中执行任何类型的服务器端验证。所以是的,只需将我的浏览器指向 www.yoursite.com/contact.php 就可以让我继续向您发送空电子邮件。

此外,mail 函数不会抛出异常。因此,在这里尝试将其包装在 try/catch block 中是没有意义的。您应该检查该函数的返回值以了解它失败了。

您可以像这样对来自 $_POST 的用户提供的输入执行一些基本验证...

// add all your other fields here
if (!isset($_POST['naam']) || !isset($_POST['email'])) {
/* user did not supply there name/email don't send mail */
}


// you may also want to do additional validation like required input length or valid email
if (strlen($_POST['somefield']) < $requiredLength) {
/* input too short */
}
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
/* not a valid email address */
}

此外,您不应该盲目地将用户提供的输入插入到您的电子邮件 header 中。例如,如果用户提供带有 CRLF 字符的值,他们可以将 header 插入您的电子邮件中。在添加到您的电子邮件 header 之前,您应该从 $senderNaam$senderEmail 中删除所有 CRLF 字符。

并且不要忘记,由于您使用的是 HTML,因此您也会像在浏览器中一样受到来自用户输入的 HTML 注入(inject)的影响。确保使用 htmlentitieshtmlspecialchars关于输出。

"<tr>" .
"<td style='padding-left: 10px; padding-right: 10px; background: #eee;'>Naam:</td>" .
"<td style='padding-left: 10px; font-weight: bold;'>".
htmlspecialchars($_POST['titel']) ." ". htmlspecialchars($_POST['naam']) .
"</td>" .
"</tr>"

您还应注意,单靠验证仍然无法阻止任何人向您的联系表单发送垃圾邮件。只需编写一个脚本向此 PHP 脚本发送数千个请求是微不足道的。

尝试添加类似 reCaptcha 的内容添加到您的表单中以防止出现这种情况。

关于php - 以经过验证的形式接收空电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38870755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com