Meny
Är gratis
registrering
Hem  /  Problem/ Säkert läge 1s. Pavel Chistov

Säkert läge 1s. Pavel Chistov

Skriv ut (Ctrl + P)

Konfigurationsobjekt

Om det är nödvändigt att använda "otillförlitlig" programkod på servern: extern bearbetning eller programkod angett av användaren för användning i metoderna Kör () och Utvärdera (), kan du använda säkert driftläge.

I säkert läge:

  • Privilegerat läge inställt.
  • Går in i privilegierat läge ignoreras.
  • är förbjudna operationer som leder till användning av externa medel i förhållande till 1C: Enterprise-plattformen (inklusive icke-blockerande analoger av dessa metoder):
  • COM-mekanismer:
    • COM-objekt ();
    • GetCOMObject ();
    • Wrapper HTMLDocument.GetCOMObject ().
  • Ladda externa komponenter:
    • Ladda ExternalComponent ();
    • Anslut extern komponent ().
  • Tillgång till filsystem:
    • ValueInFile ();
    • Kopiera fil ();
    • CombineFiles ();
    • MoveFile ();
    • SplitFile ();
    • Skapa katalog ();
    • Radera filer ();
    • Ny fil;
    • Ny xBase;
    • HTMLWrite.OpenFile ();
    • Läser HTML.OpenFile ();
    • Läs XML.OpenFile ();
    • XMLWrite.OpenFile ();
    • ReadingFastInfoset.OpenFile ();
    • WriteFastInfoset.OpenFile ();
    • CanonicalXMLWriter.OpenFile ();
    • ConversionXSL.LoadFromFile ();
    • WriteZipFile.Open ();
    • Läsa en ZipFile.Open ();
    • NewTextReader (), om den första parametern är en sträng;
    • ReadText.Open () om den första parametern är en sträng;
    • NewWriteText (), om den första parametern är en sträng;
    • WriteText.Open (), om den första parametern är en sträng;
    • NewExtractText ();
    • ändra egenskapen RetrieveText.FileName;
    • ExtractText.Write ();
    • Ny bild (), om den första parametern är en sträng;
    • Picture.Write ();
    • New BinaryData ();
    • BinaryData.Write ();
    • NewDataWrite (), om den första parametern är en sträng;
    • NewReaderData (), det finns den första parametern - en sträng;
    • alla metoder för FileStreamManager-objektet;
    • Ny 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 ().
  • Internetåtkomst:
    • Ny Internetanslutning,
    • Ny Internet Mail,
    • Ny InternetProxy,
    • Ny HTTP-anslutning,
    • Ny FTP Connection.

UPPMÄRKSAMHET! Kastar ett undantag när förbjudna operationer utförs under körning.

Notera. Externa rapporter och bearbetning som öppnas med menyn Arkiv - Öppna körs i säkert läge om användaren inte har administrativa åtkomsträttigheter.

Antalet fel måste vara detsamma som antalet avstängningar. Men om ett säkert läge har aktiverats (en eller flera gånger) inom en procedur eller funktion, men det inte stängdes av, kommer systemet automatiskt att stängas av så många gånger som det fanns ofullständiga påslag i proceduren eller funktionen som skulle övergiven.

Om en procedur eller funktion anropar en metod Ställ in felsäkert läge (falskt) gjort mer än metodanrop Ställ in felsäkert läge (sant) då kommer ett undantag att kastas.

Programvaruinställning för felsäkert läge kan krävas när konfigurationsutvecklaren antar användningen av tredje parts (i förhållande till konfigurationen) programkod, vars tillförlitlighet utvecklaren inte kan garantera. Ett exempel på sådan kod är exekvering av metoderna Execute () och Compute () i de fall där den körbara koden erhålls från världen utanför... I det här fallet är det bra att ställa in säkert läge innan du kör dessa metoder:

// En programkod genereras som bör exekveras // Det är möjligt att koden laddas från Externa källor// eller manuellt inmatad ExecutableCode = GetExecutableCodeFrom OutsideWorld (); // Aktivera felsäkert läge Ställ in felsäkert läge (True); // Exekvera potentiellt farlig kod Execute (Executable Code); // Stäng av felsäkert läge Ställ in felsäkert läge (falskt);

I vissa fall kan inställningarna för säkert läge komma i konflikt med inställningarna för privilegierat läge. Ett exempel på en sådan konflikt är att posta ett dokument som har egenskapen Privileged läge vid postning från inbäddad kod som körs i säkert läge. I det här fallet är privilegierat läge inaktiverat och försök att aktivera det ignoreras. Som ett resultat "kolliderar" kod i det inbäddade språket som "litar" på det aktiverade privilegierade läget med dess frånvaro, vilket leder till fel med icke uppenbara orsaker. För att förhindra en sådan situation inaktiverar 1C: Enterprise-systemet automatiskt det säkra läget för händelsehanterare som är tillgängliga i objektmodulen eller hanterarmodulen, förutsatt att den körbara koden i det inbäddade språket inte finns i konfigurationstillägget. Sådana hanterare markeras på ett speciellt sätt i syntaxhjälpen.

