Ответы пользователя по тегу PHP
  • Как сделать recaptcha в форме обязательной если стоит v2 и v3?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Так у тебя нет обработчика капчи на бекэнде.

    В той же статье, что ты кинул представлен вот такой вот обработчик капчи.

    тык
    <?php
    require_once 'config.php';
    session_start();
    if(!empty($_POST) && $_POST['sid'] == session_id()) {
        $token_v2 = $_POST['captcha_token_v2'];
        $token_v3 = $_POST['captcha_token_v3'];
        $result = checkCaptcha($token_v2, $token_v3);
        die(json_encode($result, true));
    }
    
    function checkCaptcha($token_v2 = false, $token_v3 = false)
    {
        // если не передано ни одного токена - возвращаем ошибку
        if (!$token_v3 && !$token_v2) {
            return ['error' => 'fall_captcha'];
        }
        // если дело дошло до капчи второй версии
        elseif ($token_v2) {
            // проверяем информацию по второй версии, если google ответил, что провека успешная - возвращаем успех
            $result = checkCaptchaCurl($token_v2, KEY_SECRET_V2);
            if (!$result['success']) {
                // если проверка провалилась - тоже ошибка
                return ['error' => 'fall_captcha_v2'];
            }
        }
        // если токен второй версии еще не получен, но есть 3, значит проверяем невидимую капчу
        else {
            $result = checkCaptchaCurl($token_v3, KEY_SECRET_V3);
            // проверяем количество очков от 0 до 1. Чем ближе к 1, тем больше вероятности, что это человек
            if ($result['score'] < 1) {
                return ['error' => 'fall_captcha_v3'];
            }
        }
        // возвращаем успех, если проверки пройдены
        $text = 'Your message "' . $_POST['text'] . '" was send to email "' . $_POST['email'] . '" successfully';
        return ['success' => true, 'text' => $text];
    }
    
    /**
     * Метод для отправки запроса в google через CURL
     * @param $response
     * @param $secret
     * @return mixed
     */
    function checkCaptchaCurl($response, $secret)
    {
        $url_data = 'https://www.google.com/recaptcha/api/siteverify' . '?secret=' . $secret . '&response=' . $response . '&remoteip=' . $_SERVER['REMOTE_ADDR'];
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url_data);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $captcha_res = curl_exec($curl);
        curl_close($curl);
        $captcha_res = json_decode($captcha_res, true);
        return $captcha_res;
    }
    Ответ написан
    3 комментария
  • Как можно создавать воркеров и балансировать Telegram бота?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Горлышко в логике и в базе скорее всего.

    Во-первых надо сделать балансер (на nginx).
    Он уже балансит трафик на php-fpm на других серверах.

    Сам php-fpm уже делает логику. Redis вряд ли будет грузится жестко. А вот с базой могут быть трабблы. Все-таки 3k rps (скорее всего у тебя и на каждый хук несколько запросов в базу). Проще всего сделать master-slave конфигурацию.

    Итого имеем:
    1) сервер для балансера
    2) сервера для php-fpm (парочку хотя бы)
    3) сервер redis (хотя бы один)
    4) сервер master mysql
    5) сервер slave mysql

    Самое главное размещать все это в одной локалке (в другом случае сетевая задержка сильно ухудшит ситуацию)
    Такое можно провернуть в любом облаке.

    Ну и естественно для каждого типа серверов свой конфиг железа.
    Например, для мускулов нужны быстрые диски и желательно побольше оперативки. Для редиски тоже диски быстрые нужны (если скидываешь на диск базу). Для балансера нет особых требований, но желательно не обидеть сервак по оперативке и процу. Для бекэндов (php-fpm) сделать акцент нужно на процессор + оперативку по вкусу (в зависимости от логики). В общем конфиги надо будет тестить и крутить. Поэтому облако и советую.
    Ответ написан
    Комментировать
  • Как получать уведомления через PHP?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Смотря какие уведомления.

    Если о новых заказах или что-то по типу этого то телеграм бот + на пыхе скрипт, который будет на url телеги кидать запрос для отправки сообщения. В инете есть пример кода на php и других языках + дока самой телеги.

    Если о падении сервера, то тут либо самописная система мониторинга с нескольких локаций, либо какое-то готовое решение по типу Zabbix, либо уже готовые сервисы по типу ping admin. Они мониторят твой сайт или сервак с десяток или сотен локаций по всему миру и отправляют уведомления в телегу/смс/email и т.д. Можно настроить частоту проверок (раз в секунду, час или минуту и т.д.) и список локаций, откуда будет производится проверка. За каждую проверку придется платить копеечку. Соотвественно чем больше проверок и локаций - тем больше счёт будет за месяц. Оплата по факту. Кидаешь на баланс пару соток с обедов, они тратятся себе.
    Ответ написан
    Комментировать
  • Достаточна ли защита сайта php?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Как уже многие писали - не стоит сейчас писать самому что-то уже давно реализованное по лучшим практикам. Как минимум стоит использовать PDO или же ORM.
    А еще лучше использовать все это вместе с каким-нибудь популярным фреймворком по типу Laravel. Там уже все реализовано: от аутентификации и авторизации до запросов к сторонним API.

    Если же хотите что-то свое написать без фреймворков - то по безопасности ничего конкретного нельзя посоветовать. Есть определенные правила, которых придерживаются большинство разработчиков.

    - использовать на сайте SSL
    - пароль в базе нужно хранить в хешированном виде.
    и т.д.

    Самые распространенные угрозы описаны в OWASP TOP 10. Почитайте на досуге.

    Хешировать пароль на клиенте тоже правильно. Задача сервиса не только запретить доступ к сервису злоумышленникам, но и сохранить пароль клиента в тайне. Передавая пароль на сервер в открытом виде, пусть даже и по защищенному соединению, можно его отдать злоумышленникам. Как минимум запросы могут логироваться, и пароль в открытом виде будет храниться в логах. Злоумышленник может завладеть каким-либо образом доступом к серверу и украсть пароли тысяч или миллионов пользователей. Или же встроить в PHP скрипт определенный код, который будет пароли передавать на удаленный сервер (при владении доступом к серверу бекэнда).

    Да, можно высунуть наружу только балансер или фронтэнд, а бекэнды держать без доступа к внешней сети. Но а если злоумышленником является разработчик/сотрудник, который может вытащить данные из этого сервера?

    Хеширование пароля на клиенте является хорошей практикой. Facebook делает что-то похожее. В таком случае ни владелец сервиса, ни злоумышленник не смогут получить доступ к открытому паролю пользователя. Это защитит другие учетные записи пользователя (если он использует один пароль или главную часть пароля в других сервисах).
    Ответ написан
    Комментировать
  • Как обойти редирект на страницу входа Instagram?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Бывает)

    Я с инстой работал очень просто.

    1. Брал пачку нормальных аккаунтов. Желательно не автореги, а просто ручная регистрация с небольшой активностью и отлёгой. Желательно регистрация с рф ip.

    2. Сама проблема в авторизации. Авторизацию я проходил при помощи небольшого самописа на python, который запускался в Yandex Cloud Functions каждый раз практически с нового ip адреса. Далее этот самопис передавал cookie с session id в базу.

    3. Основной софт (в моем случае это был мониторинг новых постов в профилях) берет рандомом из базы аккаунт и заходит с ipv6 прокси в инсту с кукой session id и делает что надо в инсте. Желательно проксю "привязать" к аккаунту хотя бы на день, т.к. будет палевно если ты каждый запрос будешь менять ipшник.

    4. Облачные функции яндекса давались мне бесплатно (там квота есть бесплатная на какое-то количество ресурсов). Прокси ipv6 брал пачками на неделю на прокси маркете (загугли). Каждую неделю старался менять пул проксей. Аккаунтов много не требовалось на самом деле. У меня было 2 личных акка - их и использовал.

    5. Сейчас в инсте какая-то дичь появилась с подтверждением личности в виде верчения хлебалом на камеру. Тоже надо подумать как это обходить. Можно регать акки на знакомых)

    P.S. Касаемо ipv6 проксей. На прокси маркете прокси угандошенные на самом деле инстой. Могут даже из-за кого-то целую подсеть забанить. Так что рекомендую брать прокси в разных местах из разных подсетей.

    P.P.S. Спросишь почему именно ipv6? Да потому что дешевле и работает нормально. Сейчас уже не знаю как. Делал проект с инстой год назад где-то.

    P.P.P.S. Касаемо обхода редиректа - никак это не сделать. Он по ipшнику смотрит как я понял. Может быть еще какие-то факторы есть по типу user-agent, заголовков браузера или данных, которые дергаются javascript из компа.
    Ответ написан
  • Как перенести куки через nginx?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Не надо это делать через nginx.

    Достаточно указать нужные параметры при установки cookie. (Домен *.domain.ru). В этом случае кука поставится для основного домена или для поддоменов.
    Ответ написан
  • Как получить статистику матчей в CSGO на свой сайт?

    pro100chel
    @pro100chel
    Python && PHP Developer
    1. Проведение матчей на своих серверах. Арендуешь вдски или физ.машины и там проводишь свои матчи. Пишешь или находишь простой сурсмод плагин, который стату матча выгружает куда-либо (база или еще что) и все.

    2. Парсить демки. Грузишь демку на свой сайт и разбираешь парсером. Готовые парсеры демок есть в инете.

    Тема не совсем популярная, поэтому погуглить придется знатно.
    Ответ написан
  • Как сделать $_GET без cookie по умолчанию?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Ты работаешь в phpstorm? ideшка запускает встроенный веб-сервер и когда ты открываешь страницу передает туда параметр этот.

    Попробуй открыть скрипт в обычном браузере, используя любой другой веб-сервер. Или же открой скрипт без передачи параметров (из адресной строки удали все что идет после вопросительного знака)
    Ответ написан
    Комментировать
  • Как передать в $_POST переменную?

    pro100chel
    @pro100chel
    Python && PHP Developer
    В $_POST находится то, что передается в параметрах POST запроса. Для этого форма должна иметь тип отправки POST.

    А если ты ручками прописываешь в урле параметры как в GET запросе то это GG.
    Ответ написан
    Комментировать
  • Какой IP у исходящих PHP запросов?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Если ты нычешься за cloudflare но делаешь запросы на другие api курлом и прочей инструментарией то палишь ip своего сервера/vds/хостинга
    Ответ написан
    2 комментария
  • Какая сейчас актуальна бесплатная конфигурация VDS-сервера для совместимого набора максимально свежих PHP + MySQL + панель управления хостом?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Сервак бесплатный можно взять в любом облаке, которое предоставляет бесплатный триал (гугл, маилру, яндукс, амазон, микрософт)

    Касаемо софта то тут лучше всего самому все ставить, либо же использовать всякие там докеры и прочее что упрощает жизнь.

    Пыха 8.0 fpm, nginx, mysql.

    А если не шаришь вообще че да как то бери fastpanel.
    Ответ написан
  • Openssl - как использовать свой PrivateKey?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Ключ а примере в формате строки. Что мешает hex перевести в строку? Тем более ты уже задавал этот вопрос год назад Как перевести hex в стринг?
    Ответ написан
  • DDoS атака заставляет php-fpm грузить сервак на 100%, как пофиксить?

    pro100chel
    @pro100chel Автор вопроса
    Python && PHP Developer
    Подытожу все, что удалось собрать исходя из скудных знаний qna и крупиц информации, найденной на ноунейм форумах и у индусов.

    Для начала нужно прокинуть настоящий ipшник юзеров через cloudflare. Как правильно подметил главный грубиян сего форума делается это при помощи set_real_ip_from. Далее предлагает записать все диапазоны адресов. Что мне делать конечно же не захотелось, т.к. засерать конфиг не хочется особо. В итоге прописал вот это
    set_real_ip_from 0.0.0.0/0;
    real_ip_header CF-Connecting-IP;


    Это помогло пробросить адреса юзеров через cloudflare. Теперь в конфигах светятся настоящие ip клиентов.

    Далее я в nginx.conf создал зону ограничения кол-ва запросов.
    вот так:
    limit_req_zone $http_cf_connecting_ip zone=lr_zone:10m rate=10r/s;

    Это ограничит число запросов до 10 в секунду. Можно уменьшить, можно увеличить. Мне все равно, т.к. использую ограничение только при обращении к бекэнду (api).

    Вот как это задействовать. В конфиге виртуального хоста, где нужно ограничить кол-во запросов делаем так:
    limit_req zone=lr_zone;
    Это включит зону ограничений, которую мы создали в конфиге nginx.

    Далее я попробовал юзать fail2ban, что показалось мне излишним, ибо как-то он баговано работает. Мне короче не подошло. Да, там есть action для cloudflare и фильтр для limit_req от nginx. Но не совсем то, что надо.

    В итоге мною был написан небольшой скриптик на python, который глядит в error log и высматривает там 429 ошибки. Собирает адреса и блочит при помощи api cloudflare.

    Заблоченный юзер видит просто заглушку от cloudflare, которая уведомляет его о блокировке по ip.
    Ответ написан
  • Какой смысл в создании сигнатуры API ключа, если API ключ и так известен?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Чтобы в открытую не передавать по сети api ключ...
    Ответ написан
  • Как понять не отвечает прокси или сайт?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Делать через прокси запрос на сайт, который гарантированно доступен в текущий момент времени
    Ответ написан
    Комментировать
  • Как исправить Parse error: syntax error, unexpected '$conn' (T_VARIABLE) in D:\xampp\htdocs\Sayt\connect.php on line 3?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Ты забыл точку с запятой после session.start()
    Еще ты проверяешь переменную connect, хотя нужно проверять переменную conn
    <?php
    session_start();
    $conn = mysqli_connect( 'localhost','root', ' ','bootcamp');
    if (!$conn) {
    die('Error404');
    }
    Ответ написан
  • Удалить меня, вопрос не актуален?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Ух. И наговнокодил ты конечно!

    В общем схема выглядит так:

    1. Юзер заполняет форму и капчу
    2. Капча вместе с данными из формы отправляется на скрипт обработки
    3. Скрипт обработки проверяет прохождение капчи
    4. Если капча пройдена успешно то выполняет действия дальше. Если капча не пройдена то посылает юзера нах.

    Вот же, все написано понятно и просто https://developers.google.com/recaptcha/docs/verify
    Ответ написан
  • Nginx загружает index.php, как это исправить?

    pro100chel
    @pro100chel
    Python && PHP Developer
    Нужно всего лишь установить php-fpm и в nginx прописать путь до сокета php-fpm.
    Ответ написан
    Комментировать
  • Как отключить проверку CloudFlare + UnitPay?

    pro100chel
    @pro100chel
    Python && PHP Developer
    1. Запросы проксируются через сервера cloudflare.
    2. Отключать ничего не нужно. Максимум в файрволле клауда прописать для айпишников unitpay правило на пропуск без проверки.

    Ip клиента передается клаудфлаером в заголовке HTTP_X_FORWARDED_FOR
    Ответ написан
    1 комментарий
  • Практика для php новичка?

    pro100chel
    @pro100chel
    Python && PHP Developer
    1. Запили интернет магазин по типу днс. С регистрацией и админкой, где можно добавить товар и отреагировать на заявки.

    2. Когда можешь качественно запилить любой проект.

    3. По желанию. Пробиться новичку сейчас не так уж и просто. Насчет фреймов: Laravel (попроще), Symfony(посложнее)

    4. От 15000 рублей и до бесконечности. Более конкретные цифры ищи на сервисах по поиску работы.
    Ответ написан
    3 комментария