Menü
Bedava
kayıt
ev  /  sorunlar/ Güvenli mod 1s. Pavel Çistov

Güvenli mod 1s. Pavel Çistov

Yazdır (Ctrl + P)

Yapılandırma nesneleri

Sunucuda "güvenilmez" program kodunun kullanılması gerekiyorsa: harici işleme veya program kodu Kullanıcı tarafından Run() ve Evaluate() yöntemlerinde kullanılmak üzere girilmişse güvenli çalışma modunu kullanabilirsiniz.

Güvenli modda:

  • ayrıcalıklı mod iptal edildi.
  • Ayrıcalıklı moda girme görmezden gelindi.
  • yasak 1C: Enterprise platformuyla ilgili olarak harici fonların kullanımına yol açan işlemler (yukarıdaki yöntemlerin engelleyici olmayan analogları dahil):
  • COM mekanizmaları:
    • COM Nesnesi ();
    • GetCOMObject();
    • Sarıcı HTMLDocument.GetCOMObject().
  • Harici bileşenlerin yüklenmesi:
    • Dış Bileşeni Yükle ();
    • Harici Bileşeni Bağlayın ().
  • Erişim dosya sistemi:
    • ValueInFile();
    • Dosya kopyalamak ();
    • BirleştirDosyaları ();
    • Dosyayı taşı ();
    • Bölünmüş dosya ();
    • Dizin Oluştur();
    • Dosyaları sil ();
    • Yeni dosya;
    • Yeni xBase;
    • HTMLWrite.OpenFile();
    • HTML.OpenFile() okuma;
    • XML.OpenFile()'ı okuyun;
    • XMLWrite.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • WriteFastInfoset.OpenFile();
    • CanonicalXMLWriter.OpenFile();
    • ConversionXSL.LoadFromFile ();
    • WriteZipFile.Open();
    • ZipFile.Open () okuma;
    • NewTextReader (), ilk parametre bir dize ise;
    • ReadText.Open () ilk parametre bir dize ise;
    • NewWriteText (), ilk parametre bir dize ise;
    • WriteText.Open (), ilk parametre bir dize ise;
    • NewExtractText();
    • RetrieveText.FileName özelliğinin değiştirilmesi;
    • ExtractText.Write();
    • Yeni Resim (), ilk parametre bir dize ise;
    • Resim.Yaz ();
    • Yeni BinaryData();
    • BinaryData.Write();
    • NewDataWrite (), ilk parametre bir dize ise;
    • NewReaderData (), ilk parametre var - bir dize;
    • FileStreamManager nesnesinin tüm yöntemleri;
    • Yeni 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 ().
  • İnternet girişi:
    • Yeni İnternet Bağlantısı,
    • Yeni İnternet Postası,
    • Yeni İnternetProxy,
    • Yeni HTTP Bağlantısı,
    • Yeni FTP Bağlantısı.

DİKKAT! Çalışma zamanında yasaklanmış işlemleri gerçekleştirirken bir istisna atar.

Not. Dosya - Aç menüsü kullanılarak açılan harici raporlar ve işlemler, kullanıcının yönetici erişim haklarına sahip değilse güvenli modda yürütülür.

Arıza sayısı, kapatma sayısı ile aynı olmalıdır. Bununla birlikte, bir prosedür veya işlev içinde bir güvenli mod (bir veya daha fazla) açıldıysa, ancak kapatılmadıysa, sistem, işlemde veya işlevde tamamlanmamış açmalar olduğu kadar otomatik olarak kapanacaktır. terk edilmiş.

Bir prosedür veya işlev bir yöntemi çağırırsa Güvenli Modu Ayarla (Yanlış) yöntem çağrılarından daha fazlasını yaptı Güvenli Modu Ayarla (Doğru) sonra bir istisna atılacaktır.

Yapılandırma geliştiricisi, geliştiricinin güvenilirliğini garanti edemediği üçüncü taraf (konfigürasyonla ilgili olarak) program kodunun kullanımını üstlendiğinde, güvenli mod yazılım ayarı gerekli olabilir. Yürütülebilir kodun şuradan alındığı durumlarda Execute () ve Compute () yöntemlerinin yürütülmesi bu tür kodlara bir örnektir. dış dünya... Bu durumda, bu yöntemleri uygulamadan önce güvenli modu ayarlamak iyi bir uygulamadır:

