Menú
Está libre
registro
hogar  /  Problemas/ Modo seguro 1s. Pavel chistov

Modo seguro 1 s. Pavel chistov

Imprimir (Ctrl + P)

Objetos de configuración

Si es necesario utilizar un código de programa "no confiable" en el servidor: procesamiento externo o código de programa ingresado por el usuario para su uso en los métodos Run () y Evaluate (), puede usar el modo seguro de operación.

En modo seguro:

  • Modo privilegiado cancelado.
  • Entrar en modo privilegiado ignorado.
  • Prohibido operaciones que conducen al uso de fondos externos en relación con la plataforma 1C: Enterprise (incluidos los análogos sin bloqueo de los métodos anteriores):
  • Mecanismos COM:
    • Objeto COM ();
    • GetCOMObject ();
    • Contenedor HTMLDocument.GetCOMObject ().
  • Carga de componentes externos:
    • Cargar ExternalComponent ();
    • Conecte el componente externo ().
  • El acceso a los sistema de archivos:
    • ValueInFile ();
    • Copiar archivo ();
    • CombineFiles ();
    • MoveFile ();
    • Archivo dividido ();
    • Crear directorio ();
    • Borrar archivos ();
    • Archivo nuevo;
    • Nuevo xBase;
    • HTMLWrite.OpenFile ();
    • Leyendo HTML.OpenFile ();
    • Leer XML.OpenFile ();
    • XMLWrite.OpenFile ();
    • ReadingFastInfoset.OpenFile ();
    • WriteFastInfoset.OpenFile ();
    • CanonicalXMLWriter.OpenFile ();
    • ConversionXSL.LoadFromFile ();
    • WriteZipFile.Open ();
    • Leer un archivo ZipFile.Open ();
    • NewTextReader (), si el primer parámetro es una cadena;
    • ReadText.Open (), si el primer parámetro es una cadena;
    • NewWriteText (), si el primer parámetro es una cadena;
    • WriteText.Open (), si el primer parámetro es una cadena;
    • Extracción de texto nuevo ();
    • cambiar la propiedad RetrieveText.FileName;
    • ExtractText.Write ();
    • New Picture (), si el primer parámetro es una cadena;
    • Imagen.Escribir ();
    • New BinaryData ();
    • BinaryData.Write ();
    • NewDataWrite (), si el primer parámetro es una cadena;
    • NewReaderData (), existe el primer parámetro: una cadena;
    • todos los métodos del objeto FileStreamManager;
    • New FileStream ();
    • FormattedDocument.Write ();
    • GeographicSchema.Read ();
    • GeographicSchema.Record ();
    • GeographicSchema.Print ();
    • TabularDocument.Read ();
    • TabularDocument.Write ();
    • TabularDocument.Print (); GraphicSchema.Read ();
    • GraphicalScheme.Write ();
    • GraphicalScheme.Print ();
    • TextDocument.Read ();
    • TextDocument.Write ().
  • Acceso a Internet:
    • Nueva conexión a Internet,
    • Nuevo correo de Internet,
    • Nuevo InternetProxy,
    • Nueva HTTPConnection,
    • Nueva conexión FTP.

¡ATENCIÓN! Lanza una excepción al realizar operaciones prohibidas en tiempo de ejecución.

Nota. Los informes y el procesamiento externos abiertos mediante el menú Archivo - Abrir se ejecutan en modo seguro si el usuario no tiene derechos de acceso administrativo.

El número de fallas debe ser el mismo que el número de paradas. Sin embargo, si se activó un modo seguro (una o más) dentro de un procedimiento o función, pero no se desactivó, el sistema se apagará automáticamente tantas veces como encendidos incompletos en el procedimiento o función que se va a realizar. abandonado.

Si un procedimiento o función llama a un método Establecer modo seguro (falso) hecho más que llamadas a métodos Establecer modo seguro (verdadero) entonces se lanzará una excepción.

