@rubyschool

Страница 308 из 921
Vlad
19.08.2017
11:00:24
Тоесть все данные в контроллере пришедшие из формы нужно перепроверять?
И данные лучше валидировать и\или перепроверять\изменять в модели. True way. Контроллер для другой цели служит)

Ну да. Если я праивльно понял. То надо просто проверять создать в модели кастомную валидацию (хотя может как-то и по другому), которая будет проверять blog_id параметр. Ну типа def blog_validation if Blog.find_by_id(blog_id).user_id != current_user errors.add(:blog_id, "Shit happens, cheater!") end end

Ибо так то спокойно можно зайти в эту форму, и в options поставить другой ID и выбрать и отправить его)

Vitaliy
19.08.2017
11:15:47
☝️ все так

Google
Vlad
19.08.2017
11:16:39
Ну значит я не такой уж и тупой. А работу найти не могу. Хоть людям помогу)

Alex
19.08.2017
11:18:50
? спасибо, мои сомнения разбиты, надо валидировать

Fedor
19.08.2017
12:05:59
csrf позволяет защититься от отправки формы с левого сайта

но не от подмены запроса

от подмены запроса невозможно защититься никак вообще

я могу взять curl и отправить по нужному ардресу абсолютно все, что угодно

твоя задача уже отфильтровать то, что пришло на сервере

а там могут быть и sql инъекции, и попытки вызвать системные команды и подмены id шников...

Denis
19.08.2017
12:28:36
Чуваки помогайте!

