За последние 24 часа нас посетили 23628 программистов и 1661 робот. Сейчас ищут 903 программиста ...

email injection - защита

Тема в разделе "PHP для новичков", создана пользователем SamyRed, 9 мар 2017.

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Здравствуйте. Достаточно ли этого для защиты от email инъекций?
    PHP:
    1.         if (!empty ($_POST['name'])) {
    2.             $name = strip_tags($_POST['name']);
    3.         } else {
    4.             $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Необхідно ввести їм\'я.';
    5.         }
    6.         if (!empty ($_POST['email'])) {
    7.             $email = strip_tags($_POST['email']);
    8.             if (!filter_var ($email, FILTER_VALIDATE_EMAIL)) {
    9.                 $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Ви ввели некоректну адресу електронної пошти E-mail.';
    10.             }
    11.         } else {
    12.             $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Необхідно ввести адресу електронної пошти (E-mail).';
    13.         }if (mail ('support@lada.kl.com.ua', $textShort.' ('.$name.')', $text, "From: $email")) {
    14.                 $_SESSION['alerts']['s'][] = '<b>Виконано!</b> Ваше повідомлення було відправлено. Очікуйте, будь ласка, на відповідь.';
    15.             } else {
    16.                 $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Не вдалося відправити повідомлення.';
    17.             }
    18.         }
    19.         if (!empty ($_POST['text'])) {
    20.             $text = strip_tags($_POST['text']);
    21.             if (mb_strlen ($text) >= 2000) {
    22.                 $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Повідомлення не може бути довшим за 2000 символів.';
    23.             }
    24.         } else {
    25.             $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Необхідно ввести повідомлення.';
    26.         }
    27.         if (empty ($_SESSION['alerts']['e'])) {
    28.             if (mb_strlen ($text) > 15) {
    29.                 $textShort = mb_substr ($text, 0, 15).'...';
    30.             } else {
    31.                 $textShort = $text;
    32.             }
    33.             if (mail ('support@lada.kl.com.ua', $textShort.' ('.$name.')', $text, "From: $email")) {
    34.                 $_SESSION['alerts']['s'][] = '<b>Виконано!</b> Ваше повідомлення було відправлено. Очікуйте, будь ласка, на відповідь.';
    35.             } else {
    36.                 $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Не вдалося відправити повідомлення.';
    37.             }
    38.         }
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    от каких инъекций именно?
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    filter_var ($email, FILTER_VALIDATE_EMAIL)
    этого более чем достаточно. Велосипедить незачем.
     
  4. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Зачем
    PHP:
    1. $email = strip_tags($_POST['email']);
    если потом используешь filter_var?
    В итоге ты отправляешь письмо 2 раза? на 13 и 33 строке
    Что такое email-инъекция в твоём понимании?
    Не хочешь использовать phpMailer?
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    SamyRed нравится это.
  6. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    @MouseZver а как насчёт $name и $text? Их нужно как-то защищать?
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ОТ ЧЕгО????????
     
  8. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну хз, от взлома, например. Вообще, от всего. Хочу чтоб вообще никакой опасности мой скрипт не предоставлял:)
    --- Добавлено ---
    У меня виртуальный хостинг. Я так понимаю, phpmailer нужно устанавливать?
    --- Добавлено ---
    Передать ф-ции такую строку, которая закроет кавычку и внедрит вредоносный код, отправит спам, например...
    --- Добавлено ---
    В итоге получилось так:
    PHP:
    1. function mail_utf8($to, $from_user, $from_email, $subject = '(No subject)', $message = '') {
    2.     $from_user = "=?UTF-8?B?".base64_encode($from_user)."?=";
    3.     $subject = "=?UTF-8?B?".base64_encode($subject)."?=";
    4.     $headers = "From: $from_user <$from_email>\r\nMIME-Version: 1.0\r\nContent-type: text/html; charset=UTF-8\r\n";
    5.     return mail($to, $subject, $message, $headers);
    6. }
    PHP:
    1.     if (isset ($_POST['sendmail'])) {
    2.         if (isset ($_SESSION['mailDelay'])) {
    3.             $timeBack = 600 - (time() - $_SESSION['mailDelay']);
    4.             if ($timeBack < 0) {
    5.                 unset ($_SESSION['mailDelay']);
    6.             }
    7.         }
    8.         if (!isset ($_SESSION['mailDelay'])) {
    9.             if (!empty ($_POST['name'])) {
    10.                 $name = strip_tags($_POST['name']);
    11.             } else {
    12.                 $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Необхідно ввести їм\'я.';
    13.             }
    14.             if (!empty ($_POST['email'])) {
    15.                 if (filter_var ($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    16.                     $email = $_POST['email'];
    17.                 } else {
    18.                     $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Ви ввели некоректну адресу електронної пошти E-mail.';
    19.                 }
    20.             } else {
    21.                 $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Необхідно ввести адресу електронної пошти (E-mail).';
    22.             }
    23.             if (!empty ($_POST['text'])) {
    24.                 $text = strip_tags($_POST['text']);
    25.                 if (mb_strlen ($text) >= 2000) {
    26.                     $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Повідомлення не може бути довшим за 2000 символів.';
    27.                 }
    28.             } else {
    29.                 $_SESSION['alerts']['e'][] = '<b>Помилка!</b> Необхідно ввести повідомлення.';
    30.             }
    31.             if (empty ($_SESSION['alerts']['e'])) {
    32.                 if (mb_strlen ($text) > 15) {
    33.                     $textShort = mb_substr ($text, 0, 15).'...';
    34.                 } else {
    35.                     $textShort = $text;
    36.                 }
    37.                 mail_utf8('support@lada.kl.com.ua', $name, $email, $email, $text);
    38.                 $_SESSION['mailDelay'] = time ();
    39.                 $_SESSION['alerts']['s'][] = '<b>Виконано!</b> Ваше повідомлення було відправлено. Очікуйте, будь ласка, на відповідь.';
    40.             }
    41.         } else {
    42.             $timeLeft = 600 - (time() - $_SESSION['mailDelay']);
    43.             $minutes = floor ($timeLeft / 60);
    44.             $seconds = $timeLeft % 60;
    45.             if ($minutes == 0) {
    46.                 $string = $seconds.' '.getNumEnding($seconds, array('секунда', 'секунди', 'секунд'));
    47.             } else {
    48.                 $string = $minutes.' '.getNumEnding($minutes, array('хвилина', 'хвилини', 'хвилин')).', '.$seconds.' '.getNumEnding($seconds, array('секунда', 'секунди', 'секунд'));
    49.             }
    50.             $_SESSION['alerts']['e'][] = '<b>Захист від спаму!</b> Повторне відправлення повідомлення буде доступне не раніше ніж через 10 хвилин<br>(Залишилось: <b>'.$string.'</b>).';
    51.         }
    52.     }
     
  9. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Вся установка:
    Код (Text):
    1. composer require phpmailer/phpmailer
    или
    composer.json
    Код (Text):
    1. "phpmailer/phpmailer": "~5.2"
    Потом останется настроить под свои нужды и можно пользоваться.Удобная вещь
     
  10. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    То есть не надо на саму машину никаких приложений устанавливать? Если так - то я, конечно, согласен.
     
  11. Anhk

    Anhk Активный пользователь

    С нами с:
    13 дек 2015
    Сообщения:
    219
    Симпатии:
    11
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    взлома чего?
     
  13. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Потребуется только композер и больше ничего.Если хочешь можешь подробнее ознакомиться:
    https://github.com/PHPMailer/PHPMailer
     
  14. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Я не уверен что смогу установить composer на свой виртуальный хостинг.
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    композер это файл пхп
    --- Добавлено ---
    чтобы защищаться от чего-то, надо знать, от чего защищается. На всяк-всяк защиты не бывает. Иначе бы не было взломов. Все бы защищались универсально от всего и наперёд. Не бывает такого.
     
  16. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Не могу такой найти. Везде предлагают какие-то инсталяторы...
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    есть и инсталяторы - для удобства. они прописывают пути так, чтобы можешь пользоваться им, как консольной командой.

    https://getcomposer.org/composer.phar
     
  18. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    #18 SamyRed, 9 мар 2017
    Последнее редактирование: 9 мар 2017
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это пхп, пожатый раром. его пхп знает и умеет прямо так запускать.
     
  20. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
  21. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    При попытке открыть этот файл в браузере - он его качает
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    кто кого качает, дружище?
     
  23. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Браузер качает файл composer.phar. А при подключении этого файла на индекс (require './composer.phar') начинает падать куча ошибок.
     
  24. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    да вы е*у дали, дайте мужику заверстать эти чертовы пару строк с filter + mail.
    какой нафуй кампоты? дайте ему придрочиться к основному, что вы со своими плагинами левыми суетесь
    всего навсего filter + mail o_O
    --- Добавлено ---
    @SamyRed Мужик, ты сам для себя ужасы всякие придумываешь и лепишь велосипеды. Крепче яйца и не еби мозг не себе ни людям!
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @SamyRed
    это консольная утилита. её надо дёрнуть из консоли. это можно сделать например из консоли, или из пхп вызвать. забей. тебе пока рано. =) пили так, руками докидывай в проект всё, что нужно.