保护联系表单脚本

时间:2012-08-22 19:16:53

标签: php email contact-form secure-coding

您好!我只是想知道我刚刚制作的这个联系表格脚本有多安全?很久以前,当我制作我的联系表时,我的老师正在唠叨我。

if($_SERVER['REQUEST_METHOD'] === 'POST'){

    $myemail  =    "email@adress.com";
    $name      =    $_POST['name'];
    $email    =    $_POST['email'];
    $phone    =    $_POST['phone'];
    $subject  =    $_POST['subject'];
    $comments =    $_POST['comments'];

   if($name == 0 || !preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email) || !preg_match("/^\d{2}(-\d{3}){2}(\d{2})?$/", $phone) || $subject == 0 || $comments == 0){

       $error_message = 'Something was written wrong..';

   } else {

       $message = "Hello!
       Your contact form has been submitted by:
       Name: $name
       E-mail: $email
       Phone: $phone
       Comments: $comments
       End of message";
       mail($myemail, $subject, $message);
       $error_message = 'Your message was sent!';

    }
}

有关如何确保其安全的任何建议吗?

P.S。 Securing a Contact FormSecuring a php contact form都适用于WordPress,而不是我的目标。

2 个答案:

答案 0 :(得分:6)

您可以使用函数来验证条目,例如:

function check_input($data)
 {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
 }

        $name      =    check_input($_POST['name']);
        $email    =    check_input($_POST['email']);
        $phone    =    check_input($_POST['phone']);
        $subject  =    check_input($_POST['subject']);
        $comments =    check_input($_POST['comments']);

     if ($name && $email && $phone && $subject && $comments) {
         Send contact form...

}

当然,您可以添加验证码以使其更安全。

答案 1 :(得分:0)

除了缺乏数据验证之外,您的代码中没有任何不安全因素。您只需收集表单数据并将其发送出去。因此唯一的“不安全感”是,除非使用任何类型的验证码,否则您将很容易通过该表单发送垃圾邮件。我目前还不确定,但是有可能欺骗mail()添加更多的收据与精心制作的$ subject,所以它将保存以确保它的oneliner并剥离任何CRLF