Pull to refresh
-2
0

Software Engineer

Send message

В данный момент в конкурсе NIST участвует работа математика DeFeo - SIKE. Там используются эллиптические кривые, а именно изогении на суперсингулярных кривых. Есть теоретическая оценка, что вычисления на изогениях квантово устойчивы. Как-то так.

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


Чего не сказали выше, так это то, что как раз с точки зрения безопасности использование JWT не очень-то хорошая идея — JWT паршиво спроектирован, в нём было допущено немало критических ошибок как в дизайне так и в реализациях, что привело к нескольким уязвимостям. Кроме того, JWT избыточно переусложнён, и им не так просто пользоваться, как должно было бы быть. К счастью, есть альтернатива JWT, лишённая всех этих недостатков: PASETO.


Понятно, что если ваше приложение уже получает JWT от стороннего сервиса вроде гугла то придётся использовать JWT (только сначала убедившись, что текущая реализация не имеет известных проблем с безопасностью, и перепроверив что способ которым вы используете библиотеку для JWT не создаёт другие известные уязвимости). Но вот если вы пишете новый сервис и в нём реально необходим не обычный токен в базе, а нужно, например, разгрузить сервис аутентификации от лишних запросов, для чего и предназначен JWT, то в этой ситуации лучше сразу используйте PASETO — он и безопаснее и проще в использовании.


Вот забавный слайд из классной презентации PASETO с критикой JWT:

Из недостатков разве что сложность блокировки утекшено токена, вот тут придется добавлять его в бд, и как-то проверять.

А что делать в ситуации когда пользователь сменил пароль и его нужно разлогинить со всех устройств? Пусть даже не со всех, с текущего.
Как только Вы сохраняете JWT в базу он превращается в обычный токен авторизации и теряет свои преимущества.

Или как обновить информацию в токене, если пользователю поменяли права доступа с admin на user, например?

Вот хорошая статья на эту тему cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions
Мне кажется гораздо удобнее пересобирать пакет с нужными опциями через
sudo apt-get build-dep nginx
apt-get source nginx
cd nginx-*
DEB_CFLAGS_APPEND="--with-openssl=/home/db/openssl-1.0.2h" dpkg-buildpackage -us -uc

«Ваш пароль уже используется аккаунтом misha1994, пожалуйста придумайте другой пароль»
«Почему к вам нельзя ни в коем случае приходить на работу» в 30 строк.

Test 1.1: function
Array это функция, как и все классы в javascript.
Если все «классы» — это функции, можно пример функции, которая не является «классом», если ее вызвать через new? Запишем — что такое конструктор, вы не знаете.
Test 1.2: object
prototype функции — это Object
Да? function C() {}; C.prototype = ['неправда, вы не знаете JS']; console.log((new C)[0]);
Test 1.3: function
push — это метод Array, определенный в prototype
Это просто функция. Если вызвать ее, как Array.prototype.push('foo'), ничего хорошего не случится. Чтобы быть «методом», ее нужно вызывать, как [].push('foo'). Хотя с точки зрения системы типов это все равно функция, в prototype — это пока не метод.

Test 2.1: false
пустая строка преобразуется в false
Ну т.е. скажем, var a = {}; a[false] = 'foo'; a[""] = 'bar'; console.log(a[false] == a[""]); выведет true, правильно? :)
Test 2.2: true
null и undefined при преобразовании к boolean оба дают false
Великолепные рассуждения. Значит, null == 0, верно? Оба ж приводятся к false. Смотрите стандарт, 11.9.3, пожалуйста.
Test 2.3: true
!!n = false, n (пустая строка) тоже false
Опять такая же глупость, как и выше, и снова острая необходимость посмотреть 11.9.3 и 9.3.1.

Test 5: false
s.prototype — это отвлекающий маневр. prototype работает только на конструкторах (функциях). Поэтому s.b — undefined. И здесь подковырка — равны ли 0 и undefined? Нет, не равны.
А ваш же тест 2.2 говорит, что равны. Да, говорить, что «prototype работает только на конструкторах» — глупота. Если заменить объявление на s = function() {}; s.prototype.foo = 42;, s.foo не станет равно чему-то осмысленному.

Test 9.1: true
Переменная x была создана в глобальном контексте — т.е. она член window. При запуске функции this = window. То есть это условие верно.
По вашему, var lolka = 123; console.log(window.lolka); выведет 123? Я вас разочарую :)
Test 9.2: true
Да, window.x равна undefined.
Нет, window.x не определена — поэтому и undefined. Попробуйте Object.getOwnPropertyDescriptor(this, 'x'), убедитесь сами.
Test 9.3: true
Вот здесь интересный момент. Что такое undefined на самом деле? Это переменная window.undefined. В ранних версиях браузера ее можно было переопределить.
И значение этой переменной никак не влияло на значение непосредственно undefined. Это свойство существует из соображений обратной совместимости.


Я бы не взял вас на работу JavaScript-программистом, потому что JavaScript вы не знаете, но при этом твердо уверены в обратном.
Добавлена поддержка протокола SPDY 3.1;
JFYI, сегодня вышел nginx 1.5.10 также с поддержкой SPDY/3.1.
mailman.nginx.org/pipermail/nginx-ru-announce/2014/000128.html

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity