Bezpieczny tryb pracy. Jak dodać zewnętrzny formularz druku lub przetwarzanie 1s 8.2 Nie mogę zainstalować trybu awaryjnego

Wraz z wydaniem platformy 8.3.9.2033 pojawił się nowy mechanizm „Ochrona przed niebezpiecznymi działaniami”.

Dzięki tej innowacji 1C zaczęło teraz przeklinać na początku przetwarzania (i nie tylko):

Ostrzeżenie bezpieczeństwa

Otwiera „Moje przetwarzanie zewnętrzne” z pliku „My_External_Processing.epf”

Zaleca się zwrócić uwagę na źródło, z którego uzyskano ten plik. Jeśli nie ma porozumienia ze źródłem w sprawie opracowania dodatkowych modułów lub istnieją wątpliwości co do zawartości pliku, nie zaleca się jego otwierania, ponieważ może to zaszkodzić komputerowi i danym.

Pozwolić mi otworzyć ten plik?

Dlatego 1C postanowiło walczyć ze złośliwym kodem!

Skąd w przedsiębiorstwie będzie pochodził ten „złośliwy kod”, wciąż pozostaje tajemnicą)

Potencjalnie niebezpieczne działania obejmowały:

  • Ładowanie zewnętrznego raportu, rozszerzenie przetwarzania lub konfiguracji.
  • Ładowanie lub aktualizacja konfiguracji/rozszerzenia.
  • Dostęp z zewnętrznego raportu/procesora lub rozszerzenia do następujących możliwości:
  • Wykonywanie polecenia systemu operacyjnego.
  • Zarządzanie użytkownikami (zapisywanie lub usuwanie informacji o użytkowniku bazy danych).
  • Wywołanie metody Connect() menedżera przetwarzania zewnętrznego (raporty).
  • Wywołanie metody ExtendConfiguration.Write().
  • Praca z obiektami COM.

Jak wyłączyć ten „cud”?

Aby to zrobić, musisz uruchomić 1C Enterprise w trybie konfiguratora.
Wybierz menu „Administracja” - „Użytkownicy”.
W oknie, które otwiera się dla naszych użytkowników, należy otworzyć okno ustawień użytkownika i odznaczyć zakładkę „Podstawowe”. „Ochrona przed niebezpiecznymi działaniami”

Istnieją inne sposoby wyłączenia tej opcji:

Można teraz określić listę baz danych, podczas pracy z którymi ochrona przed niebezpiecznymi działaniami będzie wyłączona.
Funkcja ta odpowiada za parametr DisableUnsafeActionProtection w pliku conf.cfg, który umożliwia wyłączenie mechanizmu ochrony przed niebezpiecznymi działaniami dla wszystkich użytkowników określonych baz danych, których ciągi połączeń odpowiadają maskom określonym w parametrze DisableUnsafeActionProtection.

W tym parametrze możesz określić kilka masek oddzielonych symbolem „;”, na przykład:

DisableUnsafeActionProtection=test_.*;etap_.*;

Dodatkowo ochronę przed niebezpiecznymi działaniami użytkownika można wyłączyć programowo, dla czego dostępne są następujące parametry i właściwości:

  • Ochrona parametrów przed niebezpiecznymi działaniami metod Connect() zewnętrznych menedżerów przetwarzania (raportów).
  • Właściwość Ochrona przed niebezpiecznymi działaniami obiektu rozszerzenia konfiguracji przed wywołaniem metody Write() tego obiektu.

Sprawdzanie konieczności stosowania zabezpieczenia przed niebezpiecznymi działaniami przeprowadza się w następującej kolejności:

1. Jeśli pole wyboru „Ochrona przed niebezpiecznymi działaniami” bieżącego użytkownika jest odznaczone, ochrona jest uważana za wyłączona.

2. Jeśli ciąg połączenia z bazą danych jest zgodny z jednym ze wzorców określonych w parametrze DisableUnsafeActionProtection w pliku conf.cfg, ochrona jest uważana za wyłączoną.

3. Jeżeli ochrona jest wyraźnie wyłączona przy użyciu parametru Ochrona przed niebezpiecznymi działaniami w ramach zewnętrznego przetwarzania lub raportu.

4. Jeśli ochrona jest wyraźnie wyłączona przy użyciu właściwości rozszerzenia Ochrona przed niebezpiecznymi działaniami.

Drukuj (Ctrl+P)

Obiekty konfiguracyjne

W przypadku konieczności wykorzystania na serwerze „niezaufanego” kodu programu: przetwarzania zewnętrznego lub kodu programu wprowadzonego przez użytkownika do wykorzystania w metodach Run() i Calculate(), można skorzystać z bezpiecznego trybu pracy.

