Обновить
2
0

Пользователь

Отправить сообщение

На работе контентные сайты. Статьи пишут люди. Хорошо росла посещаемость. Потом год назад трафик резко упал раз в семь, после обновы у гугла. Этим летом все начало возвращаться. По вашим графикам тоже хороший рост за последние месяцы, вполне возможно вы тоже попали под эту обнову.

Так и запишем - "Цифровые решения для бизнеса | финтех, логистика" заказывать в Clevertec не нужно 🙈😁

Точка означает лишь только то, что предложение окончено. За предложением может идти ещё одно предложение, а может не идти. Причем тут их ОКР - вообще не понятно, лол))

С вами наверное очень приятно работать))

Авито прям вот так за здрасти позволяет себя парсить?

Увидел в интернетах видюшку про вайбкодинг и создание небольшого проекта с помощью replit. Подумал "вах какая может быть полезная штука", сейчас скормлю ему свои задачки по пет проектам, т.к. времени до них дотянуться нет совсем - лучше уж как нибудь, чем не как, вдруг получится. В итоге этот реплит ~1-2 часа изображал видимость активной деятельности, сожрал все бесплатные брейкпоинты и на выходе не показал ничего рабочего, мало того, он даже проект не смог создать и запустить с нужными мне зависимостями (angular 19 с включеным ssr и tailwind). Что я самостоятельно сделал за 2 минуты, с гуглением доки и скачиванием всех нужных пакетов. Как бы показывает уровень инструмента, и у него в данной статье ещё и неплохая оценка в сравнении со всем остальным.. пока что это инструменты уровня поменять шрифт/цвет кнопки и то нужно будет много времени и точно не получится без ошибок))

Зачем, если можно все в голове посчитать и отрендерить в воображении?))

Понапридумают себе проблем, а потом героически их решают))

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

На первый запрос да, но после, как всё-таки удобно рендерить только то, что нужно. Правда делать это нужно не как автор, а то получается какие-то "горе от ума".. ))

добавлю на всякий случай

/**
 * @param array<string, mixed> $data
 * @return AccessToken
 */
public function auth(array $data): AccessToken
{
    if (Arr::has($data, 'hash')) {
        $check_params = Arr::except($data, ['hash']);

        ksort($check_params);

        foreach ($check_params as $param => $value) {
            $check_params[$param] = "$param=$value";
        }

        $data_check_string = implode("\n", $check_params);

        $secret_key = hash_hmac('sha256', config('telegram.token'), 'WebAppData', true);

        if (hash_equals(Arr::get($data, 'hash'), hash_hmac('sha256', $data_check_string, $secret_key))) {
            $user = $this->firstOrCreate(
                json_decode(Arr::get($data, 'user'), true),
            );
        }
    }

    return isset($user)
        ? $this->createAccessToken($user, md5(json_encode($data)))
        : new AccessToken();
}

Ты молодец, моя реакция на незащищенные данные была быстрее. Ещё раз извиняюсь.

p.s. глянь сообщения ниже веткой. Я напаролся тоже на эту проблему, но через какое-то время старый код работал как и должно было быть. Это моя ошибка или всё-таки телеграм что-то накосячил с hash?

а два варианта то я и упустил))


сейчас решил проверить, вернул свой код на старую реализацию и все работает как и раньше. не понятно только почему у меня тоже поломалась авторизация. может они что то на своей стороне сломали? т.к. обновление вроде было 17.11.2024, а поломалось все 20.11.2024. на текущий момент 23.11.2024 опять все работает)

судя по тому, что вы пишете, вы в data_check_string собираете только auth_datequery_iduser, а надо собирать all received fields, кроме hash.

Извиняюсь, без контекста комментарий прочитал.

Это получается в unsafe они не добавляли подпись и все работает по старому? Я на initData ориентировался и пришлось переделывать на новый метод проверки.

Получается тебе можно подсунуть любые данные (устаревшие, чужие, несуществующие) и ты им доверяешь со всеми вытекающими

нужно не брать конкретные поля, а исключить hash и signature

/**
 * @param array<string, mixed> $data
 * @return AccessToken
 */
public function auth(array $data): AccessToken
{
    if (Arr::has($data, 'signature')) {
        $check_params = Arr::except($data, ['hash', 'signature']);

        ksort($check_params);

        foreach ($check_params as $param => $value) {
            $check_params[$param] = "$param=$value";
        }

        $data_check_string = config('telegram.bot_id') . ":WebAppData\n";
        $data_check_string .= implode("\n", $check_params);

        try {
            $public_key = sodium_hex2bin(config('telegram.public_key'));
            $signature = base64_decode(strtr(Arr::get($data, 'signature'), '-_', '+/'));

            if (sodium_crypto_sign_verify_detached($signature, $data_check_string, $public_key)) {
                $auth_date = Arr::get($data, 'auth_date');

                if (time() - $auth_date < 86400) {
                    $user = $this->firstOrCreate(
                        json_decode(Arr::get($data, 'user'), true),
                    );
                }
            }
        } catch (SodiumException $e) {
            //
        }
    }

    return isset($user)
        ? $this->createAccessToken($user, md5(json_encode($data)))
        : new AccessToken();
}


что вы собрались ждать в обновлении доки, если там все уже есть?

Как копировать код с картинок?

Вы же заметили, что привели третьим аргументом название организации, которой на тот момент не существовало?

1

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность