@prophp7

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

Андрей
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
ну, если логично судить, то без http-only кук ты не скроешь токен. Они для того и сделаны, чтобы джаваскрипт не смог прочесть их.
Привет, токен на фронте ты никак не защитишь, тут надо подходить со другой стороны - подключаем и используем только доверенные/проверенные пакеты, потому что на самом деле кража токена это самое меньшее что может сделать вредоносный скрипт

Андрей
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
ну, если логично судить, то без http-only кук ты не скроешь токен. Они для того и сделаны, чтобы джаваскрипт не смог прочесть их.
пока оптимальный вариант который используется - часть токена в куках часть в заголовках. Тогда как бы и от CSRF защищены и от XSS

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

Roman
05.09.2018
08:29:53
пока оптимальный вариант который используется - часть токена в куках часть в заголовках. Тогда как бы и от CSRF защищены и от XSS
А можно поинтересоваться - это как? Может чтиво есть? Мы как раз на jwt переходим, и хотелось бы максимально обесопаситься

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

Roman
05.09.2018
08:34:45
ну вот в jwt - подпись в куки, токен в заголовки
А в заголовке мы держим только header и payload?

Sergey
05.09.2018
08:42:44
А в заголовке мы держим только header и payload?
да. Но вообще - опять же, можно просто всегда токен хранить в куках и просто проверять Origin/Referer заголовки

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

Roman
05.09.2018
08:45:09
да. Но вообще - опять же, можно просто всегда токен хранить в куках и просто проверять Origin/Referer заголовки
Я так понимаю, это если есть возможность обойтись куками. А если нету, то тогда разделить токен на части. Спасибо, узнал что-то новенькое)

Sergey
05.09.2018
08:47:06
А как "первая" узнает, что сессия слетела, если кука с токеном http-only?
пойдет делать запросы на изменение чужой карзины и узнает

Андрей
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
какая к черту форма?
форма = любой POST-запрос.

а ну.... или у тебя карзины на сервере не существует?
вообще корзин не существует. Точечный заказ продуктов из форм

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

Андрей
05.09.2018
08:52:35
хватит мыслить формами
ок, я только для понятности

Sergey
05.09.2018
08:52:40
вообще корзин не существует. Точечный заказ продуктов из форм
просто обычно "добавить в корзину" это посложнее операция нежели просто добавить айдишку и колличество. Товар надо зарезервировать что бы если у тебя есть 10 яблок нельзя было словить заказ на 20 яблок от двух пользователей

Roman
05.09.2018
08:53:02
вообще корзин не существует. Точечный заказ продуктов из форм
Интернет магазин оч маленький я так понимаю?

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

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

Андрей
05.09.2018
09:03:04
у тебя оч странный и специфичный кейс, хз короч
Кейс - да, проблему пытаюсь описать максимально абстрактно. В итоге - вы не заморачиваетесь насчет этой проблемы или подписываете POST-запросы идентификатором сессии/пользователя?

Google
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
Абстрактные классы оч редко используются на практике. По факту они нужны, когда у тебя есть интерфейс, но часть функционала в описываемых реализациях обязательно повторяется - ты ее выносишь в абстракцию
если мы про джаву то даже если у тебя есть дефолтная реализация нет смысла городить абстрактный класс - интерфейс может содержать реализацию

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
у абстрактного класса должен быть приватный стеит, на который нельзя повлиять из наследников. Иначе это всё плохо закончится под благим предлогом "я же убираю копипасту".

Alexandr
05.09.2018
09:18:02
у абстрактного класса должен быть приватный стеит, на который нельзя повлиять из наследников. Иначе это всё плохо закончится под благим предлогом "я же убираю копипасту".
Я написал абстрактный приватный метод(ПО ДОКУМЕНТАЦИИ СКАЗАНО),начинаю делать дочернии класс от абстрактного класса,и называю этот же метод публичным,данные выводятся,ошибок нет. В доках сказано: что типизация самая строгая в абстракте.

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

Google
Sergey
05.09.2018
09:18:41
Ребята объясните пожалуйста. Абстрактный класс, какие у него плюсы и минусы? Я пятый раз читаю документацию,делаю маленькие примерчики, и все равно не понимаю. Ведь там сказано,что абстрактный класс обязан иметь строгую типизацию,к примеру приватный в абстракте не может стать публичным. Так объясните мне
в php: плюсы: - может иметь дефолтную реализацию методов минусы: - может иметь protected стэйт - а это всегда огромный минус и прощай досвиданья старушка Лисков - для классов нет множественного наследования а потому сильно ограничивается иерархия тиипов

Alexandr
05.09.2018
09:19:06
а как вы понимаете типизацию в этом случае?)
int - int, string = string, приватный и приватный. Если что то другое выводится,ошибка

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

int - int, string = string, приватный и приватный. Если что то другое выводится,ошибка
ну, это немножко разные вещи типизация и тип доступа функций

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

Sergey
05.09.2018
09:20:17
Я написал абстрактный приватный метод(ПО ДОКУМЕНТАЦИИ СКАЗАНО),начинаю делать дочернии класс от абстрактного класса,и называю этот же метод публичным,данные выводятся,ошибок нет. В доках сказано: что типизация самая строгая в абстракте.
возможность объявить приватный метод который невозможно перегрузить из подтипов (он же приватный, только из контекста этого класса может быть вызван) никакого отношения не имеет к абстрактным или просто классам. Это банальная логика. инстанс класса не может вызвать у себя метод о котором он ничего не знает, следовательно он никак не сможет вызвать публичный метод подтипа.

Sergey
05.09.2018
09:20:53
ну так public/protected - это менее строгий)
public/protected подразумевает возможность перегрузки. private - нет

Admin
ERROR: S client not available

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

хотя вполне в духе php но всеравно тупо

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

Sergey
05.09.2018
09:23:00
а как мы лисков нарушаем? в том плане что подтипы не контролируют свой стейт?
ну тип того. у стэйта обычно есть инварианты и если у твоего класса экспоузится стэйт потомкам - то ты теряешь контрольь и уже не можешь гарантировать что все подптипы соблюдают контракт

а зная среднестатистических php-ников они 100% проебутся

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

Артур Евгеньевич
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 класса а не один

нет ли тут проблемы проектирования
иногда это удобно. Погугли почему в java добавили реализацию методов у интерфейсов - хороший пример такого кейса

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 на такое ругается

Страница 1281 из 1387