De veilige modus is ingesteld op universele XML-uitwisseling. Veilige modus is ingesteld. De operatie is verboden. Veilige modus voor externe verwerking

Met “Trade Management 11.3” als voorbeeld zullen we het eenvoudige proces van het aansluiten van een extern drukformulier bekijken. We zullen ook kijken naar de kenmerken van het nieuwe beveiligingssysteem.

Snelle doorgang

Voorlopige acties

Eerst zou je dat moeten doen functionaliteit inschakelen of controleer de beschikbaarheid ervan

1. Log in met volledige rechten op de informatiedatabase.

2. Ga naar het menu “Stamgegevens en administratie”/Blokkeer “Administratie”/Opdracht “Geprinte formulieren, rapporten en verwerking”.

Toevoeging

In het gedeelte dat wordt geopend:

We voegen verwerking toe met behulp van de knop “Aanmaken” (dit is belangrijk) of “Bijwerken!” bestaande:

  • Selecteer het in de lijst (indien niet geselecteerd of leeg, werkt de opdracht niet, maar zegt deze niets).
  • Klik op de knop ‘Laden uit bestand’.

Na het verschijnen voor 1C in externe verwerking verschenen veiligheidscontroles in nieuwe configuraties.

U mag alleen verwerking installeren die onafhankelijk is gemaakt of is ontvangen via bekende communicatiekanalen (niet via e-mail, alleen vanaf een website met een geldig certificaat, of verstrekt door medewerkers van de ontwikkelaar, door hem telefonisch bevestigd).

Als alles in de verwerking door de ontwikkelaar is voorgeschreven, wordt "Plaatsing" ingesteld - de objecten waarbij de verwerking betrokken zal zijn, de opdracht(en) zullen verschijnen.
Om te werken, klikt u gewoon op "Opslaan en sluiten".

Inspectie

Direct daarna, afhankelijk van het type behandeling:

  • Het afgedrukte formulier komt beschikbaar wanneer u een document opent of uit de lijst ervan (voor een reeds geopend document wanneer u het opnieuw opent) door op de knop "Afdrukken" te klikken.
  • Verwerking is beschikbaar in de secties "Aanvullende verwerking" in elk subsysteem
  • Verwerking van het vullen met behulp van de knop "Vullen" van de lijst of het hoofdopdrachtpaneel van het objectformulier.

Voor de bovenstaande verwerking ziet de lancering er als volgt uit:

Als het document nieuw is, moet het worden opgeschreven; het externe verwerkingsmechanisme zal u hiervoor waarschuwen:

Verder gedrag is afhankelijk van de ingebouwde functionaliteit: het is mogelijk om een ​​formulier te openen of eenvoudigweg gegevens te verwerken.

Beveiligingswaarschuwingen in 1C

Nieuwe platformreleases en -configuraties hebben een verbeterde bescherming tegen de lancering van kwaadaardige programma's.

Door de verwerking kan Excel worden gestart en geladen. In dat geval waarschuwt het nieuwe beveiligingssubsysteem u ook:

In dit geval wordt de handlercode onderbroken.

Als u op “Ja” klikt, zal het systeem u vragen de opdracht opnieuw uit te voeren:

Het is voor een infobase-gebruiker mogelijk om de bescherming tegen gevaarlijke acties uit te schakelen via de “Configurator”:

Dit kan niet worden gewijzigd vanuit de "Enterprise" -modus, misschien is dit met opzet gedaan en kan dit na de update verschijnen.

Er moet ook worden opgemerkt dat als de verwerking Excel gebruikt, deze in een onveilige modus moet worden uitgevoerd (dit was het geval vóór de introductie van het nieuwe systeem, dit werkt parallel):

"Kan MS EXCEL niet laden!!!" “Veilige modus is ingesteld. De operatie is verboden"

Bij externe verwerking ziet het er als volgt uit:

De ontwikkelaar moet dit in de interne verwerkingsbeschrijving op "False" instellen, dan komt alles goed:

Functie InformationOnExternalProcessing() ExportRegistrationParameters = Nieuwe structuur; Registratieparameters.Insert("SafeMode", False);

Bij het updaten van de configuratie verscheen er ook waarschuwingstekst over de bron waar het configuratiebestand vandaan kwam:

