Deshabilitar Boton Guardar en PDF

image

 

Qué duda cabe que el formato PDF se ha popularizado tanto, que ha llegado a convertirse en un estándar en el intercambio de documentos. Hoy en día, cualquiera de las aplicaciones que manejamos permite exportar información usando este formato.

Muchas veces, nos encontramos con usuarios que manejan información confidencial, y desean que sus documentos estén de alguna manera controlados. Que a ser posible, no salgan de sus instalaciones. Que sus empleados, o las personas que tengan acceso a dicha información, sólo puedan visualizarla, pero que no tengan la posibilidad de copiarla y distribuirla.

A día de hoy, esta es una funcionalidad que es bastante complicada conseguir. Y lo es, porque en teoría, cualquier contenido al que tengamos acceso, es susceptible de ser copiado y posteriormente distribuido.

El formato PDF no es ajeno a esta característica. Una vez puestos los medios para impedir que personas no adecuadas tengan acceso al documento, (porque en impedir el acceso sí se pueden poner muchas medidas de seguridad) y el  usuario ha conseguido visualizarlo en pantalla, hay poco que podamos hacer; Si están los bits, estos se pueden copiar. Y si se pueden copiar, se pueden distribuir.

 

Se puede usar el viejo truco de imprimir la pantalla, imprimir el documento y volver a escanearlo, copiarlo con lápiz y papel, memorizarlo, hacer una foto con el móvil, y un montón de cosas que están ahí, y no son complicadas de abordar.

image

Como contramedida, lo que podemos hacer, es al menos, eliminar los medios de distribución más evidentes, como el botón guardar del Reader.

Existen parámetros que pueden pasarse al Reader para deshabilitar las barras de herramientas, el menú, la barra de estado, etc..

Se puede además indicar qué página del documento se mostrará, el nivel de zoom, incluso si queremos realizar automáticamente una búsqueda dentro del documento.

Referencia a la lista de parámetros disponibles:

http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf

 

Los parámetros pueden pasarse por API, por línea de comandos, por URL, o dentro del tag object de un documento html.

Por ejemplo:

Acrobat.exe /A “zoom=1000” “C:example.pdf”

http://example.org/doc.pdf#page=3&pagemode=thumbs

 

image

Con Toolbar.

 

image

Sin Toolbar.

Existen también otras alternativas. Como usar viewers en los que podemos controlar ciertos parámetros, como el de las toolbars, el menú contextual, etc.

Van dos ejemplos de viewers en Silverlight.

http://www.pdftron.com/silverdox/

image

PDF Tron. Silverlight. Sin Toolbar. El menú contextual no permite copiar.

 

http://firstfloorsoftware.com/documenttoolkit

image

First Floor Document Toolkit for Silverlight. Impide guardar el documento, copiarlo, pegarlo, etc.

 

http://es.wikipedia.org/wiki/PDF

 

 

En cuanto a impedir que la información llegue a manos equivocadas, tenemos a nuestra disposición, el servidor de Rights Management.

http://www.microsoft.com/windowsserver2003/technologies/rightsmgmt/default.mspx

Windows Rights Management impide que los documentos protegidos puedan ser abiertos, impresos, reenviados, etc, a personas no autorizadas.

image

image

Como conclusión, yo diría que cuando nos encontremos con un requerimiento de este tipo, lo mejor es informar al usuario de los riesgos existentes y de las alternativas viables. El riesgo de fuga de información siempre estará ahí, y en última instancia, no existe más remedio que intentar restringir al máximo la información confidencial y concienciar al usuario de los riesgos que supone no tenerla controlada. Normalmente, antes de enseñar información confidencial, se suele pedir al usuario que acepte unos términos de NDA (Non Disclosure Agreement)

StackOverflowException en ASP.net

Apunto este snippet, como recordatorio.

image

Como indica el comentario del código, me ha ocurrido que necesitaba ejecutar una función recursiva, que recorriese un árbol en busca de un nodo.

Como mi árbol había sido construido por el usuario, y no existían validaciones que lo impidiesen, estaba realizando una búsqueda recursiva, en la que uno de los nodos hijo era a su vez padre en la misma rama.

 

image

 

Y como indica la MSDN

Starting with the .NET Framework version 2.0, a StackOverflowException object cannot be caught by a try-catch block and the corresponding process is terminated by default. Consequently, users are advised to write their code to detect and prevent a stack overflow.

el el StackOverflowException no se puede capturar en un bloque try…catch, y como consecuencia, el proceso finaliza sin más, sin hacer preguntas.

Esto, en una aplicación de escritorio, aunque es problemático, no tiene mayor repercusión, y el fallo es evidente; La aplicación se cierra sin hacer preguntas. Pero en una aplicación Asp.net, el proceso del IIS se reinicia, y hasta que te das cuenta del fallo… puede pasar mucho tiempo.

 

http://msdn.microsoft.com/en-us/library/system.stackoverflowexception.aspx