• Что такое apache superset? И как его установить?

    @kizimenko
    Инструмент для исследовани и визуализации данных.
    Подключается к вашим источникам данных (БД, CSV, Google Sheets и тд)
    Дает вам возможность писать SQL запросы или собирать запрос даже без знания SQL, просто выбирая из выпадающих списков что вам нужно.
    Есть русскоязычное сообщество в tg: https://t.me/superset_ru
    Ответ написан
    Комментировать
  • Как шифровать личные данные пользователей?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Давайте различать. Шифрование пароля - это не то же самое, что шифрование других данных. Пароль следует не шифровать, а хешировать. Это такое шифрование, которое нельзя расшифровать обратно. То есть имея хеш нельзя получить пароль, а имея пароль можно получить точно такой же хеш. Существуют для этого специальные хеш функции. Но хешировать пароли мало, их нужно сперва солить. Соль - это произвольный текст, присоединённый к паролю перед хешированием и размещаемый рядом с хешем в открытом виде. Нужна соль для того, чтобы нельзя было подбирать простые пароли по значению их хешей.
    Проверка пароля будет такой:
    1. Запрашиваем у пользователя логин и пароль.
    2. Достаём из БД по логину хеш солёного пароля.
    3. С этой солью хешируем введённый пользователем при авторизации пароль и сличаем хеши. Совпали -- значит пускаем.

    Шифрование других данных, очевидно, нужно уже обратимое, чтобы можно было расшифровать. И теперь есть два варианта: серверное и клиентское шифрование.

    Серверное не имеет смысла, поскольку скомпрометированный сервер означает утечку всего необходимого для расшифровки данных. Не скомпрометированный сервер означает, что данные и так вроде бы в безопасности. Значит шифровать не нужно (ну кроме некоторых специальных случаев).

    Клиентское шифрование - это когда сервер не имеет возможности расшифровать данные. Они шифруются на клиенте перед отправкой ключом, который не покидает пользовательского компьютера. Потом клиент снова запросит шифрованные данные с сервера и расшифрует его тоже сам. Это иногда имеет смысл. Например если вы храните keychain с паролями на сервере, но не хотите их утечки в случае взлома сервера.

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

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

    О, чуть не забыл. Есть опасность утечки незашифрованных данных из датацентров при наличии физического доступа к жестким дискам. Чтобы обезопасить себя в этом смысле, можно применить прозрачное шифрование файловой системы. Работающая операционная система будет знать ключ для расшифровки данных, но отсоединённый диск становится без ключа бесполезным. Однако это малоэффективно, если украдут весь сервер вместе с дисками. Зато эффективно против восстановления жуликами данных, если диск сгорел, а его сисадмин выбросил не просверлив.

    Ещё один аспект - это канал передачи. Нет смысла опасаться перехвата незашифрованных данных в канале передачи даже на последней миле провайдера клиента. Об этом заботится SSL когда правильно настроен HTTPS и сертификаты не скомпрометированы, а пользователь не подмахнул левый сертификат.

    Если вы задаёте вопрос о необходимости шифрования, значит вам ничего сверх вышесказанного шифровать не нужно. Это усложнит систему, сделает её менее надёжной, более (как ни парадоксально) уязвимой и отнимет ресурсы процессора, памяти, не даст использовать или усложнит кэширование и прочие оптимизации.
    Ответ написан
    Комментировать
  • Как сделать проверку и валидирование токенов авторизации на клиентской части?

    @bpGusar
    *spoiler*
    сделай роут приватный (можешь загуглить как) на фронте, который при каждой попытке доступа к нему будет делать проверку на бэке твоего токена с фронта, и бэк будет присылать ответ типа доступ разрешен или нет.
    с не/авторизован делать просто проверку того что токен лежит в куках или где ты там его хранишь ну и т.д, например ты просто удаляешь чела из базы а он еще юзает сайт и при проверке на беке сделать так что б если юзер не существует отправлять на фронт что юзер не существует и ты уже с фронта удаляешь токен просто.

    кейсов много всяких.

    надеюсь объяснил ))
    Ответ написан
    1 комментарий
  • Как создать html тег с классом и содержимым через JS?

    Seasle
    @Seasle Куратор тега JavaScript
    А есть пример, что создать надо? Вы имеете ввиду такое?
    const render = (tag, properties = null, children = null) => {
        const element = document.createElement(tag);
    
        if (properties !== null) {
            for (let [key, value] of Object.entries(properties)) {
                if (key in element) {
                    element[key] = value;
                } else {
                    element.setAttribute(key, value);
                }
            }
        }
    
        if (children !== null) {
            if (children instanceof Array) {
                element.append(...children);
            } else {
                element.append(children);
            }
        }
    
        return element;
    };
    
    const element = render('div', { className: 'article' }, [
    	render('header', { className: 'article__header' }, render('h1', {
    		className: 'article__title',
    		textContent: 'Article'
    	})),
    	render('main', { className: 'article__body' }, Array(12).fill(null).map(() => render('p', {
    		className: 'article__text',
    		textContent: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.'
    	})))
    ]);

    Сделает такой элемент
    <div class="article">
        <header class="article__header">
            <h1 class="article__title">Article</h1>
        </header>
        <main class="article__body">
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
            <p class="article__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit tenetur, voluptate tempora illum, sed exercitationem! Minima quasi, doloremque quos hic blanditiis commodi non dolorum. Assumenda ex aperiam voluptatibus laborum dolor.</p>
        </main>
    </div>
    Ответ написан
    2 комментария
  • Как поставить KPHP и KDB?

    AterCattus
    @AterCattus
    Люблю быстрый backend
    Не советую этим заниматься. Публичная репа заброшена с момента появления, а вливать в нее свежие релизы ребята (пока?) не готовы.
    Да, по скорости можно получить ускорение в несколько раз в сравнении с php7, но оно того не стоит в текущих реалиях.
    Ответ написан
    Комментировать
  • Как поставить KPHP и KDB?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    LinuxGod, PHP 7.x по скорости будет сопоставим с любым из имеющихся веб языков, как альтернатива kphp - phalcon php project - попытка создать модули mvc модели на более быстром Си, однако, не смотря на плюшки в виде более-менее вменяемого ооп и нормального мвц, тоже имеет ряд проблем. В частности надо будет от души потанцевать с бубном вокруг установки этой вундервафли и более-менее свежих либ под нее. В итоге на данный момент пхп 7.х вполне сопоставим по скорости исполнения чистого пыхового кода с фалконовскими сишными модулями.
    Вывод - на сегодня нет смысла юзать неподдерживаемое / малоиспользуемое гуано, когда нативный пых в принципе не сильно отстает, кроме того в вебе 99% задержек и тормозов СОВСЕМ не относятся к исполнению чистого кода, большую часть времени пых простаивает в ожидании запросов к бд и файловой системе.
    Ответ написан
    Комментировать
  • Как отключить _id в коллекциях mongo?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    Его нельзя отключить, это уникальный id для каждого объекта. Но вы можете его переопределить, указав в модели своё значение. Вопрос лишь, накой оно вам нужно!!! Ну есть и есть, чем оно мешает
    Ответ написан
    6 комментариев
  • По какому принципу строится авторизация ВКонтакте?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Это банальный OAuth 2
    Ответ написан
    Комментировать