안전 모드가 설치되었습니다. 1s 8.3. 외부 처리의 소프트웨어 개방

외부 처리의 프로그래밍 방식 열기는 다음 유형의 전역 컨텍스트 개체인 외부 처리를 사용하여 수행됩니다. 외부처리관리자. 1C 플랫폼의 각 작동 모드(일반 응용 프로그램 모드 및 관리 응용 프로그램 모드)에 대해 외부 처리 작업을 위해 다양한 개체 방법이 사용됩니다.

일반 애플리케이션 모드에서 외부 처리 실행

일반적인 애플리케이션에서는 외부 처리 파일의 전체 이름이 전달되는 ExternalProcessing 개체의 Create() 메서드를 사용해야 합니다. 이 메소드는 유형의 객체를 반환합니다. 외부 처리, 이 개체는 열려 있는 외부 처리입니다. 외부 처리 양식을 열어야 하는 경우 기본 양식을 반환하는 수신된 개체에 대해 GetForm() 메서드를 호출한 다음 Open() 메서드를 호출하여 엽니다.


처리 = 외부처리.Create(FullFileName);
처리.GetForm().Open();

외부 처리에서 기본 양식은 항상 일반 양식이어야 하고 제어되는 양식은 항상 추가 양식이어야 합니다. 그렇지 않으면 GetForm() 메서드가 일반 응용 프로그램 모드에서 작동하지 않습니다.

관리형 애플리케이션 모드에서 외부 처리 실행

관리되는 양식 모드에서는 알고리즘이 실행 컨텍스트에 따라 구분됩니다. 클라이언트에서는 외부 처리 파일의 전체 이름을 사용하여 바이너리 데이터를 수신합니다. 수신된 바이너리 데이터를 서버로 전송하고 임시 저장소에 보관합니다. 다음으로 임시 저장을 위한 주소가 전달되는 외부 처리 개체의 Connect() 메서드를 호출해야 합니다. 이 메서드는 연결된 외부 처리의 이름을 반환합니다. 외부 처리의 이름을 클라이언트에 반환하고 처리 양식에 대한 문자열 경로를 만든 다음 OpenForm() 메서드를 사용하여 외부 처리 양식을 엽니다.

&서버에서
함수 GetExternalProcessingName(바이너리데이터)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
ReturnExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&클라이언트에서
전체파일이름 = ""; // 외부 처리 파일의 전체 이름입니다.
FileData = new BinaryData(FullFileName);
외부처리이름 = GetExternalProcessingName(파일데이터);
OpenForm("외부 처리." + 외부 처리 이름 + ".양식");

외부 처리를 위한 안전 모드

ExternalProcessing 개체의 Create() 및 Connect() 메서드에는 들어오는 매개 변수 SafeMode(안전 모드에서 외부 처리를 연결한다는 표시)가 있습니다. 매개변수를 지정하지 않으면 보안 모드로 연결됩니다.
안전 모드는 시스템이 서버에서 "신뢰할 수 없는" 프로그램 코드를 실행하지 못하도록 보호하도록 설계되었습니다. 잠재적인 위험은 Run() 및 Calculate() 메서드에 사용하기 위해 사용자가 입력한 프로그램 코드 또는 외부 처리로 인해 발생합니다.
안전 모드에는 다음과 같은 제한 사항이 적용됩니다.
  • 특권 모드가 설치된 경우 취소됩니다.
  • 특권 모드로 들어가려는 시도는 무시됩니다.
  • COM 개체를 사용한 작업은 금지됩니다.
  • 외부 구성 요소를 로드하고 연결하는 것은 금지되어 있습니다.
  • 파일 시스템에 대한 접근이 금지됩니다(임시 파일 제외).
  • 인터넷 접속이 금지되어 있습니다.
대화형으로 열린 프로세스는 안전 모드에서 수행되지 않습니다. 따라서 사용자가 대화형으로 외부 프로세서를 여는 것을 금지하는 권한 수준뿐만 아니라 안전 모드에서 외부 프로세서를 여는 메커니즘을 구현하는 것이 좋습니다.
대화형 처리 열기를 금지하려면 사용자에게 할당된 모든 역할에서 "외부 처리의 대화형 열기" 권한을 제거해야 합니다(그림 1 참조).
그림 1. 외부 처리/보고서를 대화형으로 열 수 있는 권한
"외부 처리의 대화형 열기" 권한은 어떤 방식으로든 외부 처리 개체에 영향을 주지 않습니다.

