Le mode sans échec est activé. L'opération est interdite

  • 10.01.2022

Avec la sortie de la plateforme le 8.3.9.2033, un nouveau mécanisme est apparu "Protection contre les actions dangereuses".

Grâce à cette innovation, 1C a maintenant commencé à jurer à l'ouverture du traitement (et pas seulement):

Avertissement de sécurité

Ouvre "Mes Traitements Externes" à partir du fichier "Mes_Traitements_Externes.epf"

Il est recommandé de prêter attention à la source d'où provient fichier donné. S'il n'y a pas d'accord avec la source sur le développement de modules supplémentaires, ou s'il y a des doutes sur le contenu du fichier, il n'est pas recommandé de l'ouvrir, car cela pourrait endommager l'ordinateur et les données.

Autoriser l'ouverture de ce fichier ?

1C a donc décidé de lutter contre les codes malveillants !

L'origine de ce "code malveillant" dans l'entreprise reste un mystère)

Les activités potentiellement dangereuses comprennent :

  • Chargement d'un rapport externe, traitement ou extension de configuration.
  • Chargement ou mise à jour d'une configuration/extension.
  • Accès depuis un rapport/traitement ou extension externe aux fonctionnalités suivantes :
  • Exécution d'une commande du système d'exploitation.
  • Gestion des utilisateurs (enregistrement ou suppression des informations utilisateur base d'informations).
  • Appel de la méthode Connect() du gestionnaire de traitements externes (rapports).
  • Appel de la méthode ConfigurationExtension.Write().
  • Travailler avec des objets COM.

Comment ce "miracle" peut-il être désactivé ?

Pour ce faire, vous devez exécuter 1C Enterprise en mode configurateur.
Sélectionnez le menu "Administration" - "Utilisateurs".
Dans la fenêtre ouverte de nos utilisateurs, vous devez ouvrir la fenêtre des paramètres utilisateur et dans l'onglet "Général", supprimer l'oiseau "Protection contre les actions dangereuses"

Il existe d'autres moyens de désactiver cette option :

Implémentation de la possibilité de spécifier une liste d'infobases avec lesquelles la protection contre les actions dangereuses sera désactivée.
Cette fonction est contrôlée par le paramètre DisableUnsafeActionProtection dans le fichier conf.cfg, qui vous permet de désactiver le mécanisme de protection contre les actions dangereuses pour tous les utilisateurs de certaines infobases dont les chaînes de connexion correspondent aux masques spécifiés dans le paramètre DisableUnsafeActionProtection.

Dans ce paramètre, vous pouvez spécifier plusieurs masques séparés par le symbole ";", par exemple :

DisableUnsafeActionProtection=test_.*;stage_.*;

De plus, la protection contre les actions dangereuses de l'utilisateur peut être désactivée par programmation, pour laquelle les paramètres et propriétés suivants sont disponibles :

  • Le paramètre ProtectionFromDangerousActions des méthodes Connect() des responsables de traitement externes (rapports)
  • La propriété SafeActionProtection de l'objet ConfigurationExtension avant d'appeler la méthode Write() de cet objet.

La vérification du besoin de protection contre les actions dangereuses s'effectue dans l'ordre suivant:

1. Si la case "Protection contre les actions dangereuses" est décochée pour l'utilisateur actuel, la protection est considérée comme désactivée.

2. Si la chaîne de connexion de l'infobase correspond à l'un des modèles spécifiés dans le paramètre DisableUnsafeActionProtection du fichier conf.cfg, la protection est considérée comme désactivée.

3. Si la protection est explicitement désactivée à l'aide du paramètre Protection contre les actions dangereuses d'un traitement ou d'un rapport externe.

4. Si la protection est explicitement désactivée à l'aide de la propriété d'extension ProtectionFromDangerousActions.

Au démarrage du programme Télécharger les documents sous utilisateur régulier l'erreur "Le mode sans échec est défini. L'opération est interdite."

Cette difficulté vient du fait il n'y a pas assez de droits pour démarrer le traitement externe. Pour définir les droits d'accès, accédez à la base de données en mode 1C Enterprise au nom de administrateur et aller à la rubrique Paramètres d'utilisateur et de droits / Profils de groupe d'accès, Cliquez sur Pour créer un groupe.

Entrez le nom du groupe et cochez les rôles disponibles pour les utilisateurs de ce groupe -

  • Ouverture interactive des rapports externes et traitement
  • Utilisation de rapports et traitement supplémentaires

Cliquez sur Ecrire et fermer


Retournez au menu Utilisateurs et sélectionnez un employé dans la liste qui travaillera avec le programme de téléchargement de documents. Cliquez sur Autorisations. Dans la liste des profils, marquez le profil créé précédemment. Cliquez sur brûler.


Pour que les utilisateurs puissent commencer le traitement, il est recommandé d'ajouter le téléchargement de documents à la liste des traitements externes. Pour ce faire, le menu Administration / Impression des formulaires et traitement / Rapports et traitement supplémentaires créer un nouveau traitement. Spécifiez le chemin d'accès au fichier "DocumentUpload.epf" et donnez-lui un nom. Spécifiez l'emplacement du traitement dans le menu, à partir duquel l'utilisateur peut le démarrer à l'avenir, par exemple, sélectionnez le menu Livres de référence

En cliquant sur la rubrique Accès rapide, vous indiquez lequel des utilisateurs est disponible pour le traitement :


Après le réglage, cliquez sur Ecrire et fermer. Pour démarrer le traitement, les utilisateurs n'auront qu'à entrer de nouveau dans la base de données et l'ouvrir à partir du menu d'accès (dans l'exemple - Répertoires) et cliquer sur Courir.


ouvrir Menu - Toutes les fonctions... et recherchez l'option "Utiliser des profils de sécurité" dans la liste.


Il suffit de décocher l'option "Les profils de sécurité sont utilisés".


Après cela, le programme fonctionnera avec succès.

Le fait est que lors de l'utilisation de la version client-serveur de 1C, les traitements / rapports externes sont ouverts en mode sans échec, dans lequel l'utilisation du mode privilégié est interdite. Et le mode privilégié est très souvent utilisé dans des configurations typiques : formation d'imprimés, chèques-services divers (enregistrement des échanges), etc. Par conséquent, même en utilisant un rapport régulier sur ACS sans formulaire (par défaut, le formulaire général "ReportForm" est utilisé) et en enregistrant les paramètres utilisateur du rapport (dans le répertoire correspondant), vous recevrez une erreur d'accès insuffisant droits sur diverses constantes et paramètres de session utilisés à des fins officielles après la ligne SetPrivilegedMode(True) ;

La solution "correcte" serait de connecter des processeurs et des rapports externes via les mécanismes BSP "Rapports et traitement supplémentaires" en désactivant le mode sans échec ou en ajoutant des autorisations (à mon avis, à partir de la version 2.2.2.1 de BSP). Mais si, pour une raison quelconque, il est nécessaire d'utiliser des fichiers de rapport/traitement externes, vous pouvez configurer le profil de sécurité du cluster utilisé comme profil de sécurité en mode sans échec pour une infobase particulière.

Je voudrais tout de suite noter que cette option n'est pas préférée, mais en raison de diverses circonstances, elle peut être utilisée sous une forme aussi simplifiée. Par exemple, j'ai plusieurs bases de données dans différentes villes, un réseau local commun avec des droits strictement limités, USB fermé, etc., la comptabilité 2.0 est utilisée quelque part, et quelque part 3.0, je fais presque tous les rapports en utilisant ACS sans formulaires, de sorte qu'ils ont ouvert dans les deux versions. Maintenir tous ces rapports pour différentes versions et différentes bases de données est une tâche chronophage et peu prometteuse, car il est prévu de passer à une seule configuration et base...

Nous créons un profil.
Dans la console du cluster, créez un profil de sécurité dans lequel nous définissons les drapeaux "Peut être utilisé comme profil de sécurité en mode sans échec" et " sous " Autorisé accès total:" "en mode privilégié".

Dans de nombreux cas d'utilisation de rapports et de traitement simple, cette méthode sera applicable. Pour des situations plus complexes, cela n'a aucun sens de décrire le processus, car. il est décrit dans la documentation (possibilité de configurer des profils de sécurité pour des fichiers externes spécifiques en précisant sa somme de hachage, etc.).

PS Je pensais que les profils de sécurité ne fonctionnaient que lors de l'utilisation de licences pour la plate-forme et le serveur du niveau CORP, mais cette fonctionnalité fonctionne également sur la plate-forme 1C: Enterprise 8.3 (on peut conditionnellement appeler PROF par analogie avec les configurations typiques Basic / PROF / CORP)

La découverte par programme du traitement externe est effectuée à l'aide de l'objet de contexte global ExternalProcessing, qui a le type ExternalProcessingManagerExternalProcessingManager. Pour chaque mode de fonctionnement de la plate-forme 1C (mode d'application standard et mode d'application gérée), différentes méthodes d'objet sont utilisées pour travailler avec un traitement externe.

Démarrage du traitement externe en mode application normal

Dans une application typique, vous devez utiliser la méthode Create() de l'objet ExternalProcessing, qui reçoit le nom complet du fichier externalprocessing. La méthode renvoie un objet de type TraitementExterne, cet objet est le traitement externe en cours d'ouverture. Si vous devez ouvrir un formulaire de traitement externe, appelez la méthode GetForm() de l'objet reçu, qui renverra le formulaire principal, puis appelez la méthode Open() pour l'ouvrir.


Traitement = ExternalProcessings.Create(FullFileName);
Traitement.GetForm().Open();

Dans le traitement externe, le formulaire principal doit toujours être un formulaire normal et le formulaire géré doit toujours être un formulaire supplémentaire, sinon la méthode GetForm() ne fonctionnera pas en mode d'application normal.

Démarrer le traitement externe en mode application gérée

En mode formulaires gérés il y a une division de l'algorithme selon le contexte d'exécution. Sur le client, nous obtenons des données binaires par le nom complet du fichier de traitement externe. Nous transférons les données binaires reçues sur le serveur et les plaçons dans un stockage temporaire. Ensuite, vous devez appeler la méthode Connect() de l'objet ExternalProcessing, auquel l'adresse du stockage temporaire est transmise. La méthode renvoie le nom du traitement externe connecté. Nous renvoyons le nom du traitement externe sur le client, formons un chemin de chaîne vers le formulaire de traitement et utilisons la méthode OpenForm() pour ouvrir le formulaire de traitement externe.

&Sur le serveur
Fonction GetExternalProcessName(BinaryData)
AddressInTempStorage = PlaceInTempStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTempStorage);
EndFunctions

&ChezClient
NomFichierComplet = "" ; // Nom complet du fichier de traitement externe.
FileData = New BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OuvreFormulaire("TraitementExterne." + NomTraitementExterne + ".Formulaire");

Mode sans échec pour le traitement externe

Les méthodes Create() et Connect() de l'objet ExternalProcessing ont le paramètre d'entrée SafeMode, qui indique que le traitement externe est connecté en mode sans échec. Si le paramètre n'est pas précisé, la connexion se fera en mode sécurisé.
Le mode de fonctionnement sans échec est conçu pour protéger le système contre l'exécution de code de programme "non fiable" sur le serveur. Les dangers potentiels sont le traitement externe ou le code de programme entré par l'utilisateur pour une utilisation dans les méthodes Exécuter () et Calculer ().
Le mode sans échec a les restrictions suivantes :
  • le mode privilégié est annulé s'il a été activé ;
  • les tentatives d'accès au mode privilégié sont ignorées ;
  • les opérations avec des objets COM sont interdites ;
  • le chargement et la connexion de composants externes sont interdits ;
  • refusé l'accès à système de fichiers(sauf fichiers temporaires) ;
  • l'accès à Internet est interdit.
Les traitements ouverts interactivement ne sont pas exécutés en mode sans échec, il est donc recommandé de mettre en place le mécanisme d'ouverture des traitements externes en mode sans échec, ainsi que d'interdire à l'utilisateur d'ouvrir les traitements externes de manière interactive au niveau des droits.
Pour interdire l'ouverture interactive des traitements, dans tous les rôles attribués à l'utilisateur, il faut supprimer le droit "Ouverture interactive des traitements externes" (voir Figure 1).
Figure 1. Droits d'ouverture interactive de traitements/rapports externes
Le droit "Traitement externe ouvert de manière interactive" n'affecte en rien l'objet ExternalProcessing.

L'ouverture de rapports externes par programmation est similaire au traitement externe, mais vous devez utiliser l'objet de contexte global ExternalReports, qui est de type ExternalReportsManagerExternalReportsManager.

La découverte par programme du traitement externe est effectuée à l'aide de l'objet de contexte global ExternalProcessing, qui a le type ExternalProcessingManagerExternalProcessingManager. Pour chaque mode de fonctionnement de la plate-forme 1C (mode d'application standard et mode d'application gérée), différentes méthodes d'objet sont utilisées pour travailler avec un traitement externe.

Démarrage du traitement externe en mode application normal

Dans une application typique, vous devez utiliser la méthode Create() de l'objet ExternalProcessing, qui reçoit le nom complet du fichier externalprocessing. La méthode renvoie un objet de type TraitementExterne, cet objet est le traitement externe en cours d'ouverture. Si vous devez ouvrir un formulaire de traitement externe, appelez la méthode GetForm() de l'objet reçu, qui renverra le formulaire principal, puis appelez la méthode Open() pour l'ouvrir.


Traitement = ExternalProcessings.Create(FullFileName);
Traitement.GetForm().Open();

Dans le traitement externe, le formulaire principal doit toujours être un formulaire normal et le formulaire géré doit toujours être un formulaire supplémentaire, sinon la méthode GetForm() ne fonctionnera pas en mode d'application normal.

Démarrer le traitement externe en mode application gérée

Le mode formulaires gérés introduit une séparation de l'algorithme par contexte d'exécution. Sur le client, nous obtenons des données binaires par le nom complet du fichier de traitement externe. Nous transférons les données binaires reçues sur le serveur et les plaçons dans un stockage temporaire. Ensuite, vous devez appeler la méthode Connect() de l'objet ExternalProcessing, auquel l'adresse du stockage temporaire est transmise. La méthode renvoie le nom du traitement externe connecté. Nous renvoyons le nom du traitement externe sur le client, formons un chemin de chaîne vers le formulaire de traitement et utilisons la méthode OpenForm() pour ouvrir le formulaire de traitement externe.

&Sur le serveur
Fonction GetExternalProcessName(BinaryData)
AddressInTempStorage = PlaceInTempStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTempStorage);
EndFunctions

