Mod selamat ditetapkan kepada pertukaran xml universal. Mod selamat ditetapkan. Operasi adalah dilarang. Mod selamat untuk pemprosesan luaran

Menggunakan "Pengurusan Perdagangan 11.3" sebagai contoh, kami akan mempertimbangkan proses mudah untuk menyambungkan borang percetakan luaran. Kami juga akan mempertimbangkan ciri-ciri sistem keselamatan baharu.

Laluan pantas

Tindakan awal

Pertama anda sepatutnya membolehkan kefungsian atau semak ketersediaannya

1. Log masuk dengan hak penuh ke pangkalan data maklumat.

2. Pergi ke menu “Data induk dan pentadbiran”/Sekat “Pentadbiran”/Perintah “Borang, laporan dan pemprosesan yang dicetak”.

Penambahan

Dalam bahagian yang terbuka:

Kami menambah pemprosesan menggunakan butang "Buat" (ini penting) atau "Kemas kini!" sedia ada:

  • Pilihnya dalam senarai (jika tidak dipilih atau kosong, arahan tidak akan berfungsi, tetapi tidak akan mengatakan apa-apa).
  • Klik butang "Muat dari fail".

Selepas penampilan 1C dalam pemprosesan luaran, semakan keselamatan muncul dalam konfigurasi baharu.

Anda harus memasang hanya pemprosesan yang dibuat secara bebas atau diterima melalui saluran komunikasi yang diketahui (bukan daripada mel, hanya dari tapak web dengan sijil yang sah, atau disediakan oleh pekerja pembangun, yang disahkan olehnya melalui telefon).

Jika segala-galanya dalam pemprosesan ditetapkan oleh pembangun, maka "Peletakan" akan ditetapkan - objek di mana pemprosesan akan terlibat, arahan (s) akan muncul.
Untuk bekerja, cuma klik "Simpan dan tutup".

Peperiksaan

Sejurus selepas ini, bergantung kepada jenis rawatan:

  • Borang yang dicetak menjadi tersedia apabila membuka dokumen atau daripada senarainya (untuk yang telah dibuka apabila membukanya semula) dengan mengklik butang "Cetak".
  • Pemprosesan tersedia dalam bahagian "Pemprosesan Tambahan" dalam setiap subsistem
  • Pemprosesan pengisian menggunakan butang "Isi" senarai atau panel arahan utama borang objek.

Untuk pemprosesan di atas, pelancaran akan kelihatan seperti ini:

Jika dokumen itu baharu, ia harus ditulis; mekanisme pemprosesan luaran akan memberi amaran kepada anda tentang perkara ini:

Tingkah laku selanjutnya bergantung pada fungsi terbina dalam: adalah mungkin untuk membuka borang atau hanya memproses data.

Amaran keselamatan dalam 1C

Keluaran dan konfigurasi platform baharu telah meningkatkan perlindungan terhadap pelancaran program berniat jahat.

Pemprosesan boleh menyebabkan Excel dilancarkan untuk dimuatkan, dalam hal ini subsistem keselamatan baharu juga akan memberi amaran kepada anda:

Dalam kes ini, kod pengendali terganggu.

Jika anda mengklik "Ya", sistem akan meminta anda untuk menjalankan arahan sekali lagi:

Pengguna pangkalan maklumat boleh melumpuhkan perlindungan daripada tindakan berbahaya melalui "Konfigurator":

Ini tidak boleh ditukar daripada mod "Enterprise", mungkin ini dilakukan dengan sengaja, dan ia mungkin muncul selepas kemas kini.

Perlu diingatkan juga bahawa jika pemprosesan menggunakan Excel, ia mesti dijalankan dalam mod tidak selamat (ini berlaku sebelum pengenalan sistem baharu, ini berfungsi secara selari):

"Tidak dapat memuatkan MS EXCEL!!!" “Mod selamat telah ditetapkan. Operasi itu dilarang"

Dalam pemprosesan luaran ia kelihatan seperti ini:

Pembangun harus menetapkannya kepada "Salah" dalam perihalan pemprosesan dalaman, maka semuanya akan baik-baik saja:

Fungsi InformationOnExternalProcessing() ExportRegistrationParameters = Struktur Baharu; Parameter Pendaftaran.Insert("SafeMode", False);