외부 보고서를 프로그래밍 방식으로 여는 것은 외부 처리와 유사하지만 유형이 있는 전역 컨텍스트 개체인 ExternalReports를 사용해야 합니다. 외부 보고서 관리자.

인쇄(Ctrl+P)

구성 객체

서버에서 "신뢰할 수 없는" 프로그램 코드(외부 처리 또는 Run() 및 Calculate() 메서드에 사용하기 위해 사용자가 입력한 프로그램 코드)를 사용해야 하는 경우 안전 작동 모드를 사용할 수 있습니다.

안전 모드에서:

  • 특권 모드 취소 된.
  • 특권 모드로 전환 무시됨.
  • 금지 1C:Enterprise 플랫폼과 관련된 외부 수단의 사용으로 이어지는 작업(지정된 방법의 비차단 아날로그 포함):
  • COM 메커니즘:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • 외부 구성 요소 로드:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • 파일 시스템 액세스:
    • ValueInFile();
    • 파일 복사();
    • 파일 병합();
    • 파일이동();
    • 분할파일();
    • CreateDirectory();
    • 파일 삭제();
    • 새로운 파일;
    • 새로운 xBase;
    • 항목HTML.OpenFile();
    • 읽기HTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • 새로운 ReadText(), 첫 번째 매개변수가 문자열인 경우;
    • ReadText.Open(), 첫 번째 매개변수가 문자열인 경우;
    • NewTextRecord(), 첫 번째 매개변수가 문자열인 경우;
    • WriteText.Open(), 첫 번째 매개변수가 문자열인 경우;
    • NewTextExtract();
    • ExtractText.FileName 속성 변경;
    • ExtractText.Write();
    • New Picture(), 첫 번째 매개변수가 문자열인 경우;
    • 그림.쓰기();
    • 새로운 바이너리데이터();
    • 바이너리데이터.쓰기();
    • NewDataRecord(), 첫 번째 매개변수가 문자열인 경우;
    • 새로운 ReadData()에는 첫 번째 매개변수인 문자열이 있습니다.
    • FileStreamManager 개체의 모든 메서드
    • 새로운 파일스트림();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • 텍스트문서.읽기();
    • 텍스트문서.쓰기().
  • 인터넷 액세스:
    • 새로운 인터넷 연결,
    • 새로운 인터넷메일,
    • 새로운 인터넷프록시,
    • 새로운 HTTPConnection,
    • 새로운 FTPConnection.

주목! 금지된 작업을 수행하면 런타임 시 예외가 발생합니다.

메모. 파일 - 열기 메뉴를 사용하여 열린 외부 보고서 및 처리는 사용자에게 관리 액세스 권한이 없는 경우 안전 모드에서 실행됩니다.

안전 모드가 켜진 횟수는 꺼진 횟수와 일치해야 합니다. 그러나 프로시저 또는 기능 내에서 안전 모드를 켰지만(한 번 이상) 끄지 않은 경우 시스템은 남아 있는 프로시저 또는 기능에서 불완전하게 켜진 횟수만큼 자동으로 종료됩니다.

프로시저나 함수에서 메소드를 호출하는 경우 안전 모드 설정(거짓)메소드 호출 이상의 것을 수행했습니다. 안전 모드 설정(참), 그러면 예외가 발생합니다.

구성 개발자가 신뢰성을 보장할 수 없는 타사(구성 관련) 프로그램 코드를 사용하려는 경우 안전 모드의 소프트웨어 설치가 필요할 수 있습니다. 이러한 코드의 예로는 실행 가능한 코드를 외부에서 얻은 경우 Execute() 및 Compute() 메서드를 실행하는 것이 있습니다. 이 경우 다음 방법을 실행하기 전에 안전 모드를 설정하는 것이 좋습니다.

// 실행해야 하는 프로그램 코드가 생성됩니다. // 코드가 외부 소스에서 로드되거나 // 수동으로 입력될 수 있습니다. ExecutableCode = GetExecutedCodeFromExternalWorld(); // 안전 모드 활성화 SetSafeMode(True); // 잠재적으로 위험한 코드 실행 Execute(ExecutableCode); // 안전 모드 끄기 SetSafeMode(False);

