Size: a a a

Иван Акулов про разработку

2017 November 21
Иван Акулов про разработку
​​В продакшене перед Node.js-сервером с приложением часто размещают Nginx. Оказывается, вот для чего: https://stackoverflow.com/questions/16770673/using-node-js-only-vs-using-node-js-with-apache-nginx

(Коротко: Nginx повышает безопасность, упрощает роутинг трафика, быстрее отдаёт статические ресурсы)

#учу_nodejs_в_продакшене
источник
2017 November 24
Иван Акулов про разработку
​​Кстати, оказывается, чтобы компилировать нативные npm-ные модули в Windows, больше не нужно возиться с установкой Visual Studio, Python и т.д.

Майкрософт и Феликс Райсберг сделали пакет, который устанавливает и настраивает все инструменты сборки автоматически: https://github.com/felixrieseberg/windows-build-tools
источник
2017 November 25
Иван Акулов про разработку
🙏 Не используйте правило "linebreak-style": "unix" в ESLint.

Оно не нужно: в Windows, Git конвертирует CRLF в LF автоматически. А с ним разработчики на Windows увидят вот это:
источник
Иван Акулов про разработку
источник
Иван Акулов про разработку
Серьёзно, пойдите и добавьте "linebreak-style": "off" в ваш конфиг — его, например, по умолчанию включает AirBnB (а вот PR для отключения)
источник
2017 November 26
Иван Акулов про разработку
​​Как безопасно хешировать пароль для базы данных: https://codahale.com/how-to-safely-store-a-password/

(Ответ: использовать bcrypt, потому что он ужасно медленный)

#учу_nodejs_в_продакшене
источник
Иван Акулов про разработку
​​🔥 И всеохватывающая статья про хеширование паролей: https://crackstation.net/hashing-security.htm

— Как пароли обычно взламываются (брут-форс, словари, таблицы соответствия)
— Зачем использовать соль вместе с паролем и почему она должна быть разной для разных паролей
— Почему бессмысленно хешировать несколько раз (вот так: md5(sha1(password)))
— Зачем хешировать на сервере, а не на клиенте

#учу_nodejs_в_продакшене
источник
Иван Акулов про разработку
И последнее. Как хранить соль: https://security.stackexchange.com/a/17435

(Можно рядом с хешем пароля в той же таблице БД, в этом нет ничего страшного)

#учу_nodejs_в_продакшене
источник
Иван Акулов про разработку
❤️
источник
Иван Акулов про разработку
Переслано от Alexander Kladkov
Я уже думал что с ума сошел и подписался на наркоманские паблики
источник
Иван Акулов про разработку
Переслано от Alexander Kladkov
источник
2017 November 28
Иван Акулов про разработку
Виталий Павленко (кстати, подпишитесь на его канал: @thingsiread) про сложности собственной аутентификации ↓

#учу_nodejs_в_продакшене
источник
Иван Акулов про разработку
Самописная аутентификация пользователей - это очень больно

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

- АПИ авторизации через соцсети со временем протухают. Через соцсеть надо не забывать вытаскивать емейл.

- Емейлы везде нужно ловеркейсить.

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

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

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

- Для пароля нужно использовать models.PasswordField, чтобы пароль сам за вас хешировался и солился в базе. При этом пароль всё равно будет утекать в открытую в логи, пока вы не поставите везде где надо декоратор sensitive_post_parameters.

В общем, я созрел для вендор-лока на Auth0, Firebase Authentication или Amazon Cognito User Pool.
источник
2017 November 29
Иван Акулов про разработку
Привет!

А здесь есть кто-то, кто использует webpack-dashboard? Напишите мне, пожалуйста. Мне нужно понять, как обычно им пользуются люди → @iamakulov

(С меня набор стикеров для Телеграма, которого у вас нет :–)
источник
2017 November 30
Иван Акулов про разработку
«Неправильный сервис-воркер может сломать сайт так, что вы не сможете починить его даже со стороны сервера (или, по крайней мере, не сразу). Представьте: кажется, что сайт лежит, но обновление страницы ничего не исправляет, потому что браузер даже не обращается к серверу — он общается только с поломанным сервис-воркером».

Дэн Фебьюлих про особенностях поведения и опасностях сервис-воркеров: https://redfin.engineering/service-workers-break-the-browsers-refresh-button-by-default-here-s-why-56f9417694
источник
Иван Акулов про разработку
Статья про хеширование паролей (https://t.me/iamakulov_channel/203) рекомендует, когда человек неправильно вводит логин, писать общую фразу «неправильный логин или пароль». Аргумент — если различать случаи «неправильный логин» и «неправильный пароль», то взломщик сможет найти существующие логины и подбирать пароли уже к ним.

А оказывается, это никак не помогает. Куча сайтов пишет «Этот логин уже занят» при регистрации, тем самым выдавая этот же логин. Значит, смысла усложнять пользователям жизнь нет:
источник
Иван Акулов про разработку
🔓 Неправильное имя пользователя или пароль

Игорь Шевченко предлагает вместо мутного «неправильное имя пользователя или пароль» сообщать конкретную проблему:

— нет такого пользователя,
— неправильный пароль.

На безопасности это не отразится:
http://igorshevchenko.ru/blog/entries/incorrect-username-or-password
источник
Иван Акулов про разработку
Ну и вот пример Гугла, кстати
источник
2017 December 05
Иван Акулов про разработку
Как оптимизировать изображения в Вебпаке

1. Инлайнить небольшие png-, jpg- и gif-файлы с помощью url-loader.

url-loader сконвертирует файл (если он меньше заданного размера) в base64-урл и вставит этот урл в бандл. Это помогает избежать лишних запросов за файлами (что полезно даже с HTTP/2).

Предел размера в 5–10 КБ — ок:

module.exports = {
 module: {
   rules: [
     {
       test: /\.(jpe?g|png|gif)$/,
       loader: 'url-loader',
       options: {
         // Изображения больше 10 кб не будут заинлайнены
         limit: 10 * 1024
       }
     }
   ]
 }
};
источник
Иван Акулов про разработку
Как оптимизировать изображения в Вебпаке

2. Инлайнить небольшие svg-файлы с помощью svg-url-loader.

Этот загрузчик работает так же, как url-loader, но кодирует файлы не в base64, а с помощью url-энкодинга. Так как svg — это текст, результат получается меньшего размера.

Предел размера в 5–10 КБ — тоже ок:

module.exports = {
 module: {
   rules: [
     {
       test: /\.svg$/,
       loader: 'svg-url-loader',
       options: {
         // Изображения больше 10 кб не будут заинлайнены
         limit: 10 * 1024,
         // Убираем кавычки вокруг закодированного файла —
         // они редко нужны
         noquotes: true,
       }
     }
   ]
 }
};
источник