Шифрование значения зарплаты в ASP .NET 2.0 и SQL Server 2005 - PullRequest
7 голосов
/ 29 сентября 2008

У меня есть веб-сайт ASP .NET 2.0, подключенный к базе данных SQL Server 2005. Сайт довольно прост и хранит информацию о персонале, включая зарплату.

Каков наилучший способ зашифровать значение заработной платы, чтобы никто (включая меня) никогда не мог видеть, что это такое, кроме уполномоченного персонала, использующего веб-приложение?

Я не хочу шифровать / дешифровать на SQL Server, потому что я могу просто запустить SQL Profiler для просмотра информации, поэтому я предполагаю, что шифрование / дешифрование происходит в BLL на веб-сервере?

Кроме того, нужен ли мне протокол SSL, чтобы не дать кому-то перехватить HTTP-ответы между браузером и веб-сервером?

Большое спасибо!

Anthony

Ответы [ 5 ]

4 голосов
/ 29 сентября 2008

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

Что касается другого бита, SQL Server 2005 поддерживает шифрование на уровне таблицы «из коробки». Вот статья об этом . Вы можете создать таблицу SALARY, связанную с сотрудником, и сохранить ее в зашифрованном виде.

3 голосов
/ 29 сентября 2008

Разработчики веб-приложения все еще могут получить доступ к показателям заработной платы - все это вопрос доверия. Чтобы противостоять этому, вы можете переключиться на модель, где шифрование / дешифрование происходит на стороне клиента, но это более громоздко и все же не на 100% безопасно. Безопасность - это всегда компромисс с удобством.

Вам следует использовать TLS / SSL (т. Е. HTTPS), чтобы подслушивать трафик HTTP было сложнее.

Атака, которую вы можете рассмотреть, заменяет вашу зашифрованную цифру зарплаты на интересующую вас персону, затем вызывает бухгалтерию и спрашивает, какая у вас текущая зарплата. Один из способов отменить атаку состоит в том, чтобы содержимое зашифрованного поля зарплаты ссылалось на человека, которому оно принадлежит.

2 голосов
/ 29 сентября 2008

Вы определенно хотите использовать SSL для безопасности транспортировки. Вы также можете настроить IPSec для транспортировки между веб-сервером и сервером базы данных.

Что касается защиты в базе данных, SQL Server 2005 имеет несколько функций шифрования:

1) EncryptByAsymKey - http://msdn.microsoft.com/en-us/library/ms186950.aspx
2) EncryptByKey - http://msdn.microsoft.com/en-us/library/ms174361.aspx
3) EncryptByPassPhrase - http://msdn.microsoft.com/en-us/library/ms190357.aspx
4) EncryptByCert - http://msdn.microsoft.com/en-us/library/ms188061.aspx

Очевидно, что все они имеют связанную функцию дешифрования.

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

2 голосов
/ 29 сентября 2008

Вам определенно необходим SSL для предотвращения перехвата конфиденциального веб-трафика (не говоря уже о входах в систему), но это не решает проблему шифрования на стороне сервера.

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

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

2 голосов
/ 29 сентября 2008

Есть много методов шифрования, которые вы можете использовать здесь в своем коде. Убедитесь, что вы выбрали тот, который берет ключ и «соль» (вместо того, чтобы просто использовать один и тот же ключ каждый раз). Если вы используете один и тот же ключ (без соли) каждый раз, когда шифруете зарплату, то два сотрудника с одинаковой зарплатой будут отображать одинаковое зашифрованное значение в базе данных, что ставит под угрозу безопасность информации о зарплате.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...