Es posible que sea necesario establecer el modo seguro mediante programación cuando el desarrollador de la configuración asume el uso de un código de programa de terceros (en relación con la configuración), cuya fiabilidad no puede garantizar el desarrollador. Un ejemplo de dicho código es la ejecución de los métodos Execute () y Compute () en los casos en que el código ejecutable se obtiene de mundo exterior... En este caso, es una buena práctica establecer el modo seguro antes de ejecutar estos métodos:

// Se genera un código de programa que debe ejecutarse // Es posible que el código se cargue desde fuentes externas// o ingresado manualmente ExecutableCode = GetExecutableCodeFrom OutsideWorld (); // Habilitar el modo seguro Establecer el modo seguro (verdadero); // Ejecutar código potencialmente peligroso Execute (Código ejecutable); // Desactivar el modo seguro Establecer el modo seguro (falso);

En algunos casos, la configuración del modo seguro puede entrar en conflicto con la configuración del modo privilegiado. Un ejemplo de tal conflicto es la publicación de un documento que tiene el modo Privilegiado en la propiedad de publicación establecida desde el código de idioma incrustado que se ejecuta en modo seguro. En este caso, el modo privilegiado está deshabilitado y los intentos de habilitarlo se ignoran. Como resultado, el código en el lenguaje incrustado que "se basa" en el modo privilegiado habilitado "choca" con su ausencia, lo que conduce a errores por razones no obvias. Para evitar tal situación, el sistema 1C: Enterprise deshabilita automáticamente el modo seguro para los controladores de eventos que están disponibles en el módulo de objetos o en el módulo de administrador, siempre que el código ejecutable en el lenguaje integrado no se encuentre en la extensión de configuración. Estos manejadores están marcados de una manera especial en el asistente de sintaxis.

También brinda la opción de deshabilitar el modo seguro desde el lenguaje incorporado (si el código del programa desde el cual se intenta la desconexión no está en una extensión de configuración). Para deshabilitar el modo seguro, use el método Establecer el modo seguro deshabilitar ()... Compruebe que el modo seguro está en este momento desactivado (automáticamente o llamando a un método), puede utilizar el método GetDisableSafeMode ().

Dentro de un único método de lenguaje integrado, no puede haber más de un nivel de anidamiento para configurar el modo seguro (llamando al método SetSafeMode ()) y configurando para deshabilitar el modo seguro (automáticamente durante la duración de los controladores de eventos del objeto de metadatos o llamando a SetDisableSafeMode () método). Al intentar aumentar el anidamiento, se lanza una excepción:

// Uso correcto Procedimiento ProcedureName () SetSafeModeDisable (True); Establecer el modo seguro (verdadero); Establecer modo seguro (falso); Establecer la desactivación del modo seguro (falso); EndProcedure // Uso incorrecto Procedimiento ProcedureName () SetSafeModeDisable (True); Establecer el modo seguro (verdadero); Establecer la desactivación del modo seguro (falso); // Excepción EndProcedure Procedimiento ProcedureName () SetSafeMode (True); Establecer la desactivación del modo seguro (falso); // Excepción EndProcedure

Cuando inicie el programa, cargue documentos en usuario regular el error "El modo seguro está establecido. La operación está prohibida".

Esta complejidad surge porque no hay suficientes derechos para iniciar el procesamiento externo. Para configurar los derechos de acceso, vaya a la base de datos en el modo 1C Enterprise en nombre de Administrador y ve a la sección Configuración de derechos y usuarios / Perfiles de grupos de acceso, hacer clic Para crear un grupo.

Ingrese el nombre del grupo y marque las casillas disponibles para los usuarios de este grupo de roles -

  • Apertura interactiva de informes externos y procesamiento.
  • Uso de informes y procesamiento adicionales

Haga clic en Quemar y cerrar


Regrese al menú Usuarios y seleccione de la lista el empleado que trabajará con el programa Descargar Documentos. Haz clic en Permisos. En la lista de perfiles, marque el perfil que creó anteriormente. Haga clic en Anote.