Det ger också möjlighet att inaktivera felsäkert läge från det inbäddade språket (om programkoden från vilken man försöker koppla från inte finns i en konfigurationstillägg). För att inaktivera säkert läge, använd metoden Ställ in felsäkert läge inaktivera ()... Kontrollera att säkert läge är i det här ögonblicket avaktiverad (automatiskt eller genom att anropa en metod), kan du använda metoden GetDisableSafeMode ().

Inom en enda inbäddad språkmetod kan det inte finnas mer än en kapslingsnivå för att ställa in säkert läge (genom att anropa metoden SetSafeMode ()) och inställning för att inaktivera säkert läge (automatiskt under varaktigheten av händelsehanterare av metadataobjekt eller genom att anropa metoden SetDisableSafeMode ()). När man försöker öka häckningen görs ett undantag:

// Korrekt användning Procedur ProcedureName () SetSafeModeDisable (True); Ställ in felsäkert läge (sant); Ställ in felsäkert läge (falskt); Ställ in felsäkert läge inaktiverat (falskt); EndProcedure // Felaktig användning Procedure ProcedureName () SetSafeModeDisable (True); Ställ in felsäkert läge (sant); Ställ in felsäkert läge inaktiverat (falskt); // Exception EndProcedure Procedure ProcedureName () SetSafeMode (True); Ställ in felsäkert läge inaktiverat (falskt); // Exception EndProcedure

När du startar programmet, Ladda upp dokument under vanlig användare felet "Säkert läge är inställt. Användning är förbjuden."

Denna komplexitet uppstår pga inte tillräckliga rättigheter för att starta extern behandling. För att ställa in åtkomsträttigheter, gå till databasen i 1C Enterprise-läge på uppdrag av Administratör och gå till avsnittet Användar- och rättighetsinställningar / Åtkomstgruppsprofiler, klick För att skapa en grupp.

Ange namnet på gruppen och markera rutorna som är tillgängliga för användare av denna grupp av roller -

  • Interaktiv öppning av externa rapporter och processorer
  • Använda ytterligare rapporter och bearbetning

Klicka på Bränn och stäng


Gå tillbaka till menyn Användare och välj från listan den medarbetare som ska arbeta med programmet Ladda ner dokument. Klicka på Behörigheter. Markera den tidigare skapade profilen i listan över profiler. Klicka på Skriv ner.


Det rekommenderas att lägga till Dokumentuppladdning till listan över externa processorer så att användare kan börja bearbeta. För detta i menyn Administration / Utskrift av blanketter och bearbetning / Ytterligare rapporter och bearbetning skapa ny behandling... Bläddra till och namnge filen LoadDocuments.epf. Ange platsen för bearbetningen i menyn varifrån användaren kan starta den i framtiden, välj till exempel menyn Kataloger

Genom att klicka på objektet Snabb åtkomst du anger för vilka av användarna bearbetningen är tillgänglig:


Klicka på efter inställningen Bränn och stäng... För att börja bearbeta behöver användarna bara gå in i databasen igen och öppna den från åtkomstmenyn (i exemplet, Referenser) och klicka på Kör.


Öppna Meny - Alla funktioner ..... och hitta alternativet Säkerhetsprofiler som används i listan.


Det räcker med att avmarkera alternativet "Säkerhetsprofiler används".


Efter det kommer programmet att starta framgångsrikt.

Programmatisk upptäckt extern bearbetning utförs med ExternalProcessing globala kontextobjekt, som har typen External ProcessingManager... För varje driftläge på 1C-plattformen (normalt applikationsläge och hanterat applikationsläge) används olika objektmetoder för att arbeta med extern bearbetning.

Starta extern bearbetning i normalt applikationsläge

V normal tillämpning du måste använda metoden Skapa () för ExternalProcessing-objektet, som skickas med det fullständiga namnet på den externa bearbetningsfilen. Metoden returnerar ett objekt av typen Extern bearbetning, detta objekt är den externa bearbetning som öppnas. Om du behöver öppna ett externt bearbetningsformulär, anropa metoden GetForm () på det resulterande objektet, vilket returnerar huvudformuläret, och anropa sedan metoden Öppna () för att öppna det.


Processing = ExternalProcessing.Create (FullFileName);
Processing.GetForm (). Öppna ();

I externa processorer måste huvudformuläret alltid vara ett vanligt formulär, och det hanterade formuläret måste alltid vara ytterligare ett, annars fungerar inte GetForm ()-metoden i det normala applikationsläget.

