使用Google Captcha的网站联系表,我是否安全(XSS注入等)?

时间:2018-10-09 11:25:27

标签: security web

我的网站受到了注入(通过KB系统中的搜索框)。我删除了该KB系统,但是有一个联系表单(带有Google Captcha),用户可以在其中输入他的姓名,电子邮件和消息,然后使用PHP mail()向我发送消息。

攻击者是否有可能通过对该表格的可能攻击来访问我的网站?还是最坏的情况就是他用它来发送垃圾邮件?

这是我在调用“ main()”之前的PHP代码:

<?php

$fname = $_POST['contact-f-name'];
$lname = $_POST['contact-l-name'];
$email = $_POST['contact-email'];
$text = $_POST['contact-message'];

$companyname = $_POST['company-name'];
$subject = $_POST['subject'];

$address = "myemail@myemail.com"; 

$headers  = "From: " . strip_tags($email) . "\r\n";
$headers .= "Reply-To: ". strip_tags($email) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type:text/plain; Charset=UTF-8 \r\n";

$message =          ."Name: ".strip_tags($fname)." ".strip_tags($lname)."\r\n"
                    ."Email: ".strip_tags($email)."\r\n"
                    ."Company Name: ".strip_tags($companyname)."\r\n"
                    ."Subject: ".strip_tags($subject)."\r\n"
                    ."Message: ".strip_tags($text)."\r\n";

if(@mail($address, $subject, $message, $headers)) { echo "true"; } 
else { echo "false"; }
exit;
?>

1 个答案:

答案 0 :(得分:2)

TL; DR:简短答案:也许:

虽然我现在没有时间对此帖子做一个完整而严格的答案;我将为您指出一些最佳做法,并提供许多指向其他更冗长答案的链接,这些答案针对与使用户输入数据安全有关的类似问题。

如何使输入更安全?

  • Disable certain dangerous PHP functions。阅读第二个答案,而不是“打勾”的答案。

  • 使用PHP filter_var()强制输入正确的类型,尤其是电子邮件:

    $email = filter_var($_POST['contact-email'], FILTER_SANITIZE_EMAIL);
    
  • 使用preg_replace()(或str_replace())从值中删除不需要的字符。这通常是反引号,任何形式的引号,正斜杠或反斜杠。 Example

  • 我建议用PHPMailer替换代码中的mail()

  • strip_tags可以,但是可以。它有缺陷(例如处理未封闭的标签)。注意这一点。

  • 您的PHP应该适当地入狱,以便如果某人可以运行exec(...)命令( Ohsh1tOhsh1tOhsh1t ),而您并没有(实际上)丢失服务器。

我还能读什么?