
Андрей
05.09.2018
07:41:00
Друзья, нормальный ли это сценарий, когда бэк отдает SPA-фронту (браузер) токен авторизации в явном виде (не в HTTP-only куке)? Кто так делает, как обезопаситься от того, что сторонний JS-код, загруженный из CDN, или скомпиленный из npm, или в расширении для браузера, сможет прочитать и передать такой токен на сторону?

Roman
05.09.2018
07:42:25

Андрей
05.09.2018
07:44:29
А в Authorization header?
Ты имеешь ввиду авторизовывать потом запросы от фронта к бэку таким способом? Это ок. Токен должен как-то храниться на фронте, чтобы его можно было засунуть в конфиги траспорта AJAX. И оттуда, где он хранится, его можно прочитать.
А чтобы при закрытии вкладки авторизация не слетала, хранить его надо все равно в куках или в local storage

Google

Roman
05.09.2018
07:46:17
ну, если логично судить, то без http-only кук ты не скроешь токен. Они для того и сделаны, чтобы джаваскрипт не смог прочесть их.

Valentin
05.09.2018
07:51:03

Roman
05.09.2018
07:52:13


Андрей
05.09.2018
07:52:56
ну, если логично судить, то без http-only кук ты не скроешь токен. Они для того и сделаны, чтобы джаваскрипт не смог прочесть их.
Спасибо, тогда разовью мысль о моей проблеме, используя HTTP-only cookie. В приложении есть быстрый переход по контекстам авторизации. Почти как в гугле: тыкаешь на иконку в правом верхнем углу и переавторизовываешься за другое лицо.
Возникла проблема: пользователь может начать заказывать продукт за одно лицо, в соседней вкладке переавторизоваться и продолжить заказывать продукт уже не за того, для кого форма была предназначена.
1 решение. Если бы не HTTP-only cookie, то можно было бы сложить токен авторизации в window, и пока вкладка открыта, производить все действия на сайте от лица единственного человека, за которого страница была открыта.
2 решение. Придумал подписывать формы токеном на основе авторизации. Как CSRF, только при каждой смене контекста такой токен будет перегенерироваться.
Может быть у кого-то были подобные кейсы и могут поделиться опытом?


Valentin
05.09.2018
07:53:29

Sergey
05.09.2018
08:27:44


Roman
05.09.2018
08:29:53

Shaun
05.09.2018
08:30:26
Обесопаситься это пять)

Sergey
05.09.2018
08:30:46

Roman
05.09.2018
08:34:45

Sergey
05.09.2018
08:42:44

Google

Sergey
05.09.2018
08:43:05
что бы не допускать что кто-то ходит в нашу апишку с токеном с неизвестных нам хостов

Roman
05.09.2018
08:45:09

Андрей
05.09.2018
08:46:36

Sergey
05.09.2018
08:47:06

Андрей
05.09.2018
08:47:27
то есть форму изменения корзины тоже чем-то подписывать надо

Sergey
05.09.2018
08:47:34
это настолько редкий кейс что думать о юзер френдли тут смысла нет

Андрей
05.09.2018
08:51:03
резюмируя, любая форма должна иметь некоторый идентификатор контекста под которым она заполнялась, и который должен валидироваться на бэк-энде?

Sergey
05.09.2018
08:51:21
какая к черту форма?
а ну.... или у тебя карзины на сервере не существует?

Андрей
05.09.2018
08:51:55

Sergey
05.09.2018
08:52:17
хватит мыслить формами

Андрей
05.09.2018
08:52:35

Sergey
05.09.2018
08:52:40

Roman
05.09.2018
08:53:02

Андрей
05.09.2018
08:53:43
Здесь другой кейс. Это не интернет-магазин. Это страховая, которая продает страховые продукты с ооочень многими комбинациями полей, личными данными, настройками продукта и т.д. и т.п. Корзинами здесь мыслить не приходится
Речь даже не о продуктах. Я не хочу позволять юзеру делать любой POST-экшен не за того человека, за которого заполнение формы начиналось

Sergey
05.09.2018
08:57:38

Андрей
05.09.2018
09:03:04

Google

Sergey
05.09.2018
09:03:43

Alexandr
05.09.2018
09:10:57
Ребята объясните пожалуйста. Абстрактный класс, какие у него плюсы и минусы? Я пятый раз читаю документацию,делаю маленькие примерчики, и все равно не понимаю. Ведь там сказано,что абстрактный класс обязан иметь строгую типизацию,к примеру приватный в абстракте не может стать публичным. Так объясните мне
Но на деле все наоборот,написав публичный метод в дочернем классе того же приватного метода в абстрактном классе,он выдает данные. Хотя обязана быть ошибка

