Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Клиент постит форму. Примитивная валидация (клиентская, затем серверная), то есть проверка диапазонов чисел, длин строк и т.п. - прошла. Далее надо проверить Id объектов. К примеру, юзер выбирает что-то из списка, причем этот список для него выводится не весь (ограничен его правами или текущим контекстом). Но надо проверить, не подменил ли злоумышленник Id объекта в POST-запросе, чтобы получить недоступный ему элемент. То есть это уровень проверки, затрагивающий DAL в большинстве случаев. Как вы поступаете в таких случаях? Просто персонально фигачите валидацию для каждой формы? Или есть какие-нибудь типовые приёмы, шаблоны? ЗЫ: использую EF для доступа к данным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2015, 23:31 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, ну вы когда формируете для показа список Вы же руководствуетесь чем то?, вот на примере этого руководства и проверяйте, разрешено ли ему получать или нет. может и не слой, можно поставщика сделать поверх Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 00:01 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.ProКлиент постит форму. Примитивная валидация (клиентская, затем серверная), то есть проверка диапазонов чисел, длин строк и т.п. - прошла. Далее надо проверить Id объектов. К примеру, юзер выбирает что-то из списка, причем этот список для него выводится не весь (ограничен его правами или текущим контекстом). Но надо проверить, не подменил ли злоумышленник Id объекта в POST-запросе, чтобы получить недоступный ему элемент. То есть это уровень проверки, затрагивающий DAL в большинстве случаев. Как вы поступаете в таких случаях? Просто персонально фигачите валидацию для каждой формы? Или есть какие-нибудь типовые приёмы, шаблоны? ЗЫ: использую EF для доступа к данным Двойная валидация — всегда. Валидация на уровне контроллер-вью, затем валидация при изменении данных уже в слое бизнес-логики, при чём полная, без всяких допущений. В штатной ситуации в бизнес-логику попадают всегда валидные данные, так как входные данные проверяются на уровне вью и контроллера. Но никогда нельзя полагаться на это, ситуаций может быть масса, включая как злой умысел, так и недостатки, кривость и недоработка валидации клиента. Другое дело, когда всю валидацию отдают на откуп бизнес-логике, она плюётся исключениями, в контроллере эти исключения отлавливаются, расшифровываются и отправляются клиенту. Это очень плохой, отвратительный сценарий, недопустимый в адекватном проекте. Это наивная и дешёвая попытка сэкономить на кодинге, поэтому сразу советую исключить из рассмотрения подобные подходы с «централизованной валидации». ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 13:11 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
hVosttДругое дело, когда всю валидацию отдают на откуп бизнес-логике, она плюётся исключениями, в контроллере эти исключения отлавливаются, расшифровываются и отправляются клиенту. Это очень плохой, отвратительный сценарий, недопустимый в адекватном проекте. Это наивная и дешёвая попытка сэкономить на кодинге, поэтому сразу советую исключить из рассмотрения подобные подходы с «централизованной валидации».Но уровень контроллер/вью ничего не знает о DAL-е, он делает валидацию только того, что он может сделать без DAL-а, то есть полноценной проверки там нет. Бизнес-логика делает серьезную проверку с привлечением DAL-а. При этом, ты говоришь о том, что бизнес-логика должна валидировать повторно такие вещи, как, например, допустимая длина строкового поля. Думаю, тут все-таки есть место для спора о том, зачем тогда валидировать на уровне контроллера/вью? Ок, механизм выплевывания исключений при ошибках валидации я тоже не поддерживаю, но бизнес-модель так или иначе возвращает стандартные ошибки валидации типа "такое название папки уже существует, выберите другое название". Она также может вернуть и ошибку длины строки. ============================================================ Впрочем, мой вопрос был не об этом. Вот пришли данные в бизнес-слой. Прежде, чем я отдам в DAL набор данных для записи в базу, надо проверить валидность некоторых Id (тех, которые DAL сочтет допустимыми, так как они не нарушат ссылочную целостность, но неприемлемы по бизнес-соображениям и это уровень компетенции бизнес-модели, а не DAL). Так вот, собственно, может есть какие-то приемы унификации таких проверок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 13:33 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Мы в слое бизнес-логики проверяем права пользователя на тот, или иной функционал. Данные могут быть и не подхачены, а тупо уже не актуальны, или админ изменил права пользователя. Также есть защита от умышленного хака данных. Перд отправкой на клиента дополнительно шифруем чать того, что отправляем, а при получении ответа от клиента сверяем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 13:36 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.ProВпрочем, мой вопрос был не об этом. Вот пришли данные в бизнес-слой. Прежде, чем я отдам в DAL набор данных для записи в базу, надо проверить валидность некоторых Id (тех, которые DAL сочтет допустимыми, так как они не нарушат ссылочную целостность, но неприемлемы по бизнес-соображениям и это уровень компетенции бизнес-модели, а не DAL). Так вот, собственно, может есть какие-то приемы унификации таких проверок.О какой валидности речь? :) Права, или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 13:38 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, "бизнес-соображения" обычно можно простым человеческим языком описать. Так опишите, не ходите вокруг да около. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 13:40 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
skyANAО какой валидности речь? :) Права, или что? .... "бизнес-соображения" обычно можно простым человеческим языком описать. Так опишите, не ходите вокруг да около.Права в частности. Допустим пользователь меняет статус документа. Он может иметь права установить тот или иной статус. Также некоторые статусы не могут устанавливаться для документа, находящегося в определенном состоянии (к примеру, статус "к оплате", если документ имеет признак "удален", или владелец документа не совпадает с текущим пользователем). Другой пример - рядовой сотрудник не может отправить сообщению директору, но может коллеге или непосредственному начальнику. Хочется уменьшить количество рутинных операций. Например, использовать процедуру выдачи списка для клиента (в момент создания формы) повторно при валидации данных пришедших с этой же формы. Я не пытаюсь получить какой-то конкретный ответ на какой-то конкретный вопрос. Скорее, расспрашиваю о приемах, которыми вы пользуетесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 14:05 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Всё зависит от объектной модели. Если уборщица отправляет пронзительный мессадж директору, то на первый взгляд объекты таковы: 1. Отправитель. 2. Сообщение. 3. Адресат. Воооот, а на самом деле - стоит ввести еще один слой и тогда объекты будут выглядет так: 1. Автор операции. 2. Операция отправки сообщения. 3. Цели операции. И вот сама-то операция не является собственно сообщением. Сообщение создаться на её основании уже на сервере, и после того, как: 1. Пройдет проверки. 2. Сервер посчитает - когда ЛУЧШЕ отправить сообщение. 3. Поставит сообщение в очередь, чтобы не досаждать директору и т.п. Рутинные операции - вовсе не рутинные, если не принимать клиенсткий ввод инфы как основную доменную модель. Это просто ввод клиента, и ситуация такова, что он может ввести всё что хочет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 14:21 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Другой вариант - попроще. Любой возможный клиенсткий ввод - хешировать. На сервере. С солью. Таким образом, попытка подменить параметры запроса на клиенте - результата не даст, так как хеш запроса не совпадет с предварительно рассчитанным. А как хеш рассчитывается - клиент не знает. Это даже проще. Наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 14:24 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
MonochromatiqueДругой вариант - попроще. Любой возможный клиенсткий ввод - хешировать. На сервере. С солью.Нет, плохая идея. Как минимум потому, что состояние может устаревать (пока юзер думал надо сменой статуса, кто-то уже удалил документ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 14:32 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.ProskyANAО какой валидности речь? :) Права, или что? .... "бизнес-соображения" обычно можно простым человеческим языком описать. Так опишите, не ходите вокруг да около.Права в частности. Допустим пользователь меняет статус документа. Он может иметь права установить тот или иной статус. Также некоторые статусы не могут устанавливаться для документа, находящегося в определенном состоянии (к примеру, статус "к оплате", если документ имеет признак "удален", или владелец документа не совпадает с текущим пользователем). Другой пример - рядовой сотрудник не может отправить сообщению директору, но может коллеге или непосредственному начальнику. Хочется уменьшить количество рутинных операций. Например, использовать процедуру выдачи списка для клиента (в момент создания формы) повторно при валидации данных пришедших с этой же формы. Я не пытаюсь получить какой-то конкретный ответ на какой-то конкретный вопрос. Скорее, расспрашиваю о приемах, которыми вы пользуетесь.О приёмах. Ну приём следующий: - есть набор различных фукнциональностей (features), доступ к которым надо проверять; - соотвественно у каждой функциональности есть политика доступа (access policy); - она представляет собой набор правил (access rules) и тип проверки этих правил: allowIfAny, или denyIfAny; - правило состоит из аспектов (security aspects), и если все аспекты выполняются, то и само правило выполняется, иначе правило нарушено. И есть SecurityService, что знает обо всём наборе функциональностей и политик доступа к ним, и может тупо ответить на вопрос: "А доступен ли данный функционал в текущем контексте?". Код: c# 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 14:44 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Но переходы статусов ИМХО не к безопасности (security) относятся, а к validation, или к workflow. К безопасности относится то, может-ли пользователь в принципе изменить статус документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 14:53 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Пример в виде XML: Код: xml 1. 2. 3. 4. 5. 6. То есть админ может сменить статус, а менеджер только в том случае, если он владелец документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 14:58 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
skyANAИ есть SecurityServiceskyANAНо переходы статусов ИМХО не к безопасности (security) относятся, а к validation, или к workflow. К безопасности относится то, может-ли пользователь в принципе изменить статус документа.Ага. Вот и хочется похоже, в каком-то обобщенном виде организовать такие проверки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 15:00 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, если кто то может менять ИД чего то, то он может и ИД клиента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 15:03 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.ProskyANAИ есть SecurityServiceskyANAНо переходы статусов ИМХО не к безопасности (security) относятся, а к validation, или к workflow. К безопасности относится то, может-ли пользователь в принципе изменить статус документа.Ага. Вот и хочется похоже, в каком-то обобщенном виде организовать такие проверки...Гы. Ну обобщите security, validation и workflow в functionality :) Только в чём смысл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 15:18 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
ViPRosесли кто то может менять ИД чего то, то он может и ИД клиентас чего вдруг? Пользователь-то авторизован, это проверяется в первую очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 15:18 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, если авторизован то нечего и проверять авторизация и подразумевает валидность дальнейших действий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 15:22 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
опять перепутали авторизацию с аутентификацией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 15:39 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Изопропилопять перепутали авторизацию с аутентификацией?виноват, но почему опять? ) тем не менее, авторизация пользователя может быть также выполнена, но недопустимые операции - это все-таки не совсем авторизация ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 15:51 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.Proно почему опять? ) это регулярное явление на форумах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 15:56 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
Shocker.ProИзопропилопять перепутали авторизацию с аутентификацией?виноват, но почему опять? ) тем не менее, авторизация пользователя может быть также выполнена, но недопустимые операции - это все-таки не совсем авторизация )Хм. А что же это такое? Авторизация (от англ. authorization — разрешение, уполномочивание) — предоставление определённому лицу или группе лиц прав на выполнение определённых действий; а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий. Часто можно услышать выражение, что какой-то человек «авторизован» для выполнения данной операции — это значит, что он имеет на неё право. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 16:00 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
skyANA, коллега, похоже, имеет ввиду ситуацию, когда лицо разрешение на операцию имеет, но выполнению операции препятствуют несвязанные с полномочиями ограничения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 16:11 |
|
||
|
Приёмы проверки идентификаторов, пришедших от клиента
|
|||
|---|---|---|---|
|
#18+
ИзопропилskyANA, коллега, похоже, имеет ввиду ситуацию, когда лицо разрешение на операцию имеет, но выполнению операции препятствуют несвязанные с полномочиями ограниченияи при этом он хочет "несвязанные с полномочиями ограничения" обощить и тем самым получить "не совсем авторизацию" :) ИМХО не надо к этому стремиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 16:29 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38868747&tid=1356727]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 365ms |

| 0 / 0 |
