Le mode sans échec est activé. L'opération est interdite. Découverte logicielle des traitements externes. Mode sans échec Définir le mode de partage de données sécurisé

En utilisant l'exemple de Trade Management 11.3, considérons un processus simple de connexion d'un formulaire d'impression externe. Nous examinerons également les caractéristiques du nouveau système de sécurité.

Passage rapide

Actions préliminaires

Pour commencer, vous devriez activer la fonctionnalité ou vérifier la disponibilité

1. Nous allons sous tous les droits à l'infobase.

2. Allez dans le menu « NSI et administration » / Bloc « Administration » / Commande « Imprimer formulaires, rapports et traitement ».

Addenda

Dans la section ouverte :

On ajoute le traitement par le bouton "Créer" (c'est important) ou "Mettre à jour !" existant:

  • Sélectionnez-le dans la liste (s'il n'est pas sélectionné ou vide, la commande ne fonctionnera pas, mais elle ne dira rien).
  • Cliquez sur le bouton "Charger à partir du fichier".

Après l'apparition de 1C dans le traitement externe, des contrôles de sécurité sont apparus dans de nouvelles configurations.

Vous ne devez installer que les traitements créés indépendamment ou reçus via des canaux de communication connus (pas par courrier, uniquement à partir d'un site avec un certificat valide, ou fourni par les employés du développeur, confirmé par lui par téléphone).

Si tout est écrit dans le traitement par le développeur, alors "Placement" sera défini - les objets dans lesquels le traitement sera impliqué, la ou les commandes apparaîtront.
Pour travailler, il suffira de cliquer sur "Enregistrer et fermer".

Examen

Immédiatement après, selon le type de traitement :

  • Le formulaire d'impression devient disponible à l'ouverture d'un document ou à partir de sa liste (pour un document déjà ouvert à la réouverture) en cliquant sur le bouton "Imprimer".
  • Les traitements sont disponibles dans les sections "Traitements supplémentaires" de chaque sous-système
  • Traitement du remplissage par le bouton "Remplir" de la liste ou du panneau de commande principal de la fiche objet.

Pour le traitement ci-dessus, le lancement ressemblera à ceci :

Si le document est nouveau, il doit être enregistré, le mécanisme de traitement externe vous en avertira :

En outre, le comportement dépend de la fonctionnalité inhérente : il est possible d'ouvrir un formulaire ou un simple traitement de données.

Avertissements de sécurité en 1C

Dans les nouvelles versions de la plateforme et des configurations, la protection contre le lancement de programmes malveillants a été renforcée.

Le traitement peut entraîner le démarrage d'Excel, auquel cas le nouveau sous-système de sécurité vous avertira également :

Dans ce cas, le code du gestionnaire est interrompu.

Si vous cliquez sur "Oui", le système vous demandera d'appeler à nouveau la commande :

Il est possible pour un utilisateur de l'infobase de désactiver la protection contre les actions dangereuses via le Configurateur :

Depuis le mode "Entreprise", cela ne peut pas être modifié, peut-être que cela a été fait exprès, cela peut apparaître après la mise à jour.

Il faut également noter que si le traitement utilise Excel, il doit démarrer en mode non sécurisé (c'était le cas avant la mise en place du nouveau système, cela fonctionne en parallèle) :

"Impossible de charger MS EXCEL !!!" "Le mode sans échec est activé. L'exploitation est interdite"

En traitement externe, cela ressemble à ceci :

Le développeur doit le mettre à "False" dans la description du traitement interne, alors tout ira bien :

ExternalProcessingDetails() ExportRegistrationParameters = Nouvelle structure ; RegistrationParameters.Insert("SafeMode", False);

Lors de la mise à jour de la configuration, il y avait également un texte d'avertissement sur la source à partir de laquelle le fichier de configuration a été obtenu :

Lorsque vous exécutez le programme de téléchargement de documents en tant qu'utilisateur normal, une erreur se produit "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.

Imprimer (Ctrl+P)

Objets de configuration

S'il est nécessaire d'utiliser un code de programme "non fiable" sur le serveur : traitement externe ou code de programme saisi par l'utilisateur pour une utilisation dans les méthodes Execute() et Calculate(), vous pouvez utiliser le mode de fonctionnement sans échec.

En mode sans échec :

  • Mode privilégié annulé.
  • Passage en mode privilégié ignoré.
  • Interdit opérations qui conduisent à l'utilisation d'outils externes en relation avec la plateforme 1C:Enterprise (y compris les analogues non bloquants des méthodes ci-dessus) :
  • Mécanismes COM :
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Chargement des composants externes :
    • ChargerComposantExterne();
    • ConnectExternalComponent().
  • Accès au système de fichiers :
    • valeurVersFichier();
    • Copier un fichier();
    • FusionnerFichiers();
    • DéplaceFichier();
    • Diviser le fichier();
    • Créer le répertoire();
    • Supprimer les fichiers();
    • Nouveau fichier;
    • Nouvelle xBase ;
    • WriteHTML.OpenFile();
    • LectureHTML.OpenFile();
    • LectureXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadFastInfoset.OpenFile();
    • WriteFastInfoset.OpenFile();
    • CanonicalWriterXML.OpenFile();
    • Transformation XSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadZipFile.Open();
    • NewTextReader() si le premier argument est une chaîne ;
    • ReadText.Open() si le premier paramètre est une chaîne ;
    • New TextWrite() si le premier paramètre est une chaîne ;
    • WriteText.Open() si le premier paramètre est une chaîne ;
    • Nouveau ExtractText();
    • modification de la propriété ExtractText.FileName ;
    • ExtractText.Write();
    • New Image() si le premier paramètre est une chaîne ;
    • Image.Record();
    • NouvelleDonnéeBinaire();
    • BinaryData.Write();
    • New DataWrite() si le premier paramètre est une chaîne ;
    • New DataRead(), le premier paramètre est une chaîne ;
    • toutes les méthodes de l'objet FileStreamManager ;
    • Nouveau FileStream();
    • FormattedDocument.Write();
    • SchémaGéographique.Lire();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TableurDocument.Lire();
    • TableurDocument.Write();
    • TableurDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Accès Internet:
    • Nouvelle connexion Internet,
    • Nouvelle messagerie Internet,
    • Nouveau proxy Internet,
    • Nouvelle connexion HTTP,
    • Nouvelle connexion FTP.

ATTENTION! Lève une exception lors de l'exécution d'opérations interdites lors de l'exécution.

Note. Les états et traitements externes, ouverts à l'aide du menu Fichier - Ouvrir, sont exécutés en mode sans échec si l'utilisateur ne dispose pas des droits d'accès administrateur.

Le nombre d'activations du mode sans échec doit correspondre au nombre d'arrêts. Cependant, si dans une procédure ou une fonction, le mode sans échec a été activé (une ou plusieurs fois), mais qu'il n'a pas été désactivé, le système s'arrêtera automatiquement autant de fois qu'il y aura d'activations en attente dans la procédure ou la fonction abandonnée.

Si, dans une procédure ou une fonction, la méthode appelle SetSafeMode(Faux) fait plus que des appels de méthode SetSafeMode (vrai), une exception sera levée.

L'installation par programmation du mode sans échec peut être requise lorsque le développeur de la configuration suppose l'utilisation d'un code de programme tiers (en relation avec la configuration), dont la fiabilité ne peut pas être garantie par le développeur. Un exemple d'un tel code est l'exécution des méthodes Execute() et Calculate() dans les cas où le code exécutable est reçu du monde extérieur. Dans ce cas, il est recommandé de définir le mode sans échec avant d'exécuter ces méthodes :

// Le code du programme est généré pour être exécuté // Il est possible que le code soit chargé à partir de sources externes // ou saisi manuellement ExecutableCode = GetExecutableCodeFrom OutsideWorld(); // Activer le mode sans échec SetSafeMode(True); // Exécute un code potentiellement dangereux Execute(ExecutableCode); // Désactiver le mode sans échec SetSafeMode(False);

Dans certains cas, les paramètres du mode sans échec peuvent entrer en conflit avec les paramètres du mode privilégié. Un exemple d'un tel conflit est la publication d'un document dont la propriété Mode privilégié sur la publication est définie à partir d'un code 1D qui s'exécute en mode sans échec. Dans ce cas, le mode privilégié est désactivé et les tentatives d'activation sont ignorées. En conséquence, le code 1C:Enterprise qui "s'appuie" sur le mode privilégié activé "entre en collision" avec son absence, ce qui entraîne des erreurs avec des raisons non évidentes d'apparition. Pour éviter une telle situation, 1C:Enterprise désactive automatiquement le mode sans échec pour les gestionnaires d'événements disponibles dans un module objet ou un module gestionnaire, à condition que le code exécutable dans le langage 1C:Enterprise ne se trouve pas dans l'extension de configuration. Ces gestionnaires sont marqués dans l'assistant de syntaxe d'une manière spéciale.

Il offre également la possibilité de désactiver le mode sans échec à partir de la 1ère langue (si le code à partir duquel la désactivation est tentée n'est pas dans une extension de configuration). Méthode pour désactiver le mode sans échec SetDisableSafeMode(). Vous pouvez vérifier que le mode sans échec est actuellement désactivé (automatiquement ou en appelant une méthode) en utilisant la méthode GetDisableSafeMode().

Dans une seule méthode 1C:1, il ne peut y avoir plus d'un niveau d'imbrication de définition du mode sans échec (en appelant la méthode SetSafeMode()) et de définition de la désactivation du mode sans échec (automatiquement au moment de l'exécution des gestionnaires d'événements d'objet de métadonnées ou en appelant la méthode méthode SetSafeModeDisable()). Lorsque vous essayez d'augmenter l'imbrication, une exception est levée :

// Procédure d'utilisation correcte ProcedureName() SetSafeModeDisable(True); SetSafeMode(True); SetSafeMode(Faux); SetSafeModeDisable(Faux); EndProcedure // Utilisation incorrecte Procedure ProcedureName() SetSafeModeDisable(True); SetSafeMode(True); SetSafeModeDisable(Faux); // Exception EndProcedure ProcedureProcedureName() SetSafeMode(True); SetSafeModeDisable(Faux); // Procédure de fin d'exception

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.

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 "Accès complet autorisé :" "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)

Vous avez aimé l'article ? Partager avec des amis: