Menú
Está libre
registro
hogar  /  Educación/ 1s 8 está configurado el modo seguro. Abrir procesamiento externo mediante programación

1c 8 está configurado en modo seguro. Abrir procesamiento externo mediante programación

Descubrimiento programático procesamiento externo se lleva a cabo 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 aplicación gestionada) utiliza varios métodos de objeto para trabajar con procesamiento externo.

Iniciar el procesamiento externo en el 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.

Inicio del procesamiento externo en el 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 colocamos en un almacenamiento temporal. 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 = PutToTemporalStore (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. Los peligros potenciales son tratamientos externos o código de programa ingresado por el usuario para su uso en los métodos Execute () y Calculate ().
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;
  • denegado el acceso a sistema de archivos(excepto archivos temporales);
  • Se niega el acceso a Internet.
Los procesamientos abiertos de forma interactiva no se realizan en modo seguro, por lo que se recomienda implementar un mecanismo para abrir procesadores externos en modo seguro, así como para evitar que el usuario abra de forma interactiva procesadores externos a nivel de derechos.
Para prohibir la apertura interactiva del procesamiento, en todos los roles asignados al usuario, debe eliminar el derecho "Abrir procesamiento externo interactivamente" (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 Procesamiento externo de ninguna manera.

Al abrir informes externos mediante programación, de forma similar a los procesadores externos, solo debe utilizar 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 un perfil de seguridad de clúster que se utiliza como un perfil de seguridad de modo seguro para una base de información específica.

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 simples 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 personalizar 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 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 )

Con el lanzamiento de la plataforma 8.3.9.2033 apareció nuevo mecanismo "Protección contra acciones peligrosas".

Gracias a esta innovación, 1C -ka ahora comenzó a jurar en la apertura del procesamiento (y no solo):

Advertencia de seguridad

Abre "Mi procesamiento externo" del archivo "My_External_Processing.epf"

Se recomienda prestar atención a la fuente de la cual se Este archivo... Si no hay acuerdo con la fuente sobre el desarrollo módulos adicionales, o hay dudas sobre el contenido del archivo, entonces no se recomienda abrirlo, ya que esto puede dañar su computadora y sus datos.

¿Quiere permitir que se abra este archivo?

¡Así que 1C decidió luchar contra los códigos maliciosos!

¿Dónde estará esto? código malicioso"La empresa sigue siendo un misterio)

Las acciones potencialmente peligrosas incluyeron:

  • Cargando un informe externo, procesando o ampliando la configuración.
  • Cargue o actualice la configuración / extensión.
  • Acceso desde un informe / procesamiento externo o extensión a las siguientes funciones:
  • Ejecución de comandos del sistema operativo.
  • Gestión de usuarios (grabar o eliminar información sobre un usuario de la base de datos).
  • Llamar al método Connect () del administrador de procesadores externos (informes).
  • Llamar al método ConfigurationExtension.Write ().
  • Trabajar con objetos COM.

¿Cómo se puede apagar este "milagro"?

Para hacer esto, necesita ejecutar 1C Enterprise en el modo configurador.
Seleccione el menú "Administración" - "Usuarios".
En la ventana abierta de nuestros usuarios, debe abrir la ventana de configuración del usuario y en la pestaña "Básico" quitar la casilla de verificación "Protección contra acciones peligrosas"

Hay otras formas de desactivar esto:

Se implementó la capacidad de especificar una lista de infobases, al trabajar con las cuales se desactivará la protección contra acciones peligrosas.
Por esta función es responsable el parámetro DisableUnsafeActionProtection en el archivo conf.cfg, que permite deshabilitar el mecanismo de protección contra acciones peligrosas para todos los usuarios de determinadas infobases cuyas cadenas de conexión satisfacen las máscaras especificadas en el parámetro DisableUnsafeActionProtection.

En este parámetro, puede especificar varias máscaras separadas por el símbolo ";", por ejemplo:

DisableUnsafeActionProtection = prueba _. *; Etapa _. *;

Además, la protección contra acciones peligrosas del usuario se puede deshabilitar mediante programación, para lo cual existen los siguientes parámetros y propiedades:

  • Parámetro Protección contra acciones peligrosas de métodos Connect () administradores de procesamiento externo (informes)
  • La propiedad HazardousActionProtection del objetoConfigurationExtension antes de llamar al método Write () de este objeto.

La verificación de la necesidad de utilizar protección contra acciones peligrosas se realiza en el siguiente orden:

1. Si la casilla de verificación "Protección contra acciones peligrosas" está desactivada para el usuario actual, la protección se considera desactivada.

2. Si la cadena de conexión con base de información coincide con una de las plantillas especificadas en el parámetro DisableUnsafeActionProtection del archivo conf.cfg, la protección se considera deshabilitada.

3. Si la protección se desactiva explícitamente mediante el parámetro AntiDangerousActions de un procesamiento o informe externo.

4. Si la protección está explícitamente deshabilitada usando la propiedad de extensión AntiDangerousActions.

Imprimir (Ctrl + P)

Objetos de configuración

Si necesita usar un código de programa "no confiable" en el servidor: procesamiento externo o código de programa ingresado por el usuario para usar en los métodos Ejecutar () y Calcular (), puede usar el modo seguro de operación.

En modo seguro:

  • Modo privilegiado cancelado.
  • Entrar en modo privilegiado ignorado.
  • Son prohibidos 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 ().
  • Acceso al 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;
    • NewExtractText ();
    • 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 haya encendidos sin terminar 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 se requiera la configuración del software en modo seguro 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 el desarrollador no puede garantizar. 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 the 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 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 incorporado 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 configurar para deshabilitar el modo seguro (automáticamente durante la duración de los controladores de eventos de los objetos de metadatos o llamando el método SetDisableSafeMode ()). 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