forked from ag_kommunikation/webseite
89 lines
2.8 KiB
PHP
89 lines
2.8 KiB
PHP
<?php
|
|
$message = '';
|
|
$name = '';
|
|
$email = '';
|
|
|
|
function sanitize_text(string $name) {
|
|
$text = filter_var($_POST[$name], FILTER_SANITIZE_FULL_SPECIAL_CHARS);
|
|
$text = trim($text);
|
|
$text = stripslashes($text);
|
|
$text = htmlspecialchars($text);
|
|
|
|
return $text;
|
|
}
|
|
|
|
/**
|
|
* Sending email (Platzhalter)
|
|
*
|
|
* mail(): Braucht auf dem Server einen korrekt konfigurierten Mailserver
|
|
* phpmailer: Bibliothek, der per Composer installiert wird. Tut ganz gut mit SMTP.
|
|
*/
|
|
function send_message_to_office($message, $name, $email) {
|
|
return true;
|
|
}
|
|
|
|
function send_response($response_data) {
|
|
$json = json_encode($response_data);
|
|
if ($json === false) {
|
|
// Avoid echo of empty string (which is invalid JSON), and
|
|
// JSONify the error message instead:
|
|
$json = json_encode(["jsonError" => json_last_error_msg()]);
|
|
if ($json === false) {
|
|
// This should not happen, but …
|
|
$json = '{"jsonError":"unknown"}';
|
|
}
|
|
// Set HTTP response status code to: 500 - Internal Server Error
|
|
http_response_code(500);
|
|
}
|
|
header('Content-type: application/json');
|
|
echo $json;
|
|
}
|
|
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
$response = array();
|
|
|
|
if (
|
|
empty($_POST['message']) ||
|
|
empty($_POST['email']) ||
|
|
empty($_POST['name']) ||
|
|
$_POST['captcha'] != 'Nudelsuppe'
|
|
) {
|
|
if (empty($_POST['message'])) {
|
|
$response['errors'][] = 'Du hast keine Nachricht eingegeben.';
|
|
}
|
|
if (empty($_POST['email'])) {
|
|
$response['errors'][] = 'Du hast keine E-Mail-Adresse eingegeben.';
|
|
}
|
|
if (empty($_POST['name'])) {
|
|
$response['errors'][] = 'Du hast keinen Namen eingegeben.';
|
|
}
|
|
/*
|
|
Idee zur Bot-Erkennung:
|
|
1. Ein Bot hat das Pseudocaptcha entweder leer abgeschickt, oder sich selbst etwas ausgedacht.
|
|
2. Ein Bot schickt die Daten in unter 5s ab.
|
|
3. Ein Mensch braucht nicht länger als 60min.
|
|
*/
|
|
if (
|
|
$_POST['captcha'] != 'Nudelsuppe' ||
|
|
preg_match('d{10}', $_POST['time_sent']) != 1 ||
|
|
(preg_match('d{10}', $_POST['time_sent']) != 1 && time() - $_POST['time_sent'] < 5) ||
|
|
(preg_match('d{10}', $_POST['time_sent']) != 1 && time() - $_POST['time_sent'] > 3600)
|
|
) {
|
|
$response['errors'][] = 'Wir glauben du bist ein Bot.';
|
|
}
|
|
} else {
|
|
$message = sanitize_text('message');
|
|
$name = sanitize_text('name');
|
|
$email = sanitize_text('email');
|
|
|
|
if (!send_message_to_office($message, $name, $email)) {
|
|
$response['errors'][] = 'Deine Nachricht konnte nicht übermittelt werden.';
|
|
} else {
|
|
$response['status'] = 'ok';
|
|
}
|
|
}
|
|
send_response($response);
|
|
} else {
|
|
http_response_code(404);
|
|
}
|