Apabila mengemas kini konfigurasi, teks amaran juga muncul tentang sumber dari mana fail konfigurasi diperoleh:

Hakikatnya ialah apabila menggunakan versi pelayan pelanggan 1C, pemprosesan/laporan luaran dibuka dalam mod selamat, di mana penggunaan mod istimewa adalah dilarang. Dan mod istimewa digunakan sangat kerap dalam konfigurasi biasa: penjanaan borang bercetak, pelbagai pemeriksaan perkhidmatan (pendaftaran pertukaran), dll. Akibatnya, walaupun menggunakan laporan biasa pada sistem kawalan akses tanpa borang (secara lalai, borang umum "ReportForm" digunakan) dan menyimpan tetapan laporan tersuai (dalam direktori yang sepadan), anda akan menerima ralat tentang akses yang tidak mencukupi hak kepada pelbagai pemalar dan parameter sesi yang digunakan untuk tujuan rasmi selepas talian SetPrivilegedMode(Benar) ;

Penyelesaian yang "betul" adalah untuk menyambungkan pemprosesan dan laporan luaran melalui mekanisme "Laporan dan pemprosesan tambahan" BSP dengan melumpuhkan mod selamat atau menambah kebenaran (pada pendapat saya, daripada BSP versi 2.2.2.1). Tetapi jika atas sebab tertentu adalah perlu untuk menggunakan fail pelaporan/pemprosesan luaran, maka anda boleh mengkonfigurasi profil keselamatan kelompok yang digunakan sebagai profil keselamatan mod selamat untuk pangkalan maklumat tertentu.

Saya ingin segera ambil perhatian bahawa pilihan ini tidak lebih baik, tetapi disebabkan oleh pelbagai keadaan ia boleh digunakan dalam bentuk yang dipermudahkan. Sebagai contoh, saya mempunyai beberapa pangkalan data di bandar yang berbeza, tempatan biasa dengan hak terhad, USB tertutup, dsb., di suatu tempat saya menggunakan Perakaunan 2.0, dan di suatu tempat 3.0, saya membuat hampir semua laporan menggunakan alat ACS tanpa borang, supaya ia dibuka dalam kedua-dua versi. Mengekalkan semua laporan ini untuk versi yang berbeza dan pangkalan data yang berbeza adalah intensif buruh dan sia-sia, kerana Terdapat rancangan untuk bertukar kepada satu konfigurasi dan pangkalan...

Mari buat profil.
Dalam konsol kluster, kami mencipta profil keselamatan di mana kami menetapkan bendera "Boleh digunakan sebagai profil keselamatan Mod Selamat" dan " dalam bahagian "Akses penuh dibenarkan:" "ke mod istimewa".

Dalam kebanyakan kes menggunakan laporan dan pemprosesan mudah, kaedah ini akan digunakan. Untuk situasi yang lebih kompleks, tidak ada gunanya menerangkan proses itu, kerana ia digariskan dalam dokumentasi (keupayaan untuk mengkonfigurasi profil keselamatan untuk fail luaran tertentu dengan menentukan jumlah cincangnya, dsb.).

P.S. Saya berpendapat bahawa profil keselamatan berfungsi hanya apabila menggunakan lesen platform dan pelayan di peringkat CORP, tetapi fungsi ini juga berfungsi pada platform 1C:Enterprise 8.3 (ia boleh dipanggil PROF secara bersyarat, dengan analogi dengan konfigurasi standard Asas/PROF/CORP)

Cetak (Ctrl+P)

Objek Konfigurasi

Jika perlu menggunakan kod program "tidak dipercayai" pada pelayan: pemprosesan luaran atau kod program yang dimasukkan oleh pengguna untuk digunakan dalam kaedah Run() dan Calculate(), anda boleh menggunakan mod pengendalian selamat.

