我的网站受到了注入(通过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;
?>
答案 0 :(得分:2)
虽然我现在没有时间对此帖子做一个完整而严格的答案;我将为您指出一些最佳做法,并提供许多指向其他更冗长答案的链接,这些答案针对与使用户输入数据安全有关的类似问题。
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 ),而您并没有(实际上)丢失服务器。
This huge topic,了解如何在PHP上处理表单
This question关于如何“清除”用户输入。
OWASP PHP filters用于清洁输入。
PHP fitler_var
sanitisation filter list
Securing user variables(主要与数据库有关)
Further wise words关于数据清除。