Feit is dat bij gebruik van de client-serverversie van 1C externe verwerkingen/rapporten worden geopend in de veilige modus, waarin het gebruik van de bevoorrechte modus verboden is. En de bevoorrechte modus wordt heel vaak gebruikt in typische configuraties: het genereren van gedrukte formulieren, verschillende dienstencheques (registratie van uitwisselingen), enz. Als gevolg hiervan ontvangt u, zelfs als u een regulier rapport op het toegangscontrolesysteem gebruikt zonder formulier (standaard wordt het algemene formulier "ReportForm" gebruikt) en aangepaste rapportinstellingen opslaat (in de overeenkomstige map), een foutmelding over onvoldoende toegang rechten op verschillende constanten en sessieparameters die na de regel voor officiële doeleinden worden gebruikt SetPrivilegedMode(True) ;

De “juiste” oplossing zou zijn om externe verwerking en rapporten te verbinden via de BSP “Aanvullende rapporten en verwerking” mechanismen, waarbij de veilige modus wordt uitgeschakeld of machtigingen worden toegevoegd (naar mijn mening vanaf BSP versie 2.2.2.1). Maar als het om de een of andere reden nodig is om externe rapportage-/verwerkingsbestanden te gebruiken, kunt u een clusterbeveiligingsprofiel configureren dat wordt gebruikt als beveiligingsprofiel in de veilige modus voor een specifieke infobase.

Ik wil meteen opmerken dat deze optie niet de voorkeur heeft, maar vanwege verschillende omstandigheden in een dergelijke vereenvoudigde vorm kan worden gebruikt. Ik heb bijvoorbeeld verschillende databases in verschillende steden, een gemeenschappelijke lokale met strikt beperkte rechten, gesloten USB, enz., ergens gebruik ik Accounting 2.0, en ergens 3.0, ik maak bijna alle rapporten met behulp van ACS-tools zonder formulieren, zodat ze geopend in beide versies. Het bijhouden van al deze rapporten voor verschillende versies en verschillende databases is arbeidsintensief en zinloos, omdat Er zijn plannen om over te stappen naar één enkele configuratie en basis...

Laten we een profiel maken.
In de clusterconsole maken we een beveiligingsprofiel aan waarin we de vlaggen instellen "Kan worden gebruikt als beveiligingsprofiel in de Veilige modus" en " in de sectie "Volledige toegang toegestaan:" "naar bevoorrechte modus".

In veel gevallen waarbij gebruik wordt gemaakt van rapportages en eenvoudige verwerking zal deze werkwijze toepasbaar zijn. Voor complexere situaties heeft het geen zin het proces te beschrijven, omdat het wordt beschreven in de documentatie (de mogelijkheid om beveiligingsprofielen te configureren voor specifieke externe bestanden door de hash-hoeveelheid op te geven, enz.).

P.S. Ik dacht dat beveiligingsprofielen alleen functioneren bij gebruik van platform- en serverlicenties op CORP-niveau, maar deze functionaliteit werkt ook op het 1C:Enterprise 8.3-platform (het kan voorwaardelijk PROF worden genoemd, naar analogie met de standaardconfiguraties Basic/PROF/CORP)

Afdrukken (Ctrl+P)

Configuratieobjecten

Als het nodig is om “niet-vertrouwde” programmacode op de server te gebruiken: externe verwerking of programmacode ingevoerd door de gebruiker voor gebruik in de methoden Run() en Calculate(), kunt u de veilige bedieningsmodus gebruiken.