경우에 따라 안전 모드 설정이 권한 모드 설정과 충돌할 수 있습니다. 이러한 충돌의 예로는 안전 모드에서 실행되는 내장 언어의 코드에서 게시 속성이 설정된 문서 게시를 들 수 있습니다. 이 경우 권한 모드가 비활성화되고 활성화하려는 시도가 무시됩니다. 결과적으로, 활성화된 특권 모드를 "계산"하는 내장 언어의 코드는 그 부재를 "발생"하여 나타나는 이유가 불분명한 오류로 이어집니다. 이러한 상황을 방지하기 위해 1C:Enterprise 시스템은 내장 언어의 실행 코드가 구성 확장에 없는 경우 개체 모듈 또는 관리자 모듈에서 사용 가능한 이벤트 핸들러에 대한 안전 모드를 자동으로 비활성화합니다. 이러한 핸들러는 구문 도우미에서 특별한 방식으로 표시됩니다.

또한 내장 언어에서 안전 모드를 비활성화하는 기능도 제공합니다(비활성화하려는 프로그램 코드가 구성 확장에 없는 경우). 안전 모드를 비활성화하는 방법이 있습니다 비활성화안전모드(). 메소드를 사용하여 안전 모드가 현재 비활성화되어 있는지(자동으로 또는 메소드 호출을 통해) 확인할 수 있습니다. GetDisableSafeMode().

내장 언어의 한 메서드 내에는 안전 모드 설정(SetSafeMode() 메서드 호출) 및 안전 모드 비활성화 설정(메타데이터 개체 이벤트 실행 중 자동으로) 중첩 수준이 두 개 이상 있을 수 없습니다. 핸들러를 사용하거나 SetSafeModeDisable() 메서드를 호출하여). 중첩을 늘리려고 하면 예외가 발생합니다.

// ProcedureProcedureName()의 올바른 사용 SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // ProcedureProcedureName()의 잘못된 사용 SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // 예외 EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // 예외 EndProcedure

버전 8.3.9.2170에서는 보안이 강화되었습니다. 이제 시스템에서 외부 처리, 확장 등을 실행하기 위한 확인을 요청합니다. 분명히 트로이 목마 이후:

위험한 행동에 대한 보호 메커니즘이 구현되었습니다. 잠재적으로 위험한 작업이 수행되면 시스템은 수행 중인 작업과 이 작업의 잠재적 위험에 대한 정보가 포함된 경고를 발행합니다. 잠재적으로 위험한 활동에는 다음이 포함됩니다.

  • 외부 보고서 로드, 처리 또는 구성 확장.
  • 구성/확장 로드 또는 업데이트.
  • 외부 보고서/프로세서에서 액세스하거나 다음 기능에 대한 확장:
  • 운영 체제 명령을 실행합니다.
  • 사용자 관리.

사용자는 잠재적으로 위험한 작업을 허용하거나 거부할 수 있습니다. 작업이 허용되면 경우에 따라 허용된 작업을 다시 실행해야 할 수도 있습니다.

메시지는 다음과 같습니다.

보안 경고

"C:\.......epf" 파일에서 ""를 엽니다. 이 파일을 얻은 소스에 주의를 기울이는 것이 좋습니다. 추가 모듈 개발에 대해 소스와 합의가 없거나 파일 내용에 의문이 있는 경우 파일을 열지 않는 것이 좋습니다. 열면 컴퓨터와 데이터에 해를 끼칠 수 있습니다. 이 파일을 열도록 허용합니다. 설마

해결책:

구성 프로그램의 정보 보안 사용자 속성에서 "위험한 행위로부터 보호" 확인란을 선택 취소합니다.

문서에서 :위험한 활동 보호 메커니즘 비활성화

어떤 경우에는 위험한 행동에 대한 보호 메커니즘을 비활성화해야 합니다. 이를 위해 다음 옵션을 사용할 수 있습니다.

1. 특정 사용자의 속성에서 위험한 행위로부터 보호(Protection from Dangerous Actions) 체크박스를 비활성화합니다. 이렇게 하면 해당 사용자에 대한 보호가 비활성화됩니다.

2. 외부 처리(보고서) 관리자의 Connect() 메서드의 위험한 동작으로부터 보호 매개 변수를 사용합니다. 이 경우 사용자 요청 없이 외부 처리(보고서)를 로드하는 것이 가능합니다.