Se recomienda agregar Carga de documentos a la lista de procesadores externos para que los usuarios puedan comenzar a procesar. Para esto en el menú Administración / Impresión y procesamiento de formularios / Informes y procesamiento adicionales crear nuevo tratamiento... Busque y asigne un nombre al archivo LoadDocuments.epf. Especifique la ubicación del procesamiento en el menú, desde donde el usuario puede iniciarlo en el futuro, por ejemplo, seleccione el menú Referencias

Al hacer clic en el elemento Acceso rapido usted indica a cuál de los usuarios está disponible el tratamiento:


Después de la configuración, haga clic en Quemar y cerrar... Para comenzar a procesar, los usuarios solo necesitarán volver a ingresar a la base de datos y abrirla desde el menú de acceso (en el ejemplo, Referencias) y hacer clic en Ejecutar.


Abrir Menú - Todas las funciones ..... y busque la opción Perfiles de seguridad en uso en la lista.


Basta con desmarcar la opción "Se utilizan perfiles de seguridad".


Después de eso, el programa se iniciará correctamente.

Descubrimiento programático El procesamiento externo se realiza utilizando el objeto de contexto global ExternalProcessing, que tiene el tipo ExternalProcessingManager... Para cada modo de funcionamiento de la plataforma 1C (modo de aplicación normal y modo de aplicación gestionada), se utilizan varios métodos de objeto para trabajar con procesamiento externo.

Ejecutar procesamiento externo en modo de aplicación normal

V aplicación normal debe utilizar el método Create () del objeto ExternalProcessing, al que se le pasa el nombre completo del archivo de procesamiento externo. El método devuelve un objeto de tipo Procesamiento externo, este objeto es el procesamiento externo que se está abriendo. Si necesita abrir un formulario de procesamiento externo, llame al método GetForm () en el objeto resultante, que devolverá el formulario principal, y luego llame al método Open () para abrirlo.


Processing = ExternalProcessing.Create (FullFileName);
Processing.GetForm (). Open ();

En procesadores externos, el formulario principal siempre debe ser un formulario regular y el formulario administrado debe ser siempre adicional, de lo contrario, el método GetForm () no funcionará en el modo de aplicación normal.

Ejecución de procesamiento externo en modo de aplicación administrada

En el modo formularios gestionados Aparece la división del algoritmo según el contexto de ejecución. En el cliente, obtenemos datos binarios por el nombre completo del archivo de procesamiento externo. Transferimos los datos binarios recibidos al servidor y los almacenamos temporalmente. A continuación, debe llamar al método Connect () del objeto ExternalProcessing, al que se pasa la dirección del almacenamiento temporal. El método devuelve el nombre del procesamiento externo conectado. Devolvemos el nombre del procesamiento externo al cliente, formamos una ruta de cadena al formulario de procesamiento y usamos el método OpenForm () para abrir el formulario de procesamiento externo.

Y en el servidor
Función GetExternalProcessingName (BinaryData)
AddressToTemporaryStorage = PutToTemporaryStore (BinaryData);
Devolver ExternalProcessing.Connect (AddressInTemporaryStorage);
EndFunction

& OnClient
FullFileName = ""; // Nombre completo del archivo de procesamiento externo.
FileData = New BinaryData (FullFileName);
ExternalProcessingName = GetExternalProcessingName (FileData);
OpenForm ("ExternalProcessing." + ExternalProcessingName + ".Form");

Modo seguro para tratamientos externos

Los métodos Create () y Connect () del objeto ExternalProcessing tienen un parámetro de entrada SafeMode, un signo de conexión de procesamiento externo en modo seguro. Si no se especifica el parámetro, la conexión se realizará en modo seguro.
Modo seguro el trabajo está diseñado para proteger el sistema de la ejecución de código de programa "no confiable" en el servidor. El peligro potencial es el procesamiento externo o el código de programa ingresado por el usuario para su uso en los métodos Ejecutar () y Calcular ().
El modo seguro tiene las siguientes restricciones:
  • el modo privilegiado se cancela si se configuró;
  • se ignoran los intentos de ingresar al modo privilegiado;
  • están prohibidas las operaciones con objetos COM;
  • está prohibido cargar y conectar componentes externos;
  • se deniega el acceso al sistema de archivos (a excepción de los archivos temporales);
  • Se niega el acceso a Internet.
