2016-01-03 3 views
0

У меня есть страница на моем сайте, где пользователи могут отправлять мне сообщение, указав их адрес электронной почты, имя и сообщение. На переднем конце (JS) я делаю некоторые основные проверки, убедитесь, что письмо отформатировано как электронное письмо, убедитесь, что другие поля не пустые, а затем отправлю его на PHP с помощью GET.Безопасная отправка электронной почты с PHP

Теперь я знаю, что люди могут делать довольно хитрые вещи, вводя вредоносный код в PHP. Какие меры предосторожности я должен принимать? Когда я работал с MySQL, я бы сбежал от него с помощью функции escape-функции mysqli. Что я должен здесь делать?

Вот мой сценарий прямо сейчас:

<?php 
    if(!isset($_GET["message"]) || !isset($_GET["name"]) || !isset($_GET["email"])){ 
     echo "Check all the fields are correctly filled in and try again!"; 
     die(); 
    } 
    $email = $_GET["email"]; 
    $message = $_GET["message"]; 
    $name = $_GET["name"]; 
    if($email == ""|| $message == "" || $name == ""){ 
     echo "Check all the fields are correctly filled in and try again!"; 
     die(); 
    } 

    $message = wordwrap($message, 70); 

    mail("[email protected]","A Message From " . $name,$message,"From: $email\n"); 
    echo "success"; 
?> 
+2

Используйте [PHPMailer] (https://github.com/PHPMailer/PHPMailer), он обрабатывает это для вас. В качестве бонуса PHPMailer на самом деле дает вам ошибки, если что-то не удается, «mail()» просто возвращает true/false, и вы остаетесь невежественными. И для MySQL вы должны использовать PDO или Mysqli и связывать параметры с помощью подготовленных/параметризованных запросов, а не «реальной функции эвакуации» – JimL

+1

Сначала используйте POST, если вы не «имеете» использовать GET, поскольку GET можно изменить в URL-адресе , Затем найдите форму XSS. –

ответ

0

очень простой способ заключается в том, что вы можете объявить переменную (например $pattern) и хранить регулярные выражения (например, шаблоны, используемые обычно в нападениях) в нем, а затем использовать preg_match($pattern, $valueFromYourForm), чтобы узнать, соответствует ли какое-либо из переданных значений любому из этих выражений, а затем вы можете остановить выполнение.

+0

Несколько раз это лучшее, что вы можете сделать, я думаю. Но будьте осторожны, полагаясь на черные списки, считаются плохой практикой. Когда вы можете, вы всегда должны сравнивать с белым списком, так как гораздо проще использовать/обходить черный список. – JimL