En nuestros días se ha proliferado gran cantidad de malware (virus, spyware, adware, gusanos, troyanos, bots y otros). Estoy convencido que una de las causas de esta proliferación es la falta de seguridad en las aplicaciones que desarrollamos, prácticamente invitamos a los desarrolladores de malware a usar nuestra aplicaciones como entrada a las computadoras.
Cuando nuestra aplicación tiene que guardar archivos de configuración, preferencias o datos temporales, se nos presenta el problema de decidir donde guardarlo, ya que depende de donde lo guardemos nuestra aplicación dependerá de los privilegios del usuario que lo ejecute. Por eso creo que vale la pena escribir sobre la solución propuesta en el .Net Framework.
La Clase IsolatedStorageFile:
Esta clase nos provee de la funcionalidad necesaria para crear archivos y carpetas en las cuales nuestra aplicación pueda crear y accesar archivos en un almacenamiento seguro, aislado e independiente de los privilegios del usuario que ejecuta la aplicación. Tenemos dos tipos de almacenamiento:
Assembly/Machine: Permite crear un espacio de almacenamiento para la aplicación, independiente del usuario.
Assembly/User: Permite crear un espacio de almacenamiento independiente para el usuario.
Veamos cómo se usa:
Imports System.io Imports system.IO.IsolatedStorage Module Module1 Sub CreaArchivoenIsolated() Dim EspacioenUsuario As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly()
'Creamos un directorio llamado Usuario1 (opcional) EspacioenUsuario.CreateDirectory("Usuario1") Dim ArchivoUsuario As IsolatedStorageFileStream = New IsolatedStorageFileStream("Usuario1\user.cfg", IO.FileMode.Create, EspacioenUsuario) Dim UsuarioStream As StreamWriter = New StreamWriter(ArchivoUsuario)
'Se escribe en el archivo lo que necesitemos almacenar UsuarioStream.WriteLine("Personalización del Usuario") UsuarioStream.WriteLine("X = 10") UsuarioStream.WriteLine("Y = 50") UsuarioStream.Close() ArchivoUsuario.Close() EspacioenUsuario.Close() End Sub
Sub EjemploDirectorio() 'Podemos listar los directorios creados en el Espacio de Usuario Dim EspacioenUsuario As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly() 'Creamos otro directorio, solo para ejemplo. EspacioenUsuario.CreateDirectory("Usuario2") Dim Directorios() As String = EspacioenUsuario.GetDirectoryNames("*") For Each directorio As String In Directorios Console.WriteLine("Directorio encontrado: {0}", directorio) Next End Sub
Sub LeeArchivoenIsolated() Dim EspacioenUsuario As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly() Dim ArchivoUsuario As IsolatedStorageFileStream = New IsolatedStorageFileStream("Usuario1\user.cfg", IO.FileMode.Open, EspacioenUsuario) Dim UsuarioStream As StreamReader = New StreamReader(ArchivoUsuario) Console.WriteLine(UsuarioStream.ReadToEnd) Console.ReadKey() End Sub Sub Main() CreaArchivoenIsolated() EjemploDirectorio() LeeArchivoenIsolated() End Sub End Module |
Consideraciones importantes
- En el isolatedstorage no podemos usar File.exists, por esto es necesario usar el GetFileNames("nombre_a_buscar") esto nos retorna un arreglo de string, en este debemos consultar por el length, si este es igual a 0 significa que el archivo consultado no existe.
- Para estar seguros que una clase puede accesar el isolatedstorage es necesario demandar el permiso anteponiendo la siguiente instrucción a nuestra clase <IsolatedStorageFilePermission(SecurityAction.Demand)>
4 comentarios:
Muy bueno el tutorial, pero esta en Visual Basic :S y en realidad me hubiera gustado verlo en C#. Lo único que sé de VB es que es largo para escribir y que a pesar de que puedo entender bastante de su sintaxis, no es sufficiente para visualizarlo en C# lol
Pero estuvo bueno, voy a seguir buscando por ahi a ver si encuentro otro tuto :D
Muy bueno el tutorial.
Consulta, estoy teniendo un problema, en mi caso particular estoy usando como IsolationScope Machine o Assembly o Domain. El problema es que ante la actualizacion de una nuevo version de la aplicacion, me genero una nueva carpeta, por ende un nuevo archivo permitiendo no usar la informacion almacenada con el anterior assembly.
Como puedo solucionar esto?
Muy bueno el tutorial.
Consulta, estoy teniendo un problema, en mi caso particular estoy usando como IsolationScope Machine o Assembly o Domain. El problema es que ante la actualizacion de una nuevo version de la aplicacion, me genero una nueva carpeta, por ende un nuevo archivo permitiendo no usar la informacion almacenada con el anterior assembly.
Como puedo solucionar esto?
Muy bueno el tutorial.
Consulta, estoy teniendo un problema, en mi caso particular estoy usando como IsolationScope Machine o Assembly o Domain. El problema es que ante la actualizacion de una nuevo version de la aplicacion, me genero una nueva carpeta, por ende un nuevo archivo permitiendo no usar la informacion almacenada con el anterior assembly.
Como puedo solucionar esto?
Publicar un comentario