
Dima
12.08.2018
17:07:54
А как на app.codesignals.com приглашать народ, чтоб мне бейджик дали?

Alex
12.08.2018
17:40:15
Ребята, всем добрового времени суток. Помогите с советом.
Есть 2 сайта, один на rails, другой на php.
Rails должен отправлять кое какие данные по API в PHP, а тот создавать записи у себя в базе.
Как правильно сделать все это секьюрным?
Какой тип аутентификации\авторизации лучше использовать?
Сайт на rails отправлять данные в PHP без участия пользователя.

Roman
12.08.2018
17:44:19

Damir
12.08.2018
17:47:49

Google

Alex
12.08.2018
17:48:08
Hmac
Этот не очень гибкий из того что я прочитал, там все нужно преобразовать в строку, а с массивами это будет сложно. Верно?

Roman
12.08.2018
17:49:27

Alex
12.08.2018
17:50:00

Roman
12.08.2018
17:50:48
.inspect и все

Sunny
12.08.2018
17:50:59

Alex
12.08.2018
17:51:56
а с чем у тебя там массивы?
Пока ни с чем. Пока задача выбрать архитектурно верное и оптимальное решение, с учетом того что мне придется это сделать на php, чтобы защитить его API, а php я не знаю. Ruby знаю.

Roman
12.08.2018
17:52:41
Ты можешь хешировать не всё поля, а только какой-нибудь id, если он есть

Alex
12.08.2018
17:58:30
В случае с JWT насколько я понимаю приложение Rails первый раз стучится просто с логином и паролем. Потом получает от php сгенерированный JWT и следующим запросом отправляет данные в POST запросе прикладывая полученный JWT ключ. Верно?
Если в двух словах верно я описал алгоритм взаимодействия?

Roman
12.08.2018
18:02:43
С hmac суть в том, что ты делаешь хеш сумму, на другой стороне также данные хешируешь, если все совпадает, то принимаешь

Sunny
12.08.2018
18:02:47

Alex
12.08.2018
18:03:15
В моем случае там API на POST будет со стороны php.

Google

Roman
12.08.2018
18:03:18
Ты можешь шифровать данные в jwt и гонять один токег
Просто класть рядом один jwt токен не имеет большого смысла для секьюрности

Alex
12.08.2018
18:07:29

Roman
12.08.2018
18:08:07

Alex
12.08.2018
18:09:58
Ага
И это же данные дублируем в body? в незашифрованном виде?
Чтобы приложение на php могло взять эти данные, взять secret key, сформировать signature и проверить совпадает ли то что пришло с тем что получилось на сервере?

Roman
12.08.2018
18:10:35
Одна сторона шифрует, другая дешифрует
В боди только токен
Но я хз, что там за данные, которые ты так хочешь защитить
Сбер, например, при передачи платежных данных использует hmac
Cloudpaymets http basic auth

Alex
12.08.2018
18:15:03

Roman
12.08.2018
18:17:19
Ну если пароль в bcrypt, то достаточно только hmac или http basic auth

Alex
12.08.2018
18:19:24
Я тут используя онлайн генераторы JWT сформировал токен, вставил в дешифровщик и он расшифровал payload даже не имея secret_key. Тоесть secret key зашифрованный используется лишь для того чтобы удостовериться, что запрос пришел от человека у которого был данный secret_key

Roman
12.08.2018
18:19:37
Хотя не, с bcrypt не прокатит
Jwt шифруется и дешифруется по ключу обычно

Alex
12.08.2018
18:20:55
получается в незашифрованном виде пароль не передашь. Пароль в php нужен в явном виде.

Roman
12.08.2018
18:21:39
Ну кароч я бы на твоём месте все в jwt пихал

Alex
12.08.2018
18:21:46

Roman
12.08.2018
18:24:18
Попробуй рубишным jwt зашифровать, оно никак не должно без ключа дешифроваться