// Yürütülmesi gereken bir program kodu oluşturulur // Kodun şuradan yüklenmesi mümkündür: dış kaynaklar// veya elle girilen ExecutableCode = GetExecutableCodeFrom the OutsideWorld(); // Güvenli Modu Etkinleştir Güvenli Modu Ayarla (Doğru); // Potansiyel olarak tehlikeli kodu çalıştır Execute (Yürütülebilir Kod); // Güvenli Modu Kapat Güvenli Modu Ayarla (Yanlış);

Bazı durumlarda, güvenli mod ayarları ayrıcalıklı mod ayarlarıyla çakışabilir. Bu tür bir çakışmaya örnek olarak, güvenli modda çalışan gömülü koddan ayarlanan deftere nakilde Ayrıcalıklı modu olan bir belgeyi deftere nakletmek verilebilir. Bu durumda, ayrıcalıklı mod devre dışı bırakılır ve etkinleştirme girişimleri yok sayılır. Sonuç olarak, etkinleştirilmiş ayrıcalıklı moda "dayanan" gömülü dildeki kod, yokluğuyla "çakışır" ve bu da açık olmayan nedenlerle hatalara yol açar. Böyle bir durumu önlemek için, 1C: Enterprise sistemi, gömülü dildeki yürütülebilir kodun yapılandırma uzantısında bulunmaması koşuluyla, nesne modülünde veya yönetici modülünde bulunan olay işleyicileri için güvenli modu otomatik olarak devre dışı bırakır. Bu tür işleyiciler, sözdizimi yardımcısında özel bir şekilde işaretlenir.

Ayrıca, güvenli modu katıştırılmış dilden devre dışı bırakma seçeneği de sağlar (bağlantıyı kesmeye çalışılan program kodu bir yapılandırma uzantısında değilse). Güvenli modu devre dışı bırakmak için yöntemi kullanın Güvenli Mod Devre Dışı Bırak ()... Güvenli modun açık olup olmadığını kontrol edin şu an devre dışı (otomatik olarak veya bir yöntemi çağırarak), yöntemi kullanabilirsiniz GetDisableSafeMode().

Tek bir gömülü dil yöntemi içinde, güvenli modu ayarlama (SetSafeMode () yöntemini çağırarak) ve güvenli modu devre dışı bırakma ayarı (meta veri nesnelerinin olay işleyicileri süresince otomatik olarak veya çağırarak) birden fazla yuvalama düzeyi olamaz. SetDisableSafeMode () yöntemi). Yuvalamayı artırmaya çalışırken bir istisna atılır:

// Doğru kullanım YordamAdı () SetSafeModeDisable (True); Güvenli Modu Ayarla (Doğru); Güvenli Modu Ayarla (Yanlış); Güvenli Mod Devre Dışı Bırak (Yanlış); EndProcedure // Yanlış kullanım Prosedür ProsedürAdı () SetSafeModeDisable (True); Güvenli Modu Ayarla (Doğru); Güvenli Mod Devre Dışı Bırak (Yanlış); // İstisna EndProcedure Prosedür ProsedürAdı () SetSafeMode (True); Güvenli Mod Devre Dışı Bırak (Yanlış); // İstisna Son Prosedürü

Programı başlattığınızda, Belgeleri Yükle altında normal kullanıcı"Güvenli mod ayarlandı. İşlem yasak."

Bu karmaşıklık ortaya çıkar, çünkü harici işlemeyi başlatmak için yeterli hak yok. Erişim haklarını ayarlamak için, adına 1C Enterprise modunda veritabanına gidin. yönetici ve bölüme git Kullanıcı ve haklar ayarları / Grup profillerine erişim, Tıklayın Grup oluşturmak için.

Grubun adını girin ve bu rol grubunun kullanıcıları için mevcut olan kutuları işaretleyin -

  • Harici raporların ve işlemcilerin etkileşimli açılması
  • Ek raporları kullanma ve işleme

Tıklamak Yak ve kapat


Kullanıcılar menüsüne dönün ve Listeden Belgeleri İndir programıyla çalışacak çalışanı seçin. İzinler'i tıklayın. Profil listesinde önceden oluşturulmuş profili işaretleyin. Tıklamak bir yere yaz.