El procesamiento abierto de forma interactiva no se realiza en modo seguro, por lo que se recomienda implementar un mecanismo para abrir el procesamiento externo en modo seguro, así como para evitar que el usuario abra interactivamente el procesamiento externo a nivel de derechos.
Para prohibir la apertura interactiva de procesamiento, en todos los roles asignados al usuario, es necesario eliminar el derecho "Apertura interactiva de procesamiento externo" (ver Figura 1).
Figura 1. Derechos de apertura interactiva de procesamientos / informes externos
El derecho "Abrir procesadores externos de forma interactiva" no afecta al objeto ExternalProcessing de ninguna manera.

Al abrir informes externos mediante programación, de manera similar a los procesadores externos, solo debe usar el objeto de contexto global Informes externos, que tiene el tipo ExternalReportManager.

El procesamiento externo se abre mediante programación utilizando el objeto de contexto global ExternalProcessing, que tiene el tipo ExternalProcessingManager... Para cada modo de funcionamiento de la plataforma 1C (modo de aplicación normal y modo de aplicación gestionada), se utilizan varios métodos de objeto para trabajar con procesamiento externo.

Ejecutar procesamiento externo en modo de aplicación normal

En una aplicación típica, debe utilizar el método Create () del objeto ExternalProcessing, al que se le pasa el nombre completo del archivo de procesamiento externo. El método devuelve un objeto de tipo Procesamiento externo, este objeto es el procesamiento externo que se está abriendo. Si necesita abrir un formulario de procesamiento externo, llame al método GetForm () en el objeto resultante, que devolverá el formulario principal, y luego llame al método Open () para abrirlo.


Processing = ExternalProcessing.Create (FullFileName);
Processing.GetForm (). Open ();

En procesadores externos, el formulario principal siempre debe ser un formulario regular y el formulario administrado debe ser siempre adicional, de lo contrario, el método GetForm () no funcionará en el modo de aplicación normal.

Ejecución de procesamiento externo en modo de aplicación administrada

En el modo de formularios administrados, aparece una división del algoritmo por contexto de ejecución. En el cliente, obtenemos datos binarios por el nombre completo del archivo de procesamiento externo. Transferimos los datos binarios recibidos al servidor y los almacenamos temporalmente. A continuación, debe llamar al método Connect () del objeto ExternalProcessing, al que se pasa la dirección del almacenamiento temporal. El método devuelve el nombre del procesamiento externo conectado. Devolvemos el nombre del procesamiento externo al cliente, formamos una ruta de cadena al formulario de procesamiento y usamos el método OpenForm () para abrir el formulario de procesamiento externo.

Y en el servidor
Función GetExternalProcessingName (BinaryData)
AddressToTemporaryStorage = PutToTemporaryStore (BinaryData);
Devolver ExternalProcessing.Connect (AddressInTemporaryStorage);
EndFunction

& OnClient
FullFileName = ""; // Nombre completo del archivo de procesamiento externo.
FileData = New BinaryData (FullFileName);
ExternalProcessingName = GetExternalProcessingName (FileData);
OpenForm ("ExternalProcessing." + ExternalProcessingName + ".Form");

Modo seguro para tratamientos externos

