Asp.net MVC 3 Шифровать скрытые значения - PullRequest
1 голос
/ 23 января 2012

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

edit : Я планирую проверить, есть ли у пользователя разрешение на такие действия, но я все равно хотел бы скрыть данные.

Ответы [ 4 ]

6 голосов
/ 23 января 2012

Простое предложение:

1) Добавьте столбец guid в создаваемые таблицы (значение по умолчанию: новый идентификатор ()).Создайте индекс для столбца guid.Передайте гид туда и обратно, а не ваш ПК.

2) Это полностью защищает ваши идентификаторы?Нет. Но это не позволяет пользователям угадывать числовые PK.

3) Всегда проверяйте, что аутентифицированный пользователь имеет доступ к записи.

3 голосов
/ 23 января 2012

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

Таким образом, просто не имеет смысла пытаться их скрыть.

2 голосов
/ 05 декабря 2013

Вы можете использовать проект MVC Security Extensions https://mvcsecurity.codeplex.com.

Скажите, что поле, которое вы хотите защитить, это Id ...

На вашем контроллере добавьте метод:

[ValidateAntiModelInjection("Id")]

В вашем представлении добавьте:

@Html.AntiModelInjectionFor(m => m.Id)
@Html.HiddenFor(m => m.Id)

При публикации ваше поле идентификатора будет проверено.

2 голосов
/ 23 января 2012

Как вы уже упоминали, не рекомендуется выводить PK строк таблицы элементов в View, как будто они находятся в HTML страницы, они доступны для просмотра.

Если я правильно понимаю, под «[скрытием] этих идентификаторов от пользователей» я предполагаю, что вы имеете в виду запутывание идентификаторов каким-либо образом, поэтому даже если они взяты из HTML представления, они мало что значат в их индивидуальном контексте.

Одним из способов достижения вышеуказанного является использование ViewModel для вывода ваших связанных данных в представление, но в вашем конкретном классе ViewModel вы можете иметь некоторую пользовательскую логику свойств для кодирования PK с помощью AES (два-путь) алгоритм шифрования, с солью для шифрования является то, что известно только вам (и вашему серверу).

Это был бы один из способов «защиты» PK в представлении.

При таком подходе вам, возможно, придется учитывать издержки производительности при шифровании / дешифровании PK, когда эти данные пересылаются в обратном направлении!

Это может быть интересно, если вы перейдете внизмаршрут шифрования:

Простая небезопасная двусторонняя «обфускация» для C #

Вы также можете добиться большей прозрачности с помощьюбез шифрования с помощью поиска значения ключа в памяти (данные кэша или сеанса), который выводит произвольные числа в качестве идентификаторов для представления для каждого из ваших элементов таблицы, и, когда извлекается из представления, PK обращается вверх отколлекция воспоминаний.

...