3. 이 개체의 Write() 메서드를 호출하기 전에 구성 확장 개체의 위험한 동작으로부터 보호 속성을 사용합니다.

4. conf.cfg 파일에서 비활성화UnsafeActionProtection 매개변수를 사용합니다. 이 경우 연결 문자열이 지정된 마스크를 충족하는 모든 정보베이스 사용자에 대해 위험한 작업에 대한 보호 메커니즘이 비활성화됩니다.

위험한 행동으로부터 보호 기능을 비활성화하는 것은 다음 규칙(주어진 순서대로)에 따라 수행됩니다.

1. 현재 사용자의 위험한 활동으로부터 보호 확인란을 선택 취소하면 보호가 비활성화된 것으로 간주됩니다.

2. 정보 베이스에 대한 연결 문자열이 conf.cfg 파일의 비활성화UnsafeActionProtection 매개 변수에 지정된 패턴 중 하나와 일치하면 보호가 비활성화된 것으로 간주됩니다.

3. 외부 처리(보고서)가 안전하지 않은 작업에 대한 보호 매개변수를 사용하여 명시적으로 비활성화된 보호와 연결된 경우.

4. 위험한 작업으로부터 보호 확장 속성을 사용하여 보호가 명시적으로 비활성화된 경우.

사실 1C의 클라이언트-서버 버전을 사용할 때 외부 처리/보고서는 권한 모드 사용이 금지되는 안전 모드에서 열립니다. 그리고 특권 모드는 인쇄된 양식 생성, 다양한 서비스 확인(교환 등록) 등 일반적인 구성에서 매우 자주 사용됩니다. 결과적으로 양식 없이 액세스 제어 시스템에 대한 일반 보고서를 사용하고(기본적으로 "ReportForm" 일반 형식이 사용됨) 사용자 정의 보고서 설정을 저장하더라도(해당 디렉터리에) 액세스 부족 오류가 발생합니다. 라인 이후 공식적인 목적으로 사용되는 다양한 상수 및 세션 매개변수에 대한 권한 SetPrivilegedMode(True) ;

"올바른" 해결책은 안전 모드를 비활성화하거나 권한을 추가하는(제 생각에는 BSP 버전 2.2.2.1에서) BSP "추가 보고서 및 처리" 메커니즘을 통해 외부 처리와 보고서를 연결하는 것입니다. 그러나 어떤 이유로 외부 보고/처리 파일을 사용해야 하는 경우 특정 정보 베이스에 대한 안전 모드 보안 프로필로 사용되는 클러스터 보안 프로필을 구성할 수 있습니다.

이 옵션은 바람직하지 않지만 다양한 상황으로 인해 이렇게 단순화된 형태로 사용할 수 있다는 점을 즉시 지적하고 싶습니다. 예를 들어, 저는 서로 다른 도시에 여러 데이터베이스가 있고 권한이 엄격히 제한된 공통 로컬 데이터베이스, 폐쇄형 USB 등이 있고 Accounting 2.0을 사용하는 곳과 3.0 어딘가에 양식 없이 ACS 도구를 사용하여 거의 모든 보고서를 작성합니다. 두 버전 모두 오픈했습니다. 다양한 버전과 다양한 데이터베이스에 대해 이러한 모든 보고서를 유지 관리하는 것은 노동 집약적이고 무익합니다. 단일 구성과 베이스로 전환할 계획도 있는데…

프로필을 만들어 보겠습니다.
클러스터 콘솔에서 플래그를 설정하는 보안 프로필을 생성합니다. "안전 모드 보안 프로필로 사용할 수 있습니다."및 "전체 액세스 허용:" 섹션의 " "특권 모드로".

보고서나 단순 처리를 사용하는 경우가 많을 경우 이 방법을 적용할 수 있습니다. 더 복잡한 상황에서는 프로세스를 설명할 필요가 없습니다. 이는 문서에 설명되어 있습니다(해시 양 등을 지정하여 특정 외부 파일에 대한 보안 프로필을 구성하는 기능).

추신 보안 프로필은 CORP 수준에서 플랫폼 및 서버 라이센스를 사용할 때만 작동한다고 생각했지만 이 기능은 1C:Enterprise 8.3 플랫폼에서도 작동합니다(표준 구성 Basic/PROF/CORP와 유사하게 조건부로 PROF라고 부를 수 있음).

공유하다