de seguridad de disco
Puede dejar toallita utilidad de hacer el trabajo para usted.
Si está ejecutando ASP.NET en Mono/Linux, puede usar el comando wipe
a través de la clase Process
(asegúrese de que el paquete de limpieza esté instalado).
Si ejecuta Windows, el enfoque es el mismo. Use una utilidad wipe.exe
que realiza una limpieza exhaustiva cuando necesita deshacerse del archivo de manera segura.
I fond this sitio web que distribuye un wipe.exe gratuito, que no está incluido en la instalación estándar de Windows (muy mal).
La segunda forma es implementar el Guttman algorithm, pero creo que es más barato usar el código de otra persona.
Tenga en cuenta que la limpieza es muy intensiva en E/S, no espere a que se complete o puede ralentizar su aplicación drásticamente. Además, en sitios web muy cargados, es posible que experimente una ralentización significativa.
Seguridad de la memoria
La clase SecureString
le ayuda a dejar ningún rastro de una cadena en la memoria. Pero cuando trabajas con archivos, realmente trabajas con transmisiones. No estoy seguro de preocuparme por el contenido de la memoria volátil (incluso si maneja documentos de Wikileaks).
Primero debe realizar un análisis de amenazas indicándole cuáles son las principales amenazas para la memoria. Aquí hay algunas preguntas:
- ¿Alguien puede acceder al servidor con una cuenta de administrador/raíz con la capacidad de realizar un volcado de memoria? (Los usuarios normales no pueden leer su memoria y .NET evita el desbordamiento del búfer debido a que los punteros no se utilizan)
- ¿Alguien puede acceder físicamente al servidor? ¿No confías lo suficiente en tu proveedor de hosting? ¿Ejecutas un servidor virtual en su lugar?
Si la respuesta no es sí usted no debe preocuparse por la seguridad de la memoria
seguridad El espacio de intercambio
Incluso si se ejecuta en Windows, déjame llamar "intercambio" el archivo de paginación, o archivo de memoria virtual, o lo que sea. Puede pensar en deshabilitarlo (asegúrese de tener abundantes RAM) o, de lo contrario, podría pensar en encriptarlo (pero obtendrá una disminución del rendimiento).
Pero, una vez más, para que alguien pueda escanear su archivo de intercambio en tiempo de ejecución, debe ser root o tener acceso físico al servidor apagado.
Si los datos son demasiado sensibles, me gustaría deshabilitar el intercambio.
[Añadir] Estoy seguro de que usted ya uso de SSL para cargar el archivo, en caso de haber perdido algunos principios ...
+1 para una pregunta bien definida. djechelon answer hit on a aspect Deberías echar un vistazo más de cerca a "trust". Debes recordar que siempre habrá una superficie expuesta y debes confiar en alguien. Si te preocupa que necesites un servidor dedicado físicamente seguro y un interruptor de muerte (una forma de destruir físicamente los datos), entonces no tendrás que preocuparte demasiado por la mecánica interna. – Robert
Nota: .Net es un tiempo de ejecución administrado y el almacenamiento temporal de datos es específico de la implementación y, como tal, cualquier intento de borrar datos de un sistema en ejecución será un desafío interminable ya que cualquier actualización podría cambiar la implementación real. – Robert