Starta extern bearbetning i hanterat applikationsläge

I läget hanterade formulär uppdelningen av algoritmen enligt exekveringskontexten visas. På klienten får vi binära data med det fullständiga namnet på den externa bearbetningsfilen. Vi överför mottagna binära data till servern och lagrar dem tillfälligt. Därefter måste du anropa metoden Connect () för ExternalProcessing-objektet, till vilken adressen till den tillfälliga lagringen skickas. Metoden returnerar namnet på den anslutna externa bearbetningen. Vi returnerar namnet på den externa bearbetningen till klienten, bildar en strängsökväg till bearbetningsformuläret och använder metoden OpenForm () för att öppna det externa bearbetningsformuläret.

&På server
GetExternalProcessingName Function (BinaryData)
AddressToTemporaryStorage = PutToTemporalStore (BinaryData);
Return ExternalProcessing.Connect (AddressInTemporaryStorage);
EndFunction

& OnClient
FullFileName = ""; // Fullständigt namn på den externa bearbetningsfilen.
FileData = New BinaryData (FullFileName);
ExternalProcessingName = GetExternalProcessingName (FileData);
OpenForm ("ExternalProcessing." + ExternalProcessingName + ".Form");

Säkert läge för externa behandlingar

Metoderna Skapa () och Anslut () för ExternalProcessing-objektet har en ingångsparameter SafeMode - ett tecken på anslutning av extern bearbetning i säkert läge. Om parametern inte anges kommer anslutningen att göras i säkert läge.
Säkert läge arbete är utformat för att skydda systemet från att exekvera "otillförlitlig" programkod på servern. Potentiell fara är extern bearbetning eller programkod som angetts av användaren för användning i metoderna Execute () och Calculate ().
Säkert läge har följande begränsningar:
  • privilegierat läge avbryts om det var inställt;
  • försök att gå in i privilegierat läge ignoreras;
  • operationer med COM-objekt är förbjudna;
  • ladda och ansluta externa komponenter är förbjudet;
  • åtkomst till filsystemet nekas (förutom temporära filer);
  • Internetåtkomst nekas.
Bearbetningar som öppnas interaktivt utförs inte i säkert läge, därför rekommenderas att implementera en mekanism för att öppna externa processorer i säkert läge, samt att förhindra att användaren interaktivt öppnar externa processorer på rättighetsnivå.
För att förbjuda interaktiv öppning av bearbetning, i alla roller som tilldelats användaren, måste du ta bort rätten "Öppna extern bearbetning interaktivt" (se figur 1).
Figur 1. Rättigheter till interaktiv öppning av externa bearbetningar/rapporter
Rätten Öppna externa processorer interaktivt påverkar inte ExternalProcessing-objektet på något sätt.

När du öppnar externa rapporter programmatiskt, liknande externa processorer, bör du bara använda External Reports globala kontextobjekt, som har typen ExternalReportManager.

Extern bearbetning öppnas programmatiskt med hjälp av det globala kontextobjektet ExternalProcessing, som har typen External ProcessingManager... För varje driftläge på 1C-plattformen (normalt applikationsläge och hanterat applikationsläge) används olika objektmetoder för att arbeta med extern bearbetning.

Starta extern bearbetning i normalt applikationsläge

I ett typiskt program måste du använda metoden Skapa () för ExternalProcessing-objektet, som skickas med det fullständiga namnet på den externa bearbetningsfilen. Metoden returnerar ett objekt av typen Extern bearbetning, detta objekt är den externa bearbetning som öppnas. Om du behöver öppna ett externt bearbetningsformulär, anropa metoden GetForm () på det resulterande objektet, vilket returnerar huvudformuläret, och anropa sedan metoden Öppna () för att öppna det.


Processing = ExternalProcessing.Create (FullFileName);
Processing.GetForm (). Öppna ();

I externa processorer måste huvudformuläret alltid vara ett vanligt formulär, och det hanterade formuläret måste alltid vara ytterligare ett, annars fungerar inte GetForm ()-metoden i det normala applikationsläget.

Starta extern bearbetning i hanterat applikationsläge

I läget för hanterade formulär visas en uppdelning av algoritmen efter exekveringskontext. På klienten får vi binära data med det fullständiga namnet på den externa bearbetningsfilen. Vi överför mottagna binära data till servern och lagrar dem tillfälligt. Därefter måste du anropa Connect ()-metoden för ExternalProcessing-objektet, till vilken adressen till den tillfälliga lagringen skickas. Metoden returnerar namnet på den anslutna externa bearbetningen. Vi returnerar namnet på den externa bearbetningen till klienten, bildar en strängsökväg till bearbetningsformuläret och använder metoden OpenForm () för att öppna det externa bearbetningsformuläret.

