- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我从我的联系表中收到了很多空邮件。因为它有验证,我不知道这怎么可能。
这是我的表格(只给了一行表示):
<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)的影响。确保使用 htmlentities
或 htmlspecialchars
关于输出。
"<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/
我已经为使用 JGroups 编写了简单的测试。有两个像这样的简单应用程序 import org.jgroups.*; import org.jgroups.conf.ConfiguratorFact
我有一个通过 ajax 检索的 json 编码数据集。我尝试检索的一些数据点将返回 null 或空。 但是,我不希望将那些 null 或空值显示给最终用户,或传递给其他函数。 我现在正在做的是检查
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why does one often see “null != variable” instead of “
嗨在我们公司,他们遵循与空值进行比较的严格规则。当我编码 if(variable!=null) 在代码审查中,我收到了对此的评论,将其更改为 if(null!=variable)。上面的代码对性能有影
我正在尝试使用 native Cordova QR 扫描仪插件编译项目,但是我不断收到此错误。据我了解,这是代码编写方式的问题,它向构造函数发送了错误的值,或者根本就没有找到构造函数。那么我该如何解决
我在装有 Java 1.8 的 Windows 10 上使用 Apache Nutch 1.14。我已按照 https://wiki.apache.org/nutch/NutchTutorial 中提
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: what is “=null” and “ IS NULL” Is there any difference bet
Three-EyedRaven 内网渗透初期,我们都希望可以豪无遗漏的尽最大可能打开目标内网攻击面,故,设计该工具的初衷是解决某些工具内网探测速率慢、运行卡死、服务爆破误报率高以及socks流
我想在Scala中像在Java中那样做: public void recv(String from) { recv(from, null); } public void recv(String
我正在尝试从一组图像补丁中创建一个密码本。我已将图像(Caltech 101)分成20 X 20图像块。我想为每个补丁创建一个SIFT描述符。但是对于某些图像补丁,它不返回任何描述符/关键点。我尝试使
我在验证器类中自动连接的两个服务有问题。这些服务工作正常,因为在我的 Controller 中是自动连接的。我有一个 applicationContext.xml 文件和 MyApp-servlet.
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭10 年前。 问题必须表现出对要解决的问题的最低程度的了解。告诉我们您尝试过做什么,为什么不起作用,以
大家好,我正在对数据库进行正常的选择,但是 mysql_num_rowsis 为空,我不知道为什么,我有 7 行选择。 如果您发现问题,请告诉我。 真的谢谢。 代码如下: function get_b
我想以以下格式创建一个字符串:id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&等,在for循环中,我得到
我正在尝试使用以下代码将URL转换为字符串: NSURL *urlOfOpenedFile = _service.myURLRequest.URL; NSString *fileThatWasOpen
我正在尝试将NSNumber传递到正在工作的UInt32中。然后,我试图将UInt32填充到NSData对象中。但是,这在这里变得有些时髦... 当我尝试将NSData对象中的内容写成它返回的字符串(
我正在进行身份验证并收到空 cookie。我想存储这个 cookie,但服务器没有返回给我 cookie。但响应代码是 200 ok。 httpConn.setRequestProperty(
我认为 Button bTutorial1 = (Button) findViewById(R.layout.tutorial1); bTutorial1.setOnClickListener
我的 Controller 中有这样的东西: model.attribute("hiringManagerMap",hiringManagerMap); 我正在访问此 hiringManagerMap
我想知道如何以正确的方式清空列表。在 div 中有一个列表然后清空 div 或列表更好吗? 我知道这是一个蹩脚的问题,但请帮助我理解这个 empty() 函数:) 案例)如果我运行这个脚本会发生什么:
我是一名优秀的程序员,十分优秀!