Alex
12.08.2018
18:25:24
Хорошо, спасибо за советы. Итого мы имеем вывод, что в JWT фактически достаточно даже безопасно передать пароль пользователя предварительно не шифруя его. Верно?

Google

Roman
12.08.2018
18:25:55
Ты можешь и пароль зашифровать)

Alex
12.08.2018
18:28:05
https://jwt.io/ расшифровал и рубишный )

Igor
12.08.2018
18:28:24
JWT только подписывает данные и предотвращает их модификацию

Alex
12.08.2018
18:29:32

Igor
12.08.2018
18:29:52
Если нужно передавать скрытую информацию между сервисами которые располагаются на разных машинах будет достаточно https и любой общий secret token

Roman
12.08.2018
18:30:36
Как это не шифрует? Без secret key доступ к данным никак не получить

Igor
12.08.2018
18:31:35

Alex
12.08.2018
18:31:43

Igor
12.08.2018
18:33:26

Roman
12.08.2018
18:36:15

Tim
13.08.2018
04:58:34

Igor
13.08.2018
05:38:12
Тут много за ООП рассуждают, сервисы и т.д. Есть интересный способ скрывать скрывать классы с верхнего уровня видимости в руби https://habr.com/post/419969/

Roman
13.08.2018
05:44:56
в нормальном проекте я бы так не делал

kolas
13.08.2018
05:53:28
у нас же convention over configuration, нафиг нам скрывать классы
лучше показывать пальцем и обзываться на того кто обращается к редису из view

Tim
13.08.2018
06:25:49
а к базе?)

Igor
13.08.2018
06:26:59
Если к базе, то за спиной должен стоять специально обученный человек с черенком достаточной длины

Google

kolas
13.08.2018
06:28:21
редис же и есть база

Tim
13.08.2018
06:28:25
прямо голым сиквелом
ну я имел в виду не nosql

Admin
ERROR: S client not available

Igor
13.08.2018
06:29:58
Вот что бы не выделять специального человека с черенком, можно скрыть классы которые позволяют напрямую обращаться к БД (primary storage)

kolas
13.08.2018
06:31:43
лучше обзываться )

Roman
13.08.2018
06:51:03
для всего этого есть code review

kolas
13.08.2018
06:59:40
тем более сокрытие классов не поможет от такого как record.update(...)
или Model.select(...)

Igor
13.08.2018
07:42:05

Anton
13.08.2018
08:28:48

Igor
13.08.2018
08:29:14
Почему?

Nikolay
13.08.2018
08:39:16
Дело не в инструменте, а в людях\руках

Anton
13.08.2018
08:40:17

Nikolay
13.08.2018
08:40:23
Понятно, что некоторые инструменты больше форсят плохие решения, но конечная реализация зависит только от тебя

Anton
13.08.2018
08:40:55
Почему?
Ну, я видел пару примеров, где на ханами писали хуже чем на рельсе, так что выкидывание инструмента не поможет, нужен сдвиг в сознании

Tim
13.08.2018
08:57:30
Чето рофл какой-то, рспек отказывается видеть класс.
Есть структура, условно говоря,
cart::requests::create_cart и cart::responses::create_cart
рспек видит cart::responses::create_cart, а cart::requests::create_cart нет
при чем говорит
uninitialized constant Requests::CreateCart (NameError)

Google

Tim
13.08.2018
08:58:15
что не полное название класса

kolas
13.08.2018
08:58:22
может private_constant мешает?

Tim
13.08.2018
08:58:27
чё за хуйня? ему реквестс не нравится?
лолд
нет
при чем в рельсовой консоли я вижу тот класс
а рспеку не нравится

Alexander
13.08.2018
08:59:04

Tim
13.08.2018
08:59:14
он почемуто ищет Requests::CreateCart
Ну я прописываю AmazonAPI::Entities::Cart::Requests::CreateCart
а жалуется на Requests::CreateCart
а если AmazonAPI::Entities::Cart::Requests**s**::CreateCart
то всё ок
пиздец