&På server
GetExternalProcessingName Function (BinaryData)
AddressToTemporaryStorage = PutToTemporalStore (BinaryData);
Return ExternalProcessing.Connect (AddressInTemporaryStorage);
EndFunction

& OnClient
FullFileName = ""; // Fullständigt namn på den externa bearbetningsfilen.
FileData = New BinaryData (FullFileName);
ExternalProcessingName = GetExternalProcessingName (FileData);
OpenForm ("ExternalProcessing." + ExternalProcessingName + ".Form");

Säkert läge för externa behandlingar

Metoderna Skapa () och Anslut () för ExternalProcessing-objektet har en ingångsparameter SafeMode - ett tecken på anslutning av extern bearbetning i säkert läge. Om parametern inte anges kommer anslutningen att göras i säkert läge.
Säkert läge är utformat för att skydda systemet från att exekvera "otillförlitlig" programkod på servern. Potentiell fara är extern bearbetning eller programkod som angetts av användaren för användning i metoderna Execute () och Calculate ().
Säkert läge har följande begränsningar:
  • privilegierat läge avbryts om det var inställt;
  • försök att gå in i privilegierat läge ignoreras;
  • operationer med COM-objekt är förbjudna;
  • ladda och ansluta externa komponenter är förbjudet;
  • åtkomst till filsystemet nekas (förutom temporära filer);
  • Internetåtkomst nekas.
Bearbetningar som öppnas interaktivt utförs inte i säkert läge, därför rekommenderas att implementera en mekanism för att öppna externa processorer i säkert läge, samt att förhindra att användaren interaktivt öppnar externa processorer på rättighetsnivå.
För att förbjuda interaktiv öppning av bearbetning, i alla roller som tilldelats användaren, måste du ta bort rätten "Öppna extern bearbetning interaktivt" (se figur 1).
Figur 1. Rättigheter till interaktiv öppning av externa bearbetningar/rapporter
Rätten Öppna externa processorer interaktivt påverkar inte ExternalProcessing-objektet på något sätt.

När du öppnar externa rapporter programmatiskt, liknande externa processorer, bör du bara använda External Reports globala kontextobjekt, som har typen ExternalReportManager.

Faktum är att när du använder klient-serverversionen av 1C-drift, öppnas extern bearbetning / rapporter i säkert läge, där användning av privilegierat läge är förbjudet. Och det privilegierade läget används väldigt ofta i typiska konfigurationer: formation tryckta blanketter, olika officiella kontroller (registrering av börser) m.m. Som ett resultat, även att använda en vanlig rapport om ACS utan ett formulär (som standard används det allmänna formuläret "Rapportformulär") och behålla anpassade inställningar rapport (till motsvarande referens), kommer du att få ett felmeddelande om otillräckliga åtkomsträttigheter till olika konstanter och sessionsparametrar som används för serviceändamål efter raden SetPrivilegedMode (True);

Den "korrekta" lösningen skulle vara att ansluta externa processorer och rapporter genom mekanismerna i BSP:n "Ytterligare rapporter och bearbetning" med inaktivering av felsäkert läge eller lägga till behörigheter (enligt min mening, med BSP-versioner 2.2.2.1). Men om det av någon anledning är nödvändigt att använda exakt externa filer rapporter/bearbetning kan du konfigurera klustersäkerhetsprofilen som används som säkerhetsprofil för säkert läge för en specifik informationsbas.

Jag skulle genast vilja notera att det här alternativet inte är att föredra, men på grund av olika omständigheter kan det användas i en sådan förenklad form. Jag har till exempel flera baser i olika städer, en gemensam lokal sitter ner med strikt begränsade rättigheter, stängd USB osv, någonstans använder jag Accounting 2.0, och någonstans 3.0 gör jag nästan alla rapporter med ACS utan blanketter, så att de öppnas i båda versionerna. Servera alla dessa rapporter för olika versioner och olika baser är en mödosam och hopplös verksamhet, tk. planerna inkluderar en övergång till en enda konfiguration och bas ...

Vi skapar en profil.
Skapa en säkerhetsprofil i klusterkonsolen där vi sätter flaggor "Kan användas som säkerhetsprofil för säkert läge" och "under" Tillåtet full tillgång:" "till privilegierat läge".

I många fall av att använda rapporter och enkla behandlingar den här metoden kommer att gälla. För mer komplexa situationer är det ingen mening att beskriva processen, eftersom det anges i dokumentationen (möjligheten att anpassa säkerhetsprofiler för specifika externa filer genom att ange dess hash, etc.).

P.S. Jag trodde att säkerhetsprofiler endast fungerar när man använder licenser för plattformen och servern på CORP-nivån, men denna funktion är också uppfylld på 1C: Enterprise 8.3-plattformen (villkorligt kan du anropa PROF analogt med typiska konfigurationer Basic / PROF / CORP )