In de veilige modus:

  • Bevoorrechte modus geannuleerd.
  • Overschakelen naar de bevoorrechte modus buiten beschouwing gelaten.
  • Verboden operaties die leiden tot het gebruik van externe middelen met betrekking tot het 1C:Enterprise-platform (inclusief niet-blokkerende analogen van de gespecificeerde methoden):
  • COM-mechanismen:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Externe componenten laden:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Toegang tot bestandssysteem:
    • WaardeInBestand();
    • Kopieer bestand();
    • Bestanden samenvoegen();
    • VerplaatsBestand();
    • Gespleten bestand();
    • Maak een map();
    • Verwijder bestanden();
    • Nieuw bestand;
    • Nieuwe xBase;
    • EntryHTML.OpenFile();
    • LeesHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText(), als de eerste parameter een string is;
    • ReadText.Open(), als de eerste parameter een string is;
    • NewTextRecord(), als de eerste parameter een string is;
    • WriteText.Open(), als de eerste parameter een string is;
    • NieuweTekstExtract();
    • het wijzigen van de eigenschap ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), als de eerste parameter een string is;
    • Afbeelding.Schrijven();
    • nieuwe BinaireData();
    • BinaireData.Write();
    • NewDataRecord(), als de eerste parameter een string is;
    • New ReadData(), er is een eerste parameter: een string;
    • alle methoden van het FileStreamManager-object;
    • Nieuwe FileStream();
    • FormattedDocument.Write();
    • Geografisch schema.Read();
    • Geografisch schema.Write();
    • Geografisch schema.Print();
    • TabellarDocument.Read();
    • TabularDocument.Write();
    • TabellarDocument.Print(); GrafischScheme.Read();
    • GrafischScheme.Write();
    • GrafischScheme.Print();
    • TekstDocument.Read();
    • TekstDocument.Write().
  • Internet toegang:
    • Nieuwe internetverbinding,
    • Nieuwe internetmail,
    • Nieuwe internetproxy,
    • Nieuwe HTTP-verbinding,
    • Nieuwe FTP-verbinding.

AANDACHT! Bij het uitvoeren van verboden bewerkingen wordt er tijdens runtime een uitzondering gegenereerd.

Opmerking. Externe rapporten en verwerkingen die via het menu Bestand - Openen worden geopend, worden in de veilige modus uitgevoerd als de gebruiker geen beheerderstoegangsrechten heeft.

Het aantal keren dat de veilige modus is ingeschakeld, moet overeenkomen met het aantal keren dat deze is uitgeschakeld. Als de veilige modus echter binnen een procedure of functie is ingeschakeld (een of meerdere keren), maar niet is uitgeschakeld, wordt het systeem automatisch uitgeschakeld zo vaak als er onvolledige inschakelingen zijn geweest in de resterende procedure of functie.

Als in een procedure of functie een methode wordt aangeroepen SetSafeMode(False) meer gedaan dan methodeaanroepen SetSafeMode(True), dan wordt er een uitzondering gegenereerd.

Software-installatie van de veilige modus kan vereist zijn in het geval dat de configuratie-ontwikkelaar van plan is programmacode van derden (met betrekking tot de configuratie) te gebruiken, waarvan de ontwikkelaar de betrouwbaarheid niet kan garanderen. Een voorbeeld van dergelijke code is de uitvoering van de methoden Execute() en Compute() in gevallen waarin de uitvoerbare code van de buitenwereld wordt verkregen. In dit geval is het een goede gewoonte om de Veilige modus in te stellen voordat u deze methoden uitvoert:

// Er wordt programmacode gegenereerd die moet worden uitgevoerd // Het is mogelijk dat de code wordt geladen vanuit externe bronnen // of handmatig wordt ingevoerd ExecutableCode = GetExecutedCodeFromExternalWorld(); // Veilige modus inschakelen SetSafeMode(True); // Voer potentieel gevaarlijke code uit Execute(ExecutableCode); // Schakel de veilige modus uit SetSafeMode(False);

In sommige gevallen kunnen de instellingen van de Veilige modus conflicteren met de instellingen van de Privileged Mode. Een voorbeeld van een dergelijk conflict is het plaatsen van een document waarvoor de eigenschap Bevoorrechte modus bij het plaatsen is ingesteld, vanuit code in de ingebouwde taal die in de veilige modus wordt uitgevoerd. In dit geval wordt de bevoorrechte modus uitgeschakeld en worden pogingen om deze in te schakelen genegeerd. Als gevolg hiervan 'ontmoet' de code in de ingebedde taal, die "telt" op de ingeschakelde bevoorrechte modus, de afwezigheid ervan, wat leidt tot fouten met niet voor de hand liggende redenen voor hun uiterlijk. Om deze situatie te voorkomen schakelt het 1C:Enterprise-systeem automatisch de veilige modus uit voor gebeurtenishandlers die beschikbaar zijn in de objectmodule of managermodule, op voorwaarde dat de uitvoerbare code in de ingebouwde taal zich niet in de configuratie-extensie bevindt. Dergelijke handlers worden op een speciale manier gemarkeerd in de syntaxisassistent.