Roman
05.09.2018
09:14:10

F01134H
05.09.2018
09:14:10

Roman
05.09.2018
09:14:55

Maksim
05.09.2018
09:15:14
геттеры\сеттеры в абстрактом классе - путь в макдональдс

Sergey
05.09.2018
09:15:17

F01134H
05.09.2018
09:15:36

Sergey
05.09.2018
09:15:43
перепутал чаты сорян

Артур Евгеньевич
05.09.2018
09:15:48

F01134H
05.09.2018
09:15:58
действительно

F01134H
05.09.2018
09:16:03
джава и пхп - одно и то же

Артур Евгеньевич
05.09.2018
09:16:14
два хороших яызка

Maksim
05.09.2018
09:16:48
у абстрактного класса должен быть приватный стеит, на который нельзя повлиять из наследников. Иначе это всё плохо закончится под благим предлогом "я же убираю копипасту".

Roman
05.09.2018
09:17:42
а потом трейты и наркотики

Alexandr
05.09.2018
09:18:02

F01134H
05.09.2018
09:18:04
и анальный секс

Google

Roman
05.09.2018
09:18:33

Sergey
05.09.2018
09:18:41

Alexandr
05.09.2018
09:19:06

Roman
05.09.2018
09:19:26
я абстрактный класс юзаю в основом для классов типа JsonResponse :)

Alexandr
05.09.2018
09:20:12
Так сказано в доках: кроме того, область видимости этих методов должна совпадать (или быть менее строгой)

Sergey
05.09.2018
09:20:17

Roman
05.09.2018
09:20:33

Sergey
05.09.2018
09:20:53

Admin
ERROR: S client not available

Alexandr
05.09.2018
09:21:05

Sergey
05.09.2018
09:21:20
ну бля подумай просто, это ж было бы тупо
хотя вполне в духе php но всеравно тупо

Alexandr
05.09.2018
09:22:02
Ладно благодарю. Спасибо)

Roman
05.09.2018
09:22:18

Sergey
05.09.2018
09:23:00
а зная среднестатистических php-ников они 100% проебутся

F01134H
05.09.2018
09:23:35
> инварианты
?

Roman
05.09.2018
09:23:51

Артур Евгеньевич
05.09.2018
09:24:27
а в чем плюсы дефолтной реализации

Google

Артур Евгеньевич
05.09.2018
09:24:34
я думал это и есть минус основной
типо что класс называется абстрактным, а в нем конкретика

Sergey
05.09.2018
09:25:23
плюсы что у тебя инстанциировать класс нельзя, но реализация может быть и ее можно использовать в потомках.

Maksim
05.09.2018
09:25:36
ну в моём случае - это способ быстро и легко запрятать инфраструктуру, не усложняя реализации в целом.

Sergey
05.09.2018
09:25:39
ну мол это единственный плюс абстрактных классов. Если тебе это не надо - тебе они вообще не нужны

Артур Евгеньевич
05.09.2018
09:26:10
по сути мы присобачиваем какой то метод к интерфейсу
нет ли тут проблемы проектирования
и не нужно ли этот метод вынести в другой объект

Maksim
05.09.2018
09:26:36
не всегда оправдано

Sergey
05.09.2018
09:26:47
и да - я руководствуюзсь предположением что описание стэйта класса, даже если оно одинаковое никак не может быть дублированием ибо в противном случае зачем тебе делать 2 класса а не один

Maksim
05.09.2018
09:27:35

Sergey
05.09.2018
09:27:52

Maksim
05.09.2018
09:27:53
сотни практически идентичных структурок)

Sergey
05.09.2018
09:28:11
я про protected стэйт)

Maksim
05.09.2018
09:28:25
а, в хер его. уже нажрался говна

Sergey
05.09.2018
09:28:28
private стэйт в абстрактном классе которым можно рулить только через методы - ну.... это имеет право на жизнь
просто... тогда extends можно заменить на агрегацию/композицию. Простто иногда абстрактный класс удобнее

Maksim
05.09.2018
09:29:05
опять-таки, если есть понимание происходящего. а не просто "копипасту убрать"

Alexandr
05.09.2018
09:29:56
К свойствам в абстрактном классе можно добавлять abstract public $name;
JetBrains на такое ругается