Los métodos Create () y Connect () del objeto ExternalProcessing tienen un parámetro de entrada SafeMode, un signo de conexión de procesamiento externo en modo seguro. Si no se especifica el parámetro, la conexión se realizará en modo seguro.
El modo seguro está diseñado para proteger el sistema de la ejecución de código de programa "no confiable" en el servidor. El peligro potencial es el procesamiento externo o el código de programa ingresado por el usuario para su uso en los métodos Ejecutar () y Calcular ().
El modo seguro tiene las siguientes restricciones:
  • el modo privilegiado se cancela si se configuró;
  • se ignoran los intentos de ingresar al modo privilegiado;
  • están prohibidas las operaciones con objetos COM;
  • está prohibido cargar y conectar componentes externos;
  • se deniega el acceso al sistema de archivos (a excepción de los archivos temporales);
  • Se niega el acceso a Internet.
El procesamiento abierto de forma interactiva no se realiza en modo seguro, por lo que se recomienda implementar un mecanismo para abrir el procesamiento externo en modo seguro, así como para evitar que el usuario abra interactivamente el procesamiento externo a nivel de derechos.
Para prohibir la apertura interactiva de procesamiento, en todos los roles asignados al usuario, es necesario eliminar el derecho "Apertura interactiva de procesamiento externo" (ver Figura 1).
Figura 1. Derechos de apertura interactiva de procesamientos / informes externos
El derecho "Abrir procesadores externos de forma interactiva" no afecta al objeto ExternalProcessing de ninguna manera.

Al abrir informes externos mediante programación, de manera similar a los procesadores externos, solo debe usar el objeto de contexto global Informes externos, que tiene el tipo ExternalReportManager.

El hecho es que cuando se utiliza la versión cliente-servidor de la operación 1C, el procesamiento / informes externos se abren en modo seguro, en el que está prohibido el uso del modo privilegiado. Y el modo privilegiado se usa muy a menudo en configuraciones típicas: formación formularios impresos, varios controles oficiales (registro de cambios), etc. Como resultado, incluso utilizando un informe regular en la ACS sin un formulario (por defecto, se utiliza el formulario general "Formulario de informe") y manteniendo ajustes personalizados informe (a la referencia correspondiente), recibirá un error sobre derechos de acceso insuficientes a varias constantes y parámetros de sesión utilizados para fines de servicio después de la línea SetPrivilegedMode (True);

La solución "correcta" sería conectar procesadores e informes externos a través de los mecanismos del BSP "Informes y procesamiento adicionales" con deshabilitar el modo seguro o agregar permisos (en mi opinión, con Versiones BSP 2.2.2.1). Pero si por alguna razón es necesario usar exactamente archivos externos informes / procesamiento, puede configurar el perfil de seguridad del clúster, que se utiliza como perfil de seguridad del modo seguro para un base de información.

Me gustaría señalar de inmediato que esta opción no es preferible, pero debido a diversas circunstancias, se puede utilizar de una forma tan simplificada. Por ejemplo, tengo varias bases en diferentes ciudades, un local común se sienta con derechos estrictamente limitados, USB cerrado, etc., en algún lugar uso Contabilidad 2.0, y en algún lugar 3.0, hago casi todos los informes usando ACS sin formularios, para que abierto en ambas versiones. Sirva todos estos informes para diferentes versiones y diferentes bases es un negocio laborioso y desesperado, tk. Los planes incluyen una transición a una única configuración y base ...

Creamos un perfil.
En la consola del clúster, creamos un perfil de seguridad en el que colocamos banderas "Se puede utilizar como perfil de seguridad en modo seguro" y "bajo" Permitido Acceso completo:" "a modo privilegiado".

En muchos casos de uso de informes y tratamientos sencillos este método será aplicable. Para situaciones más complejas, no tiene sentido describir el proceso, porque se indica en la documentación (la capacidad de configurar perfiles de seguridad para archivos externos específicos especificando su hash, etc.).

PD Pensé que los perfiles de seguridad solo funcionan cuando se usan licencias para la plataforma y el servidor del nivel CORP, pero esta funcionalidad también se cumple en la plataforma 1C: Enterprise 8.3 (condicionalmente, se puede llamar a PROF por analogía con las configuraciones típicas Basic / PROF / CORP )