Het biedt ook de mogelijkheid om de Veilige modus uit te schakelen vanuit de ingebouwde taal (als de programmacode die probeert deze uit te schakelen zich niet in een configuratie-extensie bevindt). Om de veilige modus uit te schakelen is er een methode SetDisableSafeMode(). U kunt controleren of de veilige modus momenteel is uitgeschakeld (automatisch of door een methode aan te roepen) met behulp van de methode GetDisableSafeMode().

Binnen één methode in de ingebouwde taal kan er niet meer dan één niveau van nesting zijn voor het instellen van de veilige modus (door de methode SetSafeMode() aan te roepen) en het instellen van het uitschakelen van de veilige modus (automatisch tijdens de uitvoering van de metadata-objectgebeurtenis handlers of door de methode SetSafeModeDisable() aan te roepen). Wanneer u probeert het nesten te vergroten, wordt er een uitzondering gegenereerd:

// Correct gebruik van ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(waar); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Onjuist gebruik van ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(waar); SetDisableSafeMode(False); // Uitzondering EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Uitzondering EndProcedure

Het programmatisch openen van externe verwerking wordt uitgevoerd met behulp van het globale contextobject ExternalProcessing, dat het type heeft ExterneVerwerkingsmanager. Voor elke bedrijfsmodus van het 1C-platform (reguliere applicatiemodus en beheerde applicatiemodus) worden verschillende objectmethoden gebruikt om met externe verwerking te werken.

Externe verwerking uitvoeren in de normale toepassingsmodus

In een typische toepassing moet u de methode Create() van het object ExternalProcessing gebruiken, waaraan de volledige naam van het externe verwerkingsbestand wordt doorgegeven. De methode retourneert een object van het type Externeverwerking, dit object is de externe verwerking die wordt geopend. Als u een extern verwerkingsformulier moet openen, roep dan de GetForm()-methode aan op het ontvangen object, dat het hoofdformulier retourneert, en roep vervolgens de Open()-methode aan om het te openen.


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

Bij externe verwerking moet het hoofdformulier altijd een normaal formulier zijn, en het gecontroleerde formulier moet altijd een extra formulier zijn, anders werkt de GetForm()-methode niet in de normale toepassingsmodus.

Externe verwerking uitvoeren in beheerde applicatiemodus

In de modus voor beheerde formulieren wordt het algoritme opgedeeld op basis van de uitvoeringscontext. Op de client ontvangen we binaire gegevens met de volledige naam van het externe verwerkingsbestand. Wij dragen de ontvangen binaire gegevens over naar de server en plaatsen deze in tijdelijke opslag. Vervolgens moet u de Connect()-methode van het ExternalProcessing-object aanroepen, waaraan het adres voor tijdelijke opslag wordt doorgegeven. De methode retourneert de naam van de verbonden externe verwerking. We sturen de naam van de externe verwerking terug naar de client, maken een tekenreekspad naar het verwerkingsformulier en gebruiken de OpenForm()-methode om het externe verwerkingsformulier te openen.

&Op server
Functie GetExternalProcessingName(BinaireGegevens)
AdresInTemporaryStorage = PlaatsInTemporaryStorage(BinaireData);
Retourneer ExternalProcessing.Connect (AddressInTemporaryStorage);
Eindfunctie

&OnClient
VolledigeBestandsnaam = ""; // Volledige naam van het externe verwerkingsbestand.
FileData = nieuwe BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Veilige modus voor externe verwerking

De methoden Create() en Connect() van het object ExternalProcessing hebben een binnenkomende parameter SafeMode - een teken dat externe verwerking in de veilige modus is aangesloten. Als de parameter niet is opgegeven, wordt de verbinding in de beveiligde modus tot stand gebracht.
De veilige modus is ontworpen om het systeem te beschermen tegen het uitvoeren van “niet-vertrouwde” programmacode op de server. Potentieel gevaar komt voort uit externe verwerking of programmacode die door de gebruiker wordt ingevoerd voor gebruik in de methoden Run() en Calculate().
In de veilige modus gelden de volgende beperkingen:
  • de bevoorrechte modus wordt geannuleerd als deze is geïnstalleerd;
  • pogingen om de bevoorrechte modus te activeren worden genegeerd;
  • bewerkingen met COM-objecten zijn verboden;
  • het laden en aansluiten van externe componenten is verboden;
  • toegang tot het bestandssysteem is verboden (behalve voor tijdelijke bestanden);
  • Internettoegang is verboden.