Dalam mod selamat:

  • Mod istimewa dibatalkan.
  • Bertukar kepada mod istimewa diabaikan.
  • dilarang operasi yang membawa kepada penggunaan cara luaran berhubung dengan platform 1C:Enterprise (termasuk analog bukan penyekat kaedah yang ditentukan):
  • Mekanisme COM:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Memuatkan komponen luaran:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Akses sistem fail:
    • ValueInFile();
    • CopyFile();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • DeleteFiles();
    • Fail Baharu;
    • xBase baharu;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText(), jika parameter pertama ialah rentetan;
    • ReadText.Open(), jika parameter pertama ialah rentetan;
    • NewTextRecord(), jika parameter pertama ialah rentetan;
    • WriteText.Open(), jika parameter pertama ialah rentetan;
    • NewTextExtract();
    • menukar harta ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), jika parameter pertama ialah rentetan;
    • Picture.Write();
    • new BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), jika parameter pertama ialah rentetan;
    • New ReadData(), terdapat parameter pertama - rentetan;
    • semua kaedah objek FileStreamManager;
    • Aliran Fail Baharu();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Akses internet:
    • Sambungan Internet Baharu,
    • InternetMail baharu,
    • InternetProxy baharu,
    • Sambungan HTTP Baharu,
    • FTPConnection baharu.

PERHATIAN! Apabila melakukan operasi yang dilarang, pengecualian dilemparkan pada masa jalan.

Catatan. Laporan dan pemprosesan luaran dibuka menggunakan menu Fail - Buka dilaksanakan dalam mod selamat jika pengguna tidak mempunyai hak akses pentadbiran.

Bilangan kali mod selamat dihidupkan mesti sepadan dengan bilangan kali ia dimatikan. Walau bagaimanapun, jika mod selamat dihidupkan dalam prosedur atau fungsi (sekali atau lebih), tetapi tidak dimatikan, sistem akan dimatikan secara automatik seberapa banyak kali kerana terdapat menghidupkan yang tidak lengkap dalam prosedur atau fungsi yang ditinggalkan.

Jika dalam prosedur atau fungsi memanggil kaedah SetSafeMode(Salah) dibuat lebih daripada panggilan kaedah SetSafeMode(Benar), maka pengecualian akan dilemparkan.

Pemasangan perisian mod selamat mungkin diperlukan dalam kes apabila pembangun konfigurasi berhasrat untuk menggunakan kod program pihak ketiga (berkaitan dengan konfigurasi), kebolehpercayaan yang tidak dapat dijamin oleh pembangun. Contoh kod tersebut ialah pelaksanaan kaedah Execute() dan Compute() dalam kes di mana kod boleh laku diperolehi dari dunia luar. Dalam kes ini, amalan yang baik ialah menetapkan Mod Selamat sebelum melaksanakan kaedah ini:

// Kod program dijana yang harus dilaksanakan // Ada kemungkinan kod tersebut dimuatkan daripada sumber luaran // atau dimasukkan secara manual ExecutableCode = GetExecutedCodeFromExternalWorld(); // Dayakan mod selamat SetSafeMode(True); // Laksanakan kod yang berpotensi berbahaya Laksanakan(ExecutableCode); // Matikan mod selamat SetSafeMode(False);

Dalam sesetengah kes, tetapan Mod Selamat mungkin bercanggah dengan tetapan Mod Privilege. Contoh konflik sedemikian ialah penyiaran dokumen yang mana mod Privileged semasa menyiarkan harta ditetapkan, daripada kod dalam bahasa terbina dalam yang dilaksanakan dalam mod selamat. Dalam kes ini, mod keistimewaan dilumpuhkan dan percubaan untuk mendayakannya diabaikan. Akibatnya, kod dalam bahasa terbenam, yang "berkira" pada mod istimewa yang didayakan, "menghadapi" ketiadaannya, yang membawa kepada ralat dengan sebab yang tidak jelas untuk penampilannya. Untuk mengelakkan situasi ini, sistem 1C:Enterprise menyahdayakan mod selamat secara automatik untuk pengendali acara yang tersedia dalam modul objek atau modul pengurus, dengan syarat kod boleh laku dalam bahasa terbina dalam tidak terletak dalam sambungan konfigurasi. Pengendali sedemikian ditanda dengan cara yang istimewa dalam pembantu sintaks.

Ia juga menyediakan keupayaan untuk melumpuhkan Mod Selamat daripada bahasa terbina dalam (jika kod program yang cuba untuk melumpuhkannya tiada dalam sambungan konfigurasi). Untuk melumpuhkan mod selamat terdapat kaedah SetDisableSafeMode(). Anda boleh menyemak bahawa mod selamat dilumpuhkan pada masa ini (secara automatik atau dengan memanggil kaedah) menggunakan kaedah tersebut GetDisableSafeMode().

