2010-10-26 2 views
2

Необходимо ли шифровать данные ASP.NET Session [string key] для обеспечения безопасности?Необходимо ли шифровать конфиденциальные данные сеанса ASP.NET?

Если такие данные всегда остаются на сервере, разве это не безопасно хранить информацию о кредитной карте, пароли и т. Д., Если данные были отправлены через SSL от клиента?

+0

@ChessWhiz Используйте идентификатор sessoin для доступа к хранилищу данных для передачи данных между страницами. Хранилище данных может быть базой данных или может быть файлом или может быть памятью. До тех пор, как он является постоянным, хотя в жизни сессии. Шифрование файла cookie - это общая ошибка криптографии. – rook

+1

Риск кажется довольно низким, но почему вам нужно перенести эту информацию между двумя страницами в первую очередь? Пароли, правда? Если вы все равно не планируете хранить номера своих кредитных карт в базе данных, и я надеюсь, что вы этого не сделали, просто обработайте его и забудьте об этом после того, как они нажмут «заплатить». –

+0

Я полностью согласен с jamietre, что вы можете проходить между страницами, которые должны быть безопасными? –

ответ

1

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

+0

@Rook - я не дал вам минус 1. –

+0

Я передаю данные между страницами. Вы не совсем отвечаете на вопрос - нужно ли шифрование или нет? – ChessWhiz

+2

@ChessWhiz - Шифрование не требуется, пока оно находится на сервере. Любой, где во время транзита (вы обрабатывали это с помощью HTTPS) или в любом месте (база данных, файл), тогда да, он нуждается в зашифрованном виде. Я думаю, что если злоумышленнику удалось проникнуть в вашу систему, чтобы он мог читать память серверов, у вас уже были проблемы. –

0

Зависит - насколько вы доверяете любому другому приложению на своем сервере?

2

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

EDIT: Для тех, которые думают, что данные сеанса безопасно:

http://en.wikipedia.org/wiki/Session_hijacking
http://en.wikipedia.org/wiki/Session_fixation
http://en.wikipedia.org/wiki/Session_poisoning
http://www.owasp.org/index.php/2.0_Session_State_(in)security_(and_the_dangers_of_State_Server)

Есть способы защиты данных сеанса, но если вам нужно держать очень чувствительной информации таких как пароли или номера кредитных карт, сеанс не является для него местом. Попробуйте кодировать юридические требования Sarbanes Oxley для банковских и медицинских приложений, и вы обнаружите в своем первом аудите, что это одна из первых вещей, которые проверяются.

http://en.wikipedia.org/wiki/Session_management

+0

-1. Хеш нельзя использовать в качестве ссылки, поскольку исходные данные теряются. Что вы рекомендуете делать с конфиденциальными данными? Независимо от того, может ли он быть сохранен в базе данных или сеансе, с помощью захвата сеанса. –

+0

@ m.edmondson и @ Joel Etherton оба вы понятия не имеете, как нападает программное обеспечение. Я забрал свой +1, данные сеанса всегда безопасны, файлы cookie всегда опасны. – rook

+5

Не становясь слишком вовлеченным, если вы не можете доверять чему-то просто потому, что это в памяти, то как вы собираетесь делать что-либо ВСЕ? Вы должны расшифровать номер своей кредитной карты для ее обработки. Он будет где-то в памяти открытым текстом. Я не утверждаю, что сеанс теоретически не может быть скомпрометирован немного легче, потому что он, вероятно, будет длиннее, но если мы будем беспокоиться о «все в памяти», потому что сервер может быть полностью захвачен, будет сложно многое сделать. Должно быть какое-то основное предположение, что «память» в порядке. –

3

Со всеми downvotes бросают здесь, я добавлю свои два цента:

Я думаю, что все, что остается в памяти сервера, в том числе данных ASP.NET Session, безопасна в незашифрованном виде. Злоумышленник должен будет иметь возможность выполнять код на сервере, чтобы читать память.

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

1

Я разделяю идею m.edmondson в том, что конфиденциальную информацию необходимо хранить в базе данных (существует много методов для работы с sql-injection). Также для обеспечения безопасности вашего сайта вы должны использовать HTTPS. Но если вы собираетесь хранить информацию, которая не так чувствительна для прохождения между страницами, вы можете использовать переменные сеанса, не забывайте удалять такие переменные как можно скорее. Помните, что вы можете переходить в базу данных для извлечения данных, только данные с нечувствительными и трудоемкими данными должны храниться в области сеанса.

0
  1. Вопрос относится к данным, хранящимся в памяти на одном сервере, но это только конфигурация по умолчанию. Вы также можете настроить государственный сервер, записать в nosql db и т. Д. Безстоящие веб-серверы становятся все более распространенными благодаря росту облака и платформ как услуга.

  2. В зависимости от политики безопасности кредитные карты и пароли могут быть не единственной информацией, которую вы считаете конфиденциальной. Некоторые организации считают, что информация о клиенте, такая как адреса, также является конфиденциальной. Это означает, что любая многоступенчатая проверка сеанса будет содержать «конфиденциальную» информацию.

Ответ на этот конкретный вопрос может быть «нет», но будущим читателям, возможно, также потребуется рассмотреть эти дополнительные предметы.

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