Kullanıcıların işlemeye başlayabilmesi için Belge Yükleme'yi harici işlemciler listesine eklemeniz önerilir. Bunun için menüde Yönetim / Baskı formları ve işleme / Ek raporlar ve işleme oluşturmak yeni tedavi... LoadDocuments.epf dosyasına göz atın ve dosyayı adlandırın. Kullanıcının gelecekte başlatabileceği menüde işlemenin konumunu belirtin, örneğin menüyü seçin dizinler

Öğeye tıklayarak Hızlı erişim işlemenin hangi kullanıcılar için uygun olduğunu belirtirsiniz:


Ayarladıktan sonra tıklayın Yak ve kapat... İşleme başlamak için, kullanıcıların veritabanına yeniden girmeleri ve erişim menüsünden (örnekte, Referanslar) açmaları ve tıklamaları yeterlidir. Uygulamak.


Menü - Tüm fonksiyonlar..... ve listede Kullanımda olan Güvenlik Profilleri seçeneğini bulun.


"Güvenlik profilleri kullanılıyor" seçeneğinin işaretini kaldırmanız yeterlidir.


Bundan sonra, program başarıyla başlayacaktır.

programatik keşif harici işleme, türüne sahip ExternalProcessing global bağlam nesnesi kullanılarak gerçekleştirilir. Harici İşleme Yöneticisi... 1C platformunun her çalışma modu için (normal uygulama modu ve yönetilen uygulama modu), harici işleme ile çalışmak için çeşitli nesne yöntemleri kullanılır.

Normal uygulama modunda harici işlemeyi başlatın

V normal uygulama harici işleme dosyasının tam adının iletildiği ExternalProcessing nesnesinin Create () yöntemini kullanmanız gerekir. Yöntem, türde bir nesne döndürür Harici İşleme, bu nesne, açılmakta olan harici işlemdir. Harici bir işleme formu açmanız gerekiyorsa, sonuç nesnesinde ana formu döndürecek olan GetForm() yöntemini çağırın ve ardından açmak için Open() yöntemini çağırın.


İşleme = ExternalProcessing.Create (FullFileName);
Processing.GetForm().Aç();

Harici işlemcilerde, ana form her zaman normal bir form olmalıdır ve yönetilen form her zaman ek olmalıdır, aksi takdirde GetForm () yöntemi normal uygulama modunda çalışmayacaktır.

Yönetilen uygulama modunda harici işlemeyi başlatma

modunda yönetilen formlar Algoritmanın yürütme bağlamına göre bölümü görünür. İstemcide, harici işleme dosyasının tam adıyla ikili verileri alırız. Alınan ikili verileri sunucuya aktarır ve geçici depolamaya koyarız. Ardından, geçici depolamanın adresinin iletildiği ExternalProcessing nesnesinin Connect () yöntemini çağırmanız gerekir. Yöntem, bağlı harici işlemin adını döndürür. Dış işlemenin adını istemciye döndürürüz, işleme formuna bir dize yolu oluştururuz ve dış işleme formunu açmak için OpenForm() yöntemini kullanırız.

&Sunucuda
GetExternalProcessingName İşlevi (BinaryData)
AddressToTemporaryStorage = PutToTemporalStore (BinaryData);
Geri Dön ExternalProcessing.Connect (AddressInTemporaryStorage);
EndFunction

& OnClient
FullFileName = ""; // Harici işleme dosyasının tam adı.
FileData = Yeni BinaryData (FullFileName);
ExternalProcessingName = GetExternalProcessingName (FileData);
OpenForm ("ExternalProcessing." + ExternalProcessingName + ".Form");

Harici tedaviler için güvenli mod

ExternalProcessing nesnesinin Create () ve Connect () yöntemleri, SafeMode giriş parametresine sahiptir - harici işlemeyi güvenli modda bağlama işareti. Parametre belirtilmezse bağlantı güvenli modda yapılır.
Güvenli modçalışma, sistemi sunucuda "güvenilmez" program kodu yürütmekten korumak için tasarlanmıştır. Potansiyel tehlike, Execute () ve Calculate () yöntemlerinde kullanılmak üzere kullanıcı tarafından girilen harici işleme veya program kodudur.
Güvenli mod aşağıdaki kısıtlamalara sahiptir:
  • ayarlanmışsa ayrıcalıklı mod iptal edilir;
  • ayrıcalıklı moda girme girişimleri yoksayılır;
  • COM nesneleri ile işlemler yasaktır;
  • harici bileşenlerin yüklenmesi ve bağlanması yasaktır;
  • dosya sistemine erişim reddedildi (geçici dosyalar hariç);
  • İnternet erişimi reddedildi.
Etkileşimli olarak açılan işlemler güvenli modda gerçekleştirilmez, bu nedenle harici işlemcileri güvenli modda açmak için bir mekanizma uygulanması ve ayrıca kullanıcının harici işlemcileri etkileşimli olarak açmasını haklar düzeyinde engellemesi önerilir.
İşlemin etkileşimli açılmasını engellemek için, kullanıcıya atanan tüm rollerde "Harici işlemeyi etkileşimli olarak aç" hakkını kaldırmalısınız (bkz. Şekil 1).
Şekil 1. Harici işlemlerin / raporların etkileşimli olarak açılması hakları
Açık Harici İşlemcileri etkileşimli olarak sağ, ExternalProcessing nesnesini hiçbir şekilde etkilemez.

Harici işlemcilere benzer şekilde harici raporları programlı olarak açarken, yalnızca şu tipe sahip Harici Raporlar global bağlam nesnesini kullanmalısınız. HariciRapor Yöneticisi.

Harici işleme, türe sahip ExternalProcessing genel bağlam nesnesi kullanılarak programlı olarak açılır. Harici İşleme Yöneticisi... 1C platformunun her çalışma modu için (normal uygulama modu ve yönetilen uygulama modu), harici işleme ile çalışmak için çeşitli nesne yöntemleri kullanılır.

Normal uygulama modunda harici işlemeyi başlatın

Tipik bir uygulamada, harici işleme dosyasının tam adının iletildiği ExternalProcessing nesnesinin Create () yöntemini kullanmanız gerekir. Yöntem, türde bir nesne döndürür Harici İşleme, bu nesne, açılmakta olan harici işlemdir. Harici bir işleme formu açmanız gerekiyorsa, sonuç nesnesinde ana formu döndürecek olan GetForm() yöntemini çağırın ve ardından açmak için Open() yöntemini çağırın.


İşleme = ExternalProcessing.Create (FullFileName);
Processing.GetForm().Aç();

Harici işlemcilerde, ana form her zaman normal bir form olmalıdır ve yönetilen form her zaman ek olmalıdır, aksi takdirde GetForm () yöntemi normal uygulama modunda çalışmayacaktır.

Yönetilen uygulama modunda harici işlemeyi başlatma

Yönetilen formlar modunda, yürütme bağlamına göre algoritmanın bir bölümü görünür. İstemcide, harici işleme dosyasının tam adıyla ikili verileri alırız. Alınan ikili verileri sunucuya aktarır ve geçici depolamaya koyarız. Ardından, geçici depolamanın adresinin iletildiği ExternalProcessing nesnesinin Connect () yöntemini çağırmanız gerekir. Yöntem, bağlı harici işlemin adını döndürür. Dış işlemenin adını istemciye döndürürüz, işleme formuna bir dize yolu oluştururuz ve dış işleme formunu açmak için OpenForm() yöntemini kullanırız.

&Sunucuda
GetExternalProcessingName İşlevi (BinaryData)
AddressToTemporaryStorage = PutToTemporalStore (BinaryData);
Geri Dön ExternalProcessing.Connect (AddressInTemporaryStorage);
EndFunction

& OnClient
FullFileName = ""; // Harici işleme dosyasının tam adı.
FileData = Yeni BinaryData (FullFileName);
ExternalProcessingName = GetExternalProcessingName (FileData);
OpenForm ("ExternalProcessing." + ExternalProcessingName + ".Form");

Harici tedaviler için güvenli mod

ExternalProcessing nesnesinin Create () ve Connect () yöntemleri, SafeMode giriş parametresine sahiptir - harici işlemeyi güvenli modda bağlama işareti. Parametre belirtilmezse bağlantı güvenli modda yapılır.
Güvenli mod, sistemi sunucuda "güvenilmeyen" program kodunu yürütmekten korumak için tasarlanmıştır. Potansiyel tehlike, Execute () ve Calculate () yöntemlerinde kullanılmak üzere kullanıcı tarafından girilen harici işleme veya program kodudur.
Güvenli mod aşağıdaki kısıtlamalara sahiptir:
  • ayarlanmışsa ayrıcalıklı mod iptal edilir;
  • ayrıcalıklı moda girme girişimleri yoksayılır;
  • COM nesneleri ile işlemler yasaktır;
  • harici bileşenlerin yüklenmesi ve bağlanması yasaktır;
  • dosya sistemine erişim reddedildi (geçici dosyalar hariç);
  • İnternet erişimi reddedildi.
Etkileşimli olarak açılan işlemler güvenli modda gerçekleştirilmez, bu nedenle harici işlemcileri güvenli modda açmak için bir mekanizma uygulanması ve ayrıca kullanıcının harici işlemcileri etkileşimli olarak açmasını haklar düzeyinde engellemesi önerilir.
İşlemin etkileşimli açılmasını engellemek için, kullanıcıya atanan tüm rollerde "Harici işlemeyi etkileşimli olarak aç" hakkını kaldırmalısınız (bkz. Şekil 1).
Şekil 1. Harici işlemlerin / raporların etkileşimli olarak açılması hakları
Açık Harici İşlemcileri etkileşimli olarak sağ, ExternalProcessing nesnesini hiçbir şekilde etkilemez.

Harici işlemcilere benzer şekilde harici raporları programlı olarak açarken, yalnızca şu tipe sahip Harici Raporlar global bağlam nesnesini kullanmalısınız. HariciRapor Yöneticisi.

Gerçek şu ki, 1C işleminin istemci-sunucu sürümünü kullanırken, ayrıcalıklı modun kullanımının yasak olduğu güvenli modda harici işleme / raporlar açılır. Ayrıcalıklı mod, tipik konfigürasyonlarda çok sık kullanılır: formasyon basılı formlar, çeşitli resmi çekler (borsa kaydı), vb. Sonuç olarak, form olmadan ACS'de düzenli bir rapor kullanmak bile (varsayılan olarak, genel "Rapor Formu" formu kullanılır) ve tutmak özel ayarlar rapor (ilgili referansa), satırdan sonra servis amacıyla kullanılan çeşitli sabitlere ve oturum parametrelerine yetersiz erişim hakları hakkında bir hata alırsınız. SetPrivilegedMode (Doğru);

"Doğru" çözüm, güvenli modu devre dışı bırakarak veya izinler ekleyerek BSP "Ek raporlar ve işleme" mekanizmaları aracılığıyla harici işlemcileri ve raporları bağlamak olacaktır (bence, BSP sürümleri 2.2.2.1). Ancak herhangi bir nedenle tam olarak kullanılması gerekiyorsa harici dosyalar raporlar / işleme, belirli bir güvenlik modu için güvenli mod güvenlik profili olarak kullanılan küme güvenlik profilini yapılandırabilirsiniz. bilgi tabanı.

Bu seçeneğin tercih edilmediğini hemen belirtmek isterim, ancak çeşitli koşullar nedeniyle bu kadar basitleştirilmiş bir biçimde kullanılabilir. Örneğin, farklı şehirlerde birkaç üssüm var, kesinlikle sınırlı haklara sahip ortak bir yerel oturma, kapalı USB vb., Accounting 2.0 kullandığım bir yerde ve bir yerde 3.0, neredeyse tüm raporları formsuz ACS kullanarak yapıyorum, böylece onlar her iki versiyonda da açıldı. Tüm bu raporları farklı versiyonlar ve farklı temeller zahmetli ve umutsuz bir iştir, tk. planlar, tek bir konfigürasyona ve tabana geçişi içerir ...

Bir profil oluşturuyoruz.
Küme konsolunda, bayraklar ayarladığımız bir güvenlik profili oluşturun "Güvenli mod güvenlik profili olarak kullanılabilir" ve "altında" İzin verilir tam erişim:" "ayrıcalıklı moda".

Raporların kullanıldığı birçok durumda ve basit tedaviler Bu method geçerli olacaktır. Daha karmaşık durumlar için süreci tanımlamanın bir anlamı yoktur, çünkü belgelerde belirtilmiştir (karma değerini vb. belirterek belirli harici dosyalar için güvenlik profillerini özelleştirme yeteneği).

not Güvenlik profillerinin yalnızca CORP düzeyindeki platform ve sunucu için lisanslar kullanıldığında çalıştığını düşündüm, ancak bu işlevsellik 1C: Enterprise 8.3 platformunda da yerine getiriliyor (koşullu olarak, temel / PROF / CORP tipik yapılandırmalarıyla benzer şekilde PROF'i çağırabilirsiniz) )