Dalam satu kaedah dalam bahasa terbina dalam, tidak boleh ada lebih daripada satu tahap penetapan mod selamat (dengan memanggil kaedah SetSafeMode()) dan menetapkan pelumpuhan mod selamat (secara automatik semasa pelaksanaan peristiwa objek metadata pengendali atau dengan memanggil kaedah SetSafeModeDisable()). Apabila cuba meningkatkan sarang, pengecualian dilemparkan:

// Penggunaan ProcedureProcedureName() SetDisableSafeMode(True) yang betul; SetSafeMode(benar); SetSafeMode(Salah); SetDisableSafeMode(False); EndProcedure // Penggunaan ProcedureProcedureName() SetDisableSafeMode(True) yang salah; SetSafeMode(benar); SetDisableSafeMode(False); // Exception EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Exception EndProcedure

Pembukaan pemrograman pemprosesan luaran dijalankan menggunakan objek konteks global ExternalProcessing, yang mempunyai jenis ExternalProcessingManager. Untuk setiap mod pengendalian platform 1C (mod aplikasi biasa dan mod aplikasi terurus), kaedah objek berbeza digunakan untuk berfungsi dengan pemprosesan luaran.

Menjalankan pemprosesan luaran dalam mod aplikasi biasa

Dalam aplikasi biasa, anda mesti menggunakan kaedah Cipta() objek ExternalProcessing, yang diluluskan nama penuh fail pemprosesan luaran. Kaedah mengembalikan objek jenis Pemprosesan Luaran, objek ini ialah pemprosesan luaran yang sedang dibuka. Jika anda perlu membuka borang pemprosesan luaran, kemudian panggil kaedah GetForm() pada objek yang diterima, yang akan mengembalikan borang utama, dan kemudian panggil kaedah Open() untuk membukanya.


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

Dalam pemprosesan luaran, borang utama mestilah sentiasa berbentuk biasa dan borang terkawal mestilah sentiasa tambahan, jika tidak kaedah GetForm() tidak akan berfungsi dalam mod aplikasi biasa.

Menjalankan pemprosesan luaran dalam mod aplikasi terurus

Dalam mod borang terurus, algoritma dibahagikan mengikut konteks pelaksanaan. Pada pelanggan, kami menerima data binari menggunakan nama penuh fail pemprosesan luaran. Kami memindahkan data binari yang diterima ke pelayan dan meletakkannya dalam storan sementara. Seterusnya, anda perlu memanggil kaedah Connect() objek ExternalProcessing, yang alamat untuk storan sementara dihantar. Kaedah ini mengembalikan nama pemprosesan luaran yang disambungkan. Kami mengembalikan nama pemprosesan luaran kepada klien, mencipta laluan rentetan ke borang pemprosesan dan menggunakan kaedah OpenForm() untuk membuka borang pemprosesan luaran.