W trybie awaryjnym:

  • Tryb uprzywilejowany odwołany.
  • Przełączanie do trybu uprzywilejowanego ignorowane.
  • Zabroniony operacje prowadzące do wykorzystania środków zewnętrznych w stosunku do platformy 1C:Enterprise (w tym nieblokujące analogi określonych metod):
  • Mechanizmy COM:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Ładowanie komponentów zewnętrznych:
    • Załaduj komponent zewnętrzny();
    • PołączKomponent Zewnętrzny().
  • Dostęp do systemu plików:
    • WartośćWPliku();
    • Skopiować plik();
    • Połącz pliki();
    • PrzenieśPlik();
    • Podział pliku();
    • Utworzyć katalog();
    • Usuń pliki();
    • Nowy plik;
    • Nowy xBase;
    • EntryHTML.OpenFile();
    • CzytajHTML.OpenFile();
    • CzytajXML.OpenFile();
    • ZapiszXML.OpenFile();
    • OdczytFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • CzytanieZipFile.Open();
    • New ReadText(), jeśli pierwszym parametrem jest ciąg znaków;
    • ReadText.Open(), jeśli pierwszy parametr jest ciągiem znaków;
    • NewTextRecord(), jeśli pierwszy parametr jest ciągiem znaków;
    • WriteText.Open(), jeśli pierwszy parametr jest ciągiem znaków;
    • NowyWyciąg Tekstu();
    • zmiana właściwości ExtractText.FileName;
    • WyodrębnijTekst.Zapisz();
    • New Picture(), jeśli pierwszym parametrem jest ciąg znaków;
    • Obraz.Zapisz();
    • noweDaneBinowe();
    • BinaryData.Write();
    • NewDataRecord(), jeśli pierwszy parametr jest ciągiem znaków;
    • New ReadData(), znajduje się pierwszy parametr - string;
    • wszystkie metody obiektu FileStreamManager;
    • Nowy strumień pliku();
    • Sformatowany dokument.Write();
    • Schemat geograficzny.Read();
    • Schemat geograficzny.Write();
    • Schemat geograficzny.Drukuj();
    • Dokument tabelaryczny.Read();
    • Dokument tabelaryczny.Write();
    • Dokument tabelaryczny.Drukuj(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • Dokument tekstowy.Read();
    • Dokument tekstowy. Zapis().
  • Dostęp do Internetu:
    • Nowe połączenie internetowe,
    • Nowa poczta internetowa,
    • Nowy internetowy serwer proxy,
    • Nowe połączenie HTTP,
    • Nowe połączenie FTP.

UWAGA! Podczas wykonywania zabronionych operacji w czasie wykonywania zgłaszany jest wyjątek.

Notatka. Zewnętrzne raporty i przetwarzanie otwierane za pomocą menu Plik - Otwórz są wykonywane w trybie awaryjnym, jeśli użytkownik nie posiada uprawnień administracyjnych.

Liczba włączeń trybu awaryjnego musi odpowiadać liczbie jego wyłączeń. Jeśli jednak tryb awaryjny został włączony w ramach procedury lub funkcji (raz lub więcej), ale nie został wyłączony, system zostanie automatycznie zamknięty tyle razy, ile razy w procedurze lub funkcji pozostały niepełne włączenia.

Jeśli w procedurze lub funkcji wywołuje metodę Ustaw tryb awaryjny (fałsz) wykonało więcej niż tylko wywołania metod Ustaw tryb awaryjny (prawda), wówczas zostanie zgłoszony wyjątek.

Instalacja oprogramowania w trybie awaryjnym może być wymagana w przypadku, gdy twórca konfiguracji zamierza wykorzystać (w związku z konfiguracją) kod programu strony trzeciej, którego niezawodności programista nie może zagwarantować. Przykładem takiego kodu jest wykonanie metod Execute() i Compute() w przypadku uzyskania kodu wykonywalnego ze świata zewnętrznego. W takim przypadku dobrą praktyką byłoby ustawienie trybu awaryjnego przed wykonaniem poniższych metod:

// Generowany jest kod programu, który należy wykonać // Możliwe jest, że kod został załadowany ze źródeł zewnętrznych // lub wprowadzony ręcznie ExecutableCode = GetExecutedCodeFromExternalWorld(); // Włącz tryb awaryjny SetSafeMode(True); // Wykonaj potencjalnie niebezpieczny kod Execute(ExecutableCode); // Wyłącz tryb awaryjny SetSafeMode(False);

W niektórych przypadkach ustawienia trybu awaryjnego mogą powodować konflikt z ustawieniami trybu uprzywilejowanego. Przykładem takiego konfliktu jest wysłanie dokumentu, dla którego ustawiono właściwość Tryb uprzywilejowany podczas wysyłania, z kodu w języku wbudowanym, który jest wykonywany w trybie awaryjnym. W takim przypadku tryb uprzywilejowany jest wyłączony, a próby jego włączenia są ignorowane. W rezultacie kod w języku osadzonym, który „liczy” na włączony tryb uprzywilejowany, „napotyka” jego brak, co prowadzi do błędów o nieoczywistych przyczynach ich pojawienia się. Aby zapobiec takiej sytuacji, system 1C:Enterprise automatycznie wyłącza tryb awaryjny dla procedur obsługi zdarzeń dostępnych w module obiektowym lub module menedżera, pod warunkiem, że kod wykonywalny w wbudowanym języku nie znajduje się w rozszerzeniu konfiguracyjnym. Takie procedury obsługi są w specjalny sposób zaznaczane w asystencie składni.

Zapewnia także możliwość wyłączenia trybu awaryjnego z wbudowanego języka (jeśli kod programu, który próbuje go wyłączyć, nie znajduje się w rozszerzeniu konfiguracyjnym). Aby wyłączyć tryb awaryjny, istnieje metoda UstawWyłączSafeMode(). Możesz sprawdzić, czy tryb awaryjny jest obecnie wyłączony (automatycznie lub wywołując metodę), korzystając z metody GetDisableSafeMode().

W ramach jednej metody w języku wbudowanym nie może występować więcej niż jeden poziom zagnieżdżenia ustawienia trybu awaryjnego (poprzez wywołanie metody SetSafeMode()) oraz ustawienia wyłączenia trybu bezpiecznego (automatycznie podczas wykonywania zdarzenia obiektu metadanych obsługi lub wywołując metodę SetSafeModeDisable()). Podczas próby zwiększenia zagnieżdżenia zgłaszany jest wyjątek:

// Poprawne użycie proceduryProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(Fałsz); SetDisableSafeMode (fałsz); EndProcedure // Niepoprawne użycie proceduryProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode (fałsz); // Wyjątek EndProcedure ProceduraProcedureName() SetSafeMode(True); SetDisableSafeMode(False); //Procedura końcowa wyjątku

Po uruchomieniu programu do przesyłania dokumentów jako zwykły użytkownik pojawia się błąd „Ustawiono tryb awaryjny. Operacja jest zabroniona”.

Trudność ta pojawia się, ponieważ Nie ma wystarczających uprawnień, aby rozpocząć przetwarzanie zewnętrzne. Aby skonfigurować prawa dostępu, zaloguj się do bazy danych w trybie 1C Enterprise w imieniu Administrator i przejdź do działu Ustawienia użytkowników i uprawnień / Profile grup dostępu, Kliknij Aby utworzyć grupę.

Wpisz nazwę grupy i zaznacz pola przy rolach dostępnych dla użytkowników tej grupy -

  • Interaktywne otwieranie raportów zewnętrznych i ich przetwarzanie
  • Korzystanie z dodatkowych raportów i przetwarzania

Kliknij Zapisz i zamknij


Wróć do menu Użytkownicy i wybierz z listy pracownika, który będzie współpracował z programem Przesyłania Dokumentów. Kliknij Uprawnienia. Na liście profili wybierz wcześniej utworzony profil. Kliknij Zanotować.


Aby użytkownicy mogli rozpocząć przetwarzanie, zaleca się dodanie Ładowania dokumentu do listy przetwarzania zewnętrznego. Aby to zrobić w menu Administracja / Druki i przetwarzanie / Dodatkowe raporty i przetwarzanie utwórz nowe przetwarzanie. Podaj ścieżkę do pliku „Pobierz dokumenty.epf” i nadaj mu nazwę. Określ lokalizację przetwarzania w menu, skąd użytkownik może je później uruchomić, np. wybierając menu Katalogi

Klikając na pozycję Szybki dostęp, wskazujesz, którzy użytkownicy mają dostęp do przetwarzania:


Po ustawieniu kliknij Zapisz i zamknij. Aby rozpocząć przetwarzanie wystarczy ponownie wejść do bazy danych i otworzyć ją z menu dostępu (w przykładzie - Katalogi) i kliknąć Wykonać.


otwarty Menu - Wszystkie funkcje.... i znajdź na liście opcję „Używane są profile zabezpieczeń”.


Po prostu odznacz opcję „Używane są profile zabezpieczeń”.


Następnie program uruchomi się pomyślnie.

Programowe otwarcie przetwarzania zewnętrznego odbywa się za pomocą obiektu kontekstu globalnego OutsideProcessing, który ma typ Zewnętrzny menedżer przetwarzania. Dla każdego trybu działania platformy 1C (tryb zwykłej aplikacji i tryb aplikacji zarządzanej) do pracy z przetwarzaniem zewnętrznym stosowane są różne metody obiektowe.

Uruchamianie przetwarzania zewnętrznego w normalnym trybie aplikacji

W typowej aplikacji należy użyć metody Create() obiektu OutsideProcessing, do której przekazywana jest pełna nazwa pliku przetwarzania zewnętrznego. Metoda zwraca obiekt typu Przetwarzanie zewnętrzne, ten obiekt jest otwieranym przetwarzaniem zewnętrznym. Jeśli potrzebujesz otworzyć formularz przetwarzania zewnętrznego, to wywołaj na odebranym obiekcie metodę GetForm(), która zwróci formularz główny, a następnie wywołaj metodę Open() w celu jego otwarcia.


Przetwarzanie = OutsideProcessing.Create(FullFileName);
Przetwarzanie.GetForm().Open();

W przetwarzaniu zewnętrznym formularz główny musi być zawsze formularzem zwykłym, a formularz kontrolowany zawsze musi być formularzem dodatkowym, w przeciwnym razie metoda GetForm() nie będzie działać w normalnym trybie aplikacji.

Uruchamianie przetwarzania zewnętrznego w trybie aplikacji zarządzanej

W trybie formularzy zarządzanych algorytm jest dzielony według kontekstu wykonania. Na kliencie otrzymujemy dane binarne z wykorzystaniem pełnej nazwy zewnętrznego pliku przetwarzającego. Otrzymane dane binarne przesyłamy na serwer i umieszczamy w magazynie tymczasowym. Następnie należy wywołać metodę Connect() obiektu OutsideProcessing, do której przekazywany jest adres magazynu tymczasowego. Metoda zwraca nazwę podłączonego przetwarzania zewnętrznego. Zwracamy klientowi nazwę przetwarzania zewnętrznego, tworzymy ciąg znaków do formularza przetwarzania i za pomocą metody OpenForm() otwieramy formularz przetwarzania zewnętrznego.

&Na serwerze
Funkcja GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Zwróć externalProcessing.Connect(AddressInTemporaryStorage);
Funkcja końcowa

&Na kliencie
PełnaNazwaPliku = ""; // Pełna nazwa zewnętrznego pliku przetwarzania.
FileData = nowe BinaryData(FullFileName);
OutsideProcessingName = GetExternalProcessingName(FileData);
OpenForm("Przetwarzanie zewnętrzne." + NazwaPrzetwarzania zewnętrznego + ".Form");

Tryb awaryjny do przetwarzania zewnętrznego

Metody Create() i Connect() obiektu OutsideProcessing posiadają przychodzący parametr SafeMode - znak podłączenia zewnętrznego przetwarzania w trybie awaryjnym. Jeżeli parametr nie zostanie określony, połączenie zostanie nawiązane w trybie bezpiecznym.
Tryb awaryjny ma na celu ochronę systemu przed wykonaniem „niezaufanego” kodu programu na serwerze. Potencjalne zagrożenie wynika z zewnętrznego przetwarzania lub kodu programu wprowadzonego przez użytkownika do użycia w metodach Run() i Calculate().
Tryb awaryjny nakłada następujące ograniczenia:
  • tryb uprzywilejowany zostaje anulowany, jeśli został zainstalowany;
  • próby wejścia w tryb uprzywilejowany są ignorowane;
  • operacje na obiektach COM są zabronione;
  • ładowanie i podłączanie komponentów zewnętrznych jest zabronione;
  • dostęp do systemu plików jest zabroniony (z wyjątkiem plików tymczasowych);
  • Dostęp do Internetu jest zabroniony.
Procesy otwierane interaktywnie nie są wykonywane w trybie awaryjnym, dlatego zaleca się wdrożenie mechanizmu otwierania zewnętrznych procesorów w trybie awaryjnym, a także na poziomie uprawnień uniemożliwiającym użytkownikowi interaktywne otwieranie procesorów zewnętrznych.
Aby zabronić interaktywnego otwierania przetwarzania, we wszystkich rolach przypisanych użytkownikowi, należy usunąć uprawnienie „Interaktywne otwieranie przetwarzania zewnętrznego” (patrz rysunek 1).
Rysunek 1. Prawa do interaktywnego otwierania zewnętrznych procesów/raportów
Uprawnienie „Interaktywne otwarcie przetwarzania zewnętrznego” nie wpływa w żaden sposób na obiekt Przetwarzania zewnętrznego.

Programowe otwieranie raportów zewnętrznych jest podobne do przetwarzania zewnętrznego, z tą różnicą, że należy użyć obiektu kontekstu globalnego OutsideReports, który ma typ Menedżer raportów zewnętrznych.

Na przykładzie „Trade Management 11.3” rozważymy prosty proces podłączenia zewnętrznego formularza drukującego. Rozważymy także cechy nowego systemu bezpieczeństwa.

Szybkie przejście

Działania wstępne

Najpierw powinieneś włączyć funkcjonalność lub sprawdź jego dostępność

1. Zaloguj się z pełnymi uprawnieniami do bazy informacyjnej.

2. Przejdź do menu „Dane podstawowe i administracja”/Blok „Administracja”/Polecenie „Formularze drukowane, raporty i przetwarzanie”.

Dodatek

W sekcji, która zostanie otwarta:

Przetwarzanie dodajemy za pomocą przycisku „Utwórz” (to ważne) lub „Aktualizuj!” istniejący:

  • Wybierz go z listy (jeśli nie jest zaznaczony lub jest pusty, polecenie nie zadziała, ale nic nie powie).
  • Kliknij przycisk „Załaduj z pliku”.

Po pojawieniu się 1C w przetwarzaniu zewnętrznym kontrole bezpieczeństwa pojawiły się w nowych konfiguracjach.

Należy instalować wyłącznie przetwarzanie stworzone samodzielnie lub otrzymane znanymi kanałami komunikacji (nie z poczty, tylko ze strony internetowej z ważnym certyfikatem lub dostarczone przez pracowników dewelopera, potwierdzone przez niego telefonicznie).

Jeśli programista przepisuje wszystko w przetwarzaniu, zostanie ustawione „Umieszczenie” - pojawią się obiekty, których dotyczyć będzie przetwarzanie, pojawią się polecenia.
Aby rozpocząć pracę, kliknij „Zapisz i zamknij”.

Badanie

Bezpośrednio po tym, w zależności od rodzaju zabiegu:

  • Wydrukowany formularz staje się dostępny w momencie otwarcia dokumentu lub z jego listy (w przypadku już otwartego przy ponownym otwarciu) po kliknięciu przycisku „Drukuj”.
  • Przetwarzanie dostępne jest w sekcjach „Przetwarzanie dodatkowe” w każdym podsystemie
  • Przetwarzanie wypełnienia za pomocą przycisku „Wypełnij” znajdującego się na liście lub z głównego panelu poleceń formularza obiektowego.

W przypadku powyższego przetwarzania uruchomienie będzie wyglądać następująco:

Jeżeli dokument jest nowy należy go spisać; zewnętrzny mechanizm przetwarzania ostrzeże Cię o tym:

Dalsze zachowanie zależy od wbudowanej funkcjonalności: możliwe jest otwarcie formularza lub po prostu przetworzenie danych.

Ostrzeżenia dotyczące bezpieczeństwa w 1C

Nowe wydania i konfiguracje platform zapewniają lepszą ochronę przed uruchamianiem szkodliwych programów.

Przetwarzanie może spowodować załadowanie programu Excel, w takim przypadku nowy podsystem zabezpieczeń wyświetli również ostrzeżenie:

W tym przypadku kod obsługi zostaje przerwany.

Jeśli klikniesz „Tak”, system poprosi Cię o ponowne uruchomienie polecenia:

Użytkownik bazy danych ma możliwość wyłączenia ochrony przed niebezpiecznymi działaniami za pomocą „Konfiguratora”:

Nie można tego zmienić z trybu „Enterprise”, być może zrobiono to celowo i może pojawić się po aktualizacji.

Należy również zaznaczyć, że jeśli przetwarzanie wykorzystuje Excel, musi działać w trybie niebezpiecznym (tak było przed wprowadzeniem nowego systemu, działa to równolegle):

„Nie można załadować MS EXCEL!!!” „Ustawiono tryb awaryjny. Operacja jest zabroniona”

W przetwarzaniu zewnętrznym wygląda to tak:

Programista powinien ustawić go na „False” w opisie wewnętrznego przetwarzania, wtedy wszystko będzie dobrze:

Funkcja InformationOnExternalProcessing() ExportRegistrationParameters = Nowa struktura; Parametry rejestracji.Insert("SafeMode", False);

Podczas aktualizacji konfiguracji pojawił się także komunikat ostrzegawczy o źródle, z którego uzyskano plik konfiguracyjny: