Интересная идея .... Думаю, первое, что приходит на ум, - нет. Не потому что это было сделано, а потому что это была плохая идея с самого начала. Но я не буду обсуждать плюсы и минусы сессий с вами, поэтому вот мой ответ ...
Давайте разберем это по типу токена:
- Случайный идентификатор токена
Любой может просто «угадать» один из них, но он быстр и прост в использовании. Поскольку сеанс обычно недолговечный, это, как правило, не является серьезной проблемой. Также отличное решение, потому что они имеют небольшой размер (22 байта в кодировке base64 или 32 байта в шестнадцатеричном формате)
Вы писали: «Я хотел бы рассмотреть возможность использования чего-либо в соответствии со значением 512 байт, генерируемым RNGCryptoServiceProvider.»
Да, хорошо, похоже, что 512-байтовый идентификатор был бы крутым; однако даже 128-битные значения (16 байт) имеют абсурдное количество возможностей (больше запросов, чем ваш сервер может обработать за год). Не делайте это своей основной защитой, вместо этого предполагайте, что идентификатор не является секретом.
- PKI Зашифрованные и подписанные данные
Это хорошо работает, чтобы «скрыть» информацию, текущую через транспорт. Тебе нужно? Это стоит значительных накладных расходов? Кроме того, в дополнение к накладным расходам на вычисления / верификацию приходится платить за объем передаваемых данных. Это более безопасно? возможно, но в конце концов украсть так же легко, как и случайный идентификатор.
Всегда предполагайте, что кто-то другой может получить идентификатор сеанса / токен
Это то место, где вы должны сконцентрировать свою энергию, потому что если я могу дать кому-то еще мой cookie и мой аккаунт все еще в безопасности, тогда и только тогда будет защищен сеанс. При этом я не знаю 100% -ного способа сделать это без клиентских сертификатов, и даже у этого есть проблемы.
В мире веб-запросов есть две части идентифицирующей клиента информации, включенной в запрос. IP-адрес клиента и User-Agent. Проблема в том, что эти значения могут измениться за сеанс. Таким образом, подход заключается в том, чтобы либо повторно запрашивать подтверждение каждый раз, когда они изменяются, либо для каждого отдельного значения.
Да, я знаю, что User-Agent очень легко подделать, и IP-адрес клиента также может быть подделан; однако в конце дня вам стало сложнее атаковать. Это точка безопасности, потому что ничто не является абсолютно безопасным.
Дополнительные советы
Для высокочувствительных данных вы должны быстро прекратить сеансы (<5 минут). </p>
Очевидно, что SSL необходим по многим причинам
SSL поддерживает «безопасные куки», которые никогда не записываются на диск и не сохраняются. Это может затруднить получение идентификатора сеанса.
Циклическое переключение ключей может использоваться достаточно эффективно. Если вы генерируете новый сеансовый ключ при каждом посещении, как рекомендует Cris Lively, вам нужно сохранить N последних номеров идентификаторов сеансов. Поэтому, если N = 5, после 5 запросов мой исходный идентификатор сеанса больше не действителен.
Учитесь у других, читайте и пользуйтесь своими существующими учетными записями на других крупных сайтах.
наконец-то ...
Я снова скажу, что сессии не очень хорошо масштабируются и их следует избегать во всех, кроме очень немногих местах.
ОБНОВЛЕНИЕ:
Так что я думал об этом со времени моего последнего поста, думал, что я обновлю свои мысли другим ответом ...
Генерация идентификатора из 16 байтов или более должна быть достаточной для эффективного устранения угадывающих идентификаторов сеанса атакующего. Предполагая, что это и использование безопасных файлов cookie SSL +, вы должны быть максимально безопасны. Почему?
SSL будет эффективно препятствовать получению ключа сеанса во время транзита. Таким образом, если у кого-то есть сеансовый ключ, который ему не принадлежит, то это потому, что он выполняет одну из двух вещей: A) он выполняет код на клиенте (может быть, в браузере) или B) он выполняет код на ваш сервер. Так что, в принципе, если они могут поставить под угрозу конечную точку, вы уже проиграли игру в области безопасности, и они вряд ли получат какую-либо дополнительную работу.
Если вы не используете SSL, у вас все равно нет безопасности. Простая атака «человек посередине» позволит злоумышленнику делать все, что я хочу, от имени клиента. Любая работа по обеспечению безопасности использования HTTP без SSL (или какой-либо другой формы безопасного согласованного ключа сеанса) - это просто притворство безопасности. Да, вы можете сделать это более трудным, но вы не можете сделать это безопасным.
Итак, в конце концов, просто доверьтесь SSL, чтобы защитить работу транспорта, и приступайте к жизни:)