&Pada pelayan
Fungsi GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Kembalikan ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
Nama Fail Penuh = ""; // Nama penuh fail pemprosesan luaran.
FileData = BinaryData baharu(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Mod selamat untuk pemprosesan luaran

Kaedah Create() dan Connect() bagi objek ExternalProcessing mempunyai parameter SafeMode masuk - tanda menyambungkan pemprosesan luaran dalam mod selamat. Jika parameter tidak dinyatakan, sambungan akan dibuat dalam mod selamat.
Mod selamat direka bentuk untuk melindungi sistem daripada melaksanakan kod program "tidak dipercayai" pada pelayan. Potensi bahaya datang daripada pemprosesan luaran atau kod program yang dimasukkan oleh pengguna untuk digunakan dalam kaedah Run() dan Calculate().
Mod selamat mengenakan sekatan berikut:
  • mod istimewa dibatalkan jika ia dipasang;
  • percubaan untuk memasuki mod istimewa diabaikan;
  • operasi dengan objek COM adalah dilarang;
  • memuatkan dan menyambungkan komponen luaran adalah dilarang;
  • akses kepada sistem fail adalah dilarang (kecuali untuk fail sementara);
  • Akses Internet adalah dilarang.
Proses yang dibuka secara interaktif tidak dilakukan dalam mod selamat, oleh itu adalah disyorkan untuk melaksanakan mekanisme untuk membuka pemproses luaran dalam mod selamat, serta pada tahap kebenaran untuk melarang pengguna daripada membuka pemproses luaran secara interaktif.
Untuk melarang pembukaan interaktif pemprosesan, dalam semua peranan yang diberikan kepada pengguna, adalah perlu untuk mengalih keluar "Pembukaan interaktif pemprosesan luaran" yang betul (lihat Rajah 1).
Rajah 1. Hak untuk membuka pemprosesan/laporan luaran secara interaktif
Hak "Pembukaan interaktif pemprosesan luaran" tidak menjejaskan objek Pemprosesan Luar dalam apa jua cara.

Pembukaan laporan luaran secara terprogram adalah serupa dengan pemprosesan luaran, tetapi anda harus menggunakan objek konteks global ExternalReports, yang mempunyai jenis ExternalReportsManager.

Hakikatnya ialah apabila menggunakan versi pelayan pelanggan 1C, pemprosesan/laporan luaran dibuka dalam mod selamat, di mana penggunaan mod istimewa adalah dilarang. Dan mod istimewa digunakan sangat kerap dalam konfigurasi biasa: penjanaan borang bercetak, pelbagai pemeriksaan perkhidmatan (pendaftaran pertukaran), dll. Akibatnya, walaupun menggunakan laporan biasa pada sistem kawalan akses tanpa borang (secara lalai, borang umum "ReportForm" digunakan) dan menyimpan tetapan laporan tersuai (dalam direktori yang sepadan), anda akan menerima ralat tentang akses yang tidak mencukupi hak kepada pelbagai pemalar dan parameter sesi yang digunakan untuk tujuan rasmi selepas talian SetPrivilegedMode(Benar) ;

Penyelesaian yang "betul" adalah untuk menyambungkan pemprosesan dan laporan luaran melalui mekanisme "Laporan dan pemprosesan tambahan" BSP dengan melumpuhkan mod selamat atau menambah kebenaran (pada pendapat saya, daripada BSP versi 2.2.2.1). Tetapi jika atas sebab tertentu adalah perlu untuk menggunakan fail pelaporan/pemprosesan luaran, maka anda boleh mengkonfigurasi profil keselamatan kelompok yang digunakan sebagai profil keselamatan mod selamat untuk pangkalan maklumat tertentu.

Saya ingin segera ambil perhatian bahawa pilihan ini tidak lebih baik, tetapi disebabkan oleh pelbagai keadaan ia boleh digunakan dalam bentuk yang dipermudahkan. Sebagai contoh, saya mempunyai beberapa pangkalan data di bandar yang berbeza, tempatan biasa dengan hak terhad, USB tertutup, dsb., di suatu tempat saya menggunakan Perakaunan 2.0, dan di suatu tempat 3.0, saya membuat hampir semua laporan menggunakan alat ACS tanpa borang, supaya ia dibuka dalam kedua-dua versi. Mengekalkan semua laporan ini untuk versi yang berbeza dan pangkalan data yang berbeza adalah intensif buruh dan sia-sia, kerana Terdapat rancangan untuk bertukar kepada satu konfigurasi dan pangkalan...

Mari buat profil.
Dalam konsol kluster, kami mencipta profil keselamatan di mana kami menetapkan bendera "Boleh digunakan sebagai profil keselamatan Mod Selamat" dan " dalam bahagian "Akses penuh dibenarkan:" "ke mod istimewa".

Dalam kebanyakan kes menggunakan laporan dan pemprosesan mudah, kaedah ini akan digunakan. Untuk situasi yang lebih kompleks, tidak ada gunanya menerangkan proses itu, kerana ia digariskan dalam dokumentasi (keupayaan untuk mengkonfigurasi profil keselamatan untuk fail luaran tertentu dengan menentukan jumlah cincangnya, dsb.).

P.S. Saya berpendapat bahawa profil keselamatan berfungsi hanya apabila menggunakan lesen platform dan pelayan di peringkat CORP, tetapi fungsi ini juga berfungsi pada platform 1C:Enterprise 8.3 (ia boleh dipanggil PROF secara bersyarat, dengan analogi dengan konfigurasi standard Asas/PROF/CORP)