&ChezClient
NomFichierComplet = "" ; // Nom complet du fichier de traitement externe.
FileData = New BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OuvreFormulaire("TraitementExterne." + NomTraitementExterne + ".Formulaire");

Mode sans échec pour le traitement externe

Les méthodes Create() et Connect() de l'objet ExternalProcessing ont le paramètre d'entrée SafeMode, qui indique que le traitement externe est connecté en mode sans échec. Si le paramètre n'est pas précisé, la connexion se fera en mode sécurisé.
Le mode de fonctionnement sans échec est conçu pour protéger le système contre l'exécution de code de programme "non fiable" sur le serveur. Les dangers potentiels sont le traitement externe ou le code de programme entré par l'utilisateur pour une utilisation dans les méthodes Exécuter () et Calculer ().
Le mode sans échec a les restrictions suivantes :
  • le mode privilégié est annulé s'il a été activé ;
  • les tentatives d'accès au mode privilégié sont ignorées ;
  • les opérations avec des objets COM sont interdites ;
  • le chargement et la connexion de composants externes sont interdits ;
  • l'accès au système de fichiers est refusé (sauf pour les fichiers temporaires) ;
  • l'accès à Internet est interdit.
Les traitements ouverts interactivement ne sont pas exécutés en mode sans échec, il est donc recommandé de mettre en place le mécanisme d'ouverture des traitements externes en mode sans échec, ainsi que d'interdire à l'utilisateur d'ouvrir les traitements externes de manière interactive au niveau des droits.
Pour interdire l'ouverture interactive des traitements, dans tous les rôles attribués à l'utilisateur, il faut supprimer le droit "Ouverture interactive des traitements externes" (voir Figure 1).
Figure 1. Droits d'ouverture interactive de traitements/rapports externes
Le droit "Traitement externe ouvert de manière interactive" n'affecte en rien l'objet ExternalProcessing.

L'ouverture de rapports externes par programmation est similaire au traitement externe, mais vous devez utiliser l'objet de contexte global ExternalReports, qui est de type ExternalReportsManagerExternalReportsManager.