2017-01-31 3 views
0

Это надуманный пример, но я надеюсь, что он продемонстрирует мой вопрос. Нет, я не храню пароли в открытом тексте и т. Д .; это просто пример.Rails 4+: не извлекать чувствительные атрибуты из БД по умолчанию

User.create(name: "John", password: "sensitive") 
User.all => [{User: name: "John", password: "sensitive"}] 

Когда я извлечения данных из БД, я не хочу, атрибут password возвращаемый по умолчанию, например, что:

User.all => [{User: name: "John"}] 

Я предположил, ActiveRecord будет иметь метод в модели, которую я мог бы переопределение установите атрибуты по умолчанию для выбора, но я не могу найти такой метод.

ответ

1

По умолчанию активная запись загружает все атрибуты. Существует понятие «чувствительный» атрибут. Фактически, до тех пор, пока вы не выгружаете экземпляр где-либо (например, с помощью проверки), или вы не распечатываете этот атрибут, на самом деле не так много проблем с безопасностью, связанных с извлечением этих данных (конечно, если вы безопасное соединение).

Возможно, вам стоит объяснить, в чем проблема, побуждающая вас поверить, что не погрузка этого атрибута будет лучшим решением проблемы.

Также важно помнить, что несколько значений по умолчанию Rails будут перекрывать все атрибуты, когда вы пытаетесь использовать такие функции, как to_json. Мое предложение состоит в том, чтобы не полагаться на эти функции, но всегда явно переименовывать атрибуты, которые вы хотите использовать или экспортировать. Это предотвратит утечку разумных деталей.

Последнее, но не менее, вы можете попытаться обойти по умолчанию Rails, используя метод, который перечисляет все атрибуты, без них вы считаете «разумными»

Model.select(Model.column_names - %w(password other)).all 

select относится к любому методу запроса:

Model.select(Model.column_names - %w(password other)).find(54) 
Model.select(Model.column_names - %w(password other)).first 
+0

Если вы _really_ хотели, вы могли бы реализовать решение Simone с default_scope. Но имейте в виду, что [default_scope is evil] (http://www.ombulabs.com/blog/ruby/rails/best-practices/why-using-default-scope-is-a-bad-idea.html). – Glyoko

Смежные вопросы