Безопасность кэшированных данных в .NET - PullRequest
2 голосов
/ 21 ноября 2011

Я кэшировал одну DataTable, извлеченную из SQL Server 2005 через C # ASP .NET 4.0 Web App [около 50000 строк, 32 столбца] ..

Кэш по значению включен На стороне клиента .

Я хочу знать, является ли DataTable безопасным или небезопасным в кэше ?

Если небезопасно, чем

  1. как получить эти данные непосредственно из кэша и просмотреть [не мое веб-приложение как не разработчик]
  2. как обезопасить данные.

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

Если вы имеете в виду HttpContext.Cache, то эти данные находятся в памяти и локально для вашего приложения. Он не может быть произвольно запрошен извне вашего приложения, если вы намеренно не предоставите API для этого, или ваш веб-сервер будет взломан.

Если ваш веб-сервер скомпрометирован таким образом, что хакер имеет доступ администратора, он может получить доступ к памяти процесса, поэтому ваши данные будут доступны. Однако в этот момент хакер, вероятно, имеет доступ к вашей строке соединения и т. Д. И может вместо этого еще веселее атаковать вашу БД (более мягкая цель, чем просмотр памяти процесса).

3 голосов
/ 21 ноября 2011

Данные так же безопасны, как сервер и веб-приложение.

Если кто-то имеет физический доступ к ящику (или через RDP), он всегда может вызвать дамп памяти и прочитать значения непосредственно изпамять.

В зависимости от того, как оно было написано, приложение может предоставлять полный кэш.

Если что-то из этого не касается, вы можете считать кэш безопасным.


Обновление:

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

Если клиенту не нужны все данных, поделитесь только минимально необходимым.Не упорствуй.

0 голосов
/ 21 ноября 2011

Вы можете использовать DPAPI (API защиты данных), например, используя класс ProtectedMemory

.

using System;
using System.Security.Cryptography;

public class MemoryProtectionSample
{

    public static void Main()
    {
// Create the original data to be encrypted (The data length should be a multiple of 16).

        byte [] secret = { 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 };

// Encrypt the data in memory. The result is stored in the same same array as the original data.
        ProtectedMemory.Protect( secret, MemoryProtectionScope.SameLogon );

// Decrypt the data in memory and store in the original array.
        ProtectedMemory.Unprotect( secret, MemoryProtectionScope.SameLogon );
    }

}
...