Processen die interactief worden geopend, worden niet in de veilige modus uitgevoerd. Daarom wordt aanbevolen om een ​​mechanisme te implementeren voor het openen van externe processors in de veilige modus, evenals op het machtigingsniveau om de gebruiker te verbieden interactief externe processors te openen.
Om de interactieve opening van verwerking te verbieden, is het in alle rollen die aan de gebruiker zijn toegewezen, noodzakelijk om het recht “Interactieve opening van externe verwerking” te verwijderen (zie figuur 1).
Figuur 1. Rechten om externe verwerkingen/rapporten interactief te openen
Het recht "Interactief openen van externe verwerking" heeft geen enkele invloed op het object Externe verwerking.

Het programmatisch openen van externe rapporten is vergelijkbaar met externe verwerking, maar u moet het globale contextobject ExternalReports gebruiken, dat van het type is Externe Rapportmanager.

Feit is dat bij gebruik van de client-serverversie van 1C externe verwerkingen/rapporten worden geopend in de veilige modus, waarin het gebruik van de bevoorrechte modus verboden is. En de bevoorrechte modus wordt heel vaak gebruikt in typische configuraties: het genereren van gedrukte formulieren, verschillende dienstencheques (registratie van uitwisselingen), enz. Als gevolg hiervan ontvangt u, zelfs als u een regulier rapport op het toegangscontrolesysteem gebruikt zonder formulier (standaard wordt het algemene formulier "ReportForm" gebruikt) en aangepaste rapportinstellingen opslaat (in de overeenkomstige map), een foutmelding over onvoldoende toegang rechten op verschillende constanten en sessieparameters die na de regel voor officiële doeleinden worden gebruikt SetPrivilegedMode(True) ;

De “juiste” oplossing zou zijn om externe verwerking en rapporten te verbinden via de BSP “Aanvullende rapporten en verwerking” mechanismen, waarbij de veilige modus wordt uitgeschakeld of machtigingen worden toegevoegd (naar mijn mening vanaf BSP versie 2.2.2.1). Maar als het om de een of andere reden nodig is om externe rapportage-/verwerkingsbestanden te gebruiken, kunt u een clusterbeveiligingsprofiel configureren dat wordt gebruikt als beveiligingsprofiel in de veilige modus voor een specifieke infobase.

Ik wil meteen opmerken dat deze optie niet de voorkeur heeft, maar vanwege verschillende omstandigheden in een dergelijke vereenvoudigde vorm kan worden gebruikt. Ik heb bijvoorbeeld verschillende databases in verschillende steden, een gemeenschappelijke lokale met strikt beperkte rechten, gesloten USB, enz., ergens gebruik ik Accounting 2.0, en ergens 3.0, ik maak bijna alle rapporten met behulp van ACS-tools zonder formulieren, zodat ze geopend in beide versies. Het bijhouden van al deze rapporten voor verschillende versies en verschillende databases is arbeidsintensief en zinloos, omdat Er zijn plannen om over te stappen naar één enkele configuratie en basis...

Laten we een profiel maken.
In de clusterconsole maken we een beveiligingsprofiel aan waarin we de vlaggen instellen "Kan worden gebruikt als beveiligingsprofiel in de Veilige modus" en " in de sectie "Volledige toegang toegestaan:" "naar bevoorrechte modus".

In veel gevallen waarbij gebruik wordt gemaakt van rapportages en eenvoudige verwerking zal deze werkwijze toepasbaar zijn. Voor complexere situaties heeft het geen zin het proces te beschrijven, omdat het wordt beschreven in de documentatie (de mogelijkheid om beveiligingsprofielen te configureren voor specifieke externe bestanden door de hash-hoeveelheid op te geven, enz.).

P.S. Ik dacht dat beveiligingsprofielen alleen functioneren bij gebruik van platform- en serverlicenties op CORP-niveau, maar deze functionaliteit werkt ook op het 1C:Enterprise 8.3-platform (het kan voorwaardelijk PROF worden genoemd, naar analogie met de standaardconfiguraties Basic/PROF/CORP)