………/site_ruby/2.4.0/rubygems/specification.rb:2288:in `raise_if_conflicts': Unable to activate dm-serializer-1.2.2, because json-2.1.0 conflicts with json (~> 1.6) (Gem::ConflictError)

json я снес давно и поставил заново 2.1.0

дак теперь и он не нравится что делать а?

Google
Denis
19.08.2017
12:45:51
что? ну я не знаю может я совсем ламер

spartakusQ
19.08.2017
12:46:14
гемфайл проверь

Denis
19.08.2017
12:46:57
#require 'watir' source "https://rubygems.org" gem 'cucumber', '2.4.0' gem 'rspec-expectations', '3.6.0' gem 'selenium-webdriver', '3.5.0' gem 'nokogiri' gem 'headless' gem 'pp' gem 'rubygems' gem 'data_mapper' gem 'dm-serializer';

Vlad
19.08.2017
13:08:15
gem dependency dm-serializer Gem dm-serializer-1.2.2 dm-core (~> 1.2.0) fastercsv (~> 1.5) json (~> 1.6) json_pure (~> 1.6) multi_json (~> 1.0) rake (~> 0.9, development) rspec (~> 1.3, development)

Denis
19.08.2017
13:10:16
bundle update json Could not find gem 'json'.

Vlad
19.08.2017
13:20:56
Гем хочет работать с json 1.6, который на рубячке 2.4 не заводится вообще

Попробуй в депенденсях поправить на 2.1.0

Правда потом надо их перезагрузить эти зависимости, кажется

И может прокатить костыль

Denis
19.08.2017
13:50:54
В где где Влад? депенденсях?

я нубик ? не пинать ?

Vlad
19.08.2017
13:51:35
Да я тоже нубоджун, поэтому не факт, что правильные советы даю)

Denis
19.08.2017
13:51:49
ну давай попробуем там поглядим? ?

короче что где править и как перегружать плиииз

Vlad
19.08.2017
13:52:16
Задача нетривиальная костылять гемы конечно, поэтому интересно, щас сам попробую

Denis
19.08.2017
13:52:36
спасибо

чета странно у меня на бубунту на серваке все завелось и все ок

Vlad
19.08.2017
13:53:21
А версия рубей какая на серваке?)

Google
Vlad
19.08.2017
14:08:46
Было решение мое такое - локально в геме править файл с зависимостями, в моем случае это ~/.rvm/gems/ruby-2.3.3/gems/dm-serializer-1.2.2, и изменить там строчку где указано ~> 1.6 на нужное. Потом кажется надо еще поменять там в настройках этого же гема версию гема (а может и не надо, проверять лень заново), чтобы при бандле он перезагрузился. А ну и в проекте в Gemfile указать например локальный путь к гему: gem 'dm-serializer', :path => '/home/vlad/.rvm/gems/ruby-2.3.3/gems/dm-serializer-1.2.2'

В общем везде пошаманить чтобы этот гем запускался с гемом json более новой версии, которая дружит с новыми рубями. Кстати есть тикет у гема по этому поводу https://github.com/datamapper/dm-serializer/issues/48

Rolling
19.08.2017
15:21:21
Ахахахаха

Я так ящик пива выиграл пару лет назад

Короче акция была у пива Kozel, надо было в 00:00 зайти на сайт, там открывалась форма, которую если заполняешь и успеваешь в числе первых 10 отправить, то получаешь ящик пива.

Vlad
19.08.2017
15:22:40
:)

Ro
19.08.2017
16:36:34
Ну да. Если я праивльно понял. То надо просто проверять создать в модели кастомную валидацию (хотя может как-то и по другому), которая будет проверять blog_id параметр. Ну типа def blog_validation if Blog.find_by_id(blog_id).user_id != current_user errors.add(:blog_id, "Shit happens, cheater!") end end
Этот способ верный. Еще один способ (как я бы сделал) - заюзать load_and_authorize_resource. Это из cancan gem'а. В общем, когда ты добавляешь эту штуку в свой REST контроллер, у тебя автоматически во всех методах грузится инстанс того, что тебе надо. Например: def show(blog_id) # тут уже можно обращаться к переменной @blog end Т.е. не надо Blog.find и т.д. делать. Чтобы авторизовать ресурс, надо добавить (можно в базовом контроллере, например) метод current_ability, которой будет возвращать инстанс класса Ability - ну это уже самому надо глянуть как на примерах это работает. У этого класса должен быть метод authorize!, который и вызывается из cancan. Также в этот метод передается экземпляр загруженной модели (`@blog`) в нашем случае. Так вот, в этом своем собственном Ability я бы сделал проверку - отвечает ли модель на policy, например так: @resource.respond_to?(:policy). Если да - то просто вызвать этот метод, а этот метод должен возвращать уже свою Policy - просто экземпляр класса, который решает кому давать доступ, а кому нет. Для blog'а это будет BlogPolicy, для коммента CommentPolicy и т.д. - эти policy будут просто делать head 403 если что-то не авторизовано. Что это дает? 1. никаких загрузок (`Blog.find...`) в контроллере, в наших action'ах уже доступна переменная @blog, @comment и т.д. 2. никаких проверок в контроллере, action'ы будут вызываться ТОЛЬКО в том случае, если BlogPolicy сработал и не вернул head 403. 3. никакой нагрузки на модель (стандартная проблема в рельсах - разрастание модели). Только один метод, который создает экземпляр BlogPolicy, и вся логика содержится там 4. Вся логика по проверке сидит в одном понятном месте. Для блога это BlogPolicy, для коммента CommentPolicy и т.д. 5. В будущих контроллерах не надо париться с проверками и загрузками. Когда current_policy определена в ApplicationController, все контролеры автоматически получают эту функциональность - уменьшается количество ненужного кода. В общем я этот подход попробовал - довольно удобно.

#ресурс #resource #policy #cancan #cancancan #load_and_authorize_resource

если кто сделает демо-репо по этой схеме - скиньте ссыль в чат

spartakusQ
19.08.2017
18:35:53
Немного странных картинок.





Konstantin
19.08.2017
18:50:28
Линуксы, чому у меня джемы в рбенв не из под рута не ставятся?

Говорят, прав нет, а я первый день в убунте

Ivan
19.08.2017
18:56:32
Так а что именно пишет то?

Konstantin
19.08.2017
19:01:32
Sudo gem install - команда не существует.

На попытку без судо - у вас нет права записи в папку

/home/username/.rbenv/...

Если выполнить sudo su

Google
Konstantin
19.08.2017
19:02:36
И попробовать из под рута - всё ок

spartakusQ
19.08.2017
19:02:48
так сделай права на папку

чего как маленький

Konstantin
19.08.2017
19:03:14
Надо посмотреть, спасибо

Права наследуются по вложенности?

Admin
ERROR: S client not available

spartakusQ
19.08.2017
19:03:52
да

Konstantin
19.08.2017
19:04:06
Ок, попробую

Из дома

spartakusQ
19.08.2017
19:04:22
sudo chown -R username /home/username/.rbenv/

username -твой пользователь под которым логинишься

Konstantin
19.08.2017
19:05:29
Спасибо!

Vladimir
19.08.2017
21:51:33
@vlad_laptev , да, можно и удалить

spartakusQ
19.08.2017
22:36:34
народ а как вы думаете, кто самый крутой рэп исполнитель?

Vlad
19.08.2017
22:39:20
я хоть и меломан, но такое слушал по дурости в эпоху диалапа)

Andrey
19.08.2017
22:39:35
Жорик конечно

Ro
19.08.2017
23:56:16
Sudo gem install - команда не существует.
обычно не надо делать sudo для gem install, если ты делаешь - значит что-то не так

Dmitry
19.08.2017
23:58:55
rbenv через root(sudo) установлен, на девелоперской системе, не надо так.

Konstantin
20.08.2017
00:28:17
:/

Ro
20.08.2017
00:28:55
sudo тока для apt-get я юзаю, если так вспомнить

Google
Ro
20.08.2017
00:29:04
больше вроде ничо не надо, ну может сервис включить-выключить

ща постримим - 1 раз нах, если получится: https://www.twitch.tv/ro31337 - если чо - чирканите мне там в чате. Будем делать фичу для либретакси делать

Aura
20.08.2017
04:33:04
Ром я один там)

Vitaly
20.08.2017
04:33:14
Я вижу.)

Aura
20.08.2017
04:33:15
2 )

Vitaly
20.08.2017
04:33:16
И слышу

evgeny
20.08.2017
05:14:08
я был 3-м)

Ro
20.08.2017
05:14:29
ок)

закоммитили ~100 строк кода

закрыли issue

тоже застримьте чонить

Vitaly
20.08.2017
05:26:07
Да, тоже думаю, может стрим устроить как-нибудь.)

Он сохранился?

Ro
20.08.2017
05:30:50
а хз

MR
20.08.2017
05:34:22
не сохранился

Страница 308 из 921