Stack overflow bahasa bawaan 1c. Tumpukan Melimpah

  • 10.01.2022

14/04/2016 Versi 3.22 Antarmuka telah diubah, kesalahan saat mentransfer register telah diperbaiki, prosedur untuk mentransfer organisasi dan kebijakan akuntansi telah diubah. Platform 8.3.7.2027 BP 3.0.43.174
17/03/2016 Versi 3.24 Kesalahan yang diperhatikan telah diperbaiki. Peron 8.3.8.1747 BP 3.0.43.241
16/06/2016 Versi 3.26 Kesalahan yang diketahui telah diperbaiki. Platform 8.3.8.2088 BP 3.0.44.123
16/10/2016 Versi 4.0.1.2 Memperbaiki transfer penyimpanan nilai, mengubah kebijakan akuntansi transfer untuk rilis 3.44.*. Peron 8.3.9.1818 BP 3.0.44.164.
19/04/2017 Versi 4.0.2.7 Algoritme untuk mentransfer register yang terkait dengan direktori telah diubah, kesalahan yang diketahui telah diperbaiki, transfer dengan penimpaan tautan telah diperbaiki.
29/05/2017 Versi 4.0.4.5 Mengubah perpindahan pergerakan, menambahkan tampilan pergerakan dokumen yang ditransfer, dan lain-lain...
30/05/2017 Versi 4.0.4.6 Memperbaiki kesalahan saat mengisi daftar direktori yang ada di sumbernya (terima kasih shoy)
17/06/2017 Versi 4.0.5.1 Algoritma untuk mentransfer gerakan telah diubah.
19/07/2017 Versi 4.0.5.4 Pengalihan CI dari BP 2.0 telah diubah. Tak disangka transfer dari UT 10.3 dilakukan oleh Smilegm, pada versi ini transfernya sedikit diperbaiki untuk keadaan ini)))
08/10/2017 Versi 4.0.5.5 Memperbaiki kesalahan saat mentransfer dari BP 2.0
09.19.2017 Versi 4.4.5.7 Pemeriksaan koneksi tetap untuk 3.0.52.*
28/11/2017 Versi 4.4.5.9 Memperbaiki kesalahan yang dilaporkan
06/12/2017 Versi 5.2.0.4 Algoritma pencarian tautan telah didesain ulang. Prosedur transfer dari BP 1.6 telah ditambahkan; tidak ada lagi koneksi ketat ke BP - Anda dapat dengan mudah menggunakannya untuk mentransfer data dengan konfigurasi yang "hampir" sama. Saya akan mencoba untuk segera memperbaiki semua komentar.
08/12/2017 Versi 5.2.1.3 Menambahkan algoritma untuk mentransfer laporan gaji dari BP.2.0 ke BP 3.0. Termasuk perubahan untuk berbagi antar konfigurasi yang identik.
19/12/2017 Versi 5.2.2.2 Transfer register informasi independen untuk direktori yang berada dalam dimensi register ini telah disesuaikan.

06/12/2017 Pemrosesan baru versi 5.2.0.4. Di antara perubahan signifikan tersebut adalah kemampuan untuk mentransfer dari BP 1.6 ke BP 3.0. Perubahan utama adalah pengelolaan pencarian tautan direktori - di versi sebelumnya pencarian dilakukan dengan GUID, tetapi dalam versi ini Anda dapat mengaktifkan pencarian "Berdasarkan detail":

17/01/2018 Versi 5.2.2.3 Memperbaiki - melihat kesalahan dalam direktori bawahan dan register informasi berkala.

19/07/2018 Versi 5.2.2.8 Kesalahan yang diketahui telah diperbaiki.

di mana Anda dapat mengatur detail pencarian untuk direktori mana pun. Mode ini sendiri “muncul” atas banyaknya permintaan pekerja, untuk kasus-kasus ketika diperlukan pertukaran ke dalam database yang sudah ada yang sudah memiliki data (misalnya, untuk menggabungkan catatan akuntansi untuk dua organisasi ke dalam satu database).

21/12/2015 Platform 8.3.7.1805 dan BP 3.0.43.29 dirilis masing-masing versi baru pemrosesan 3.1 :-) (uraian di bawah). Fungsionalitas baru - kemampuan untuk membandingkan saldo dan perputaran antara dua database BP (untuk semua akun, jika bagan akun bertepatan, atau untuk masing-masing akun akuntansi yang cocok, dengan atau tanpa analitik).
01/03/2016 Versi 3.5 - mekanisme koneksi ke basis sumber telah diubah - disesuaikan dengan BSP 2.3.2.43. Bug kecil diperbaiki. Peron 8.3.7.1845, BP 3.0.43.50
16/02/2016 Versi 3.6 - Menambahkan tanda "Atur koreksi manual" untuk dokumen yang ditransfer dengan perpindahan. Perpindahan tetap - dokumen dengan tanggal kurang dari awal periode ditransfer tanpa perpindahan. Peron 8.3.7.1917, BP 3.0.43.116
22/03/2016 Versi 3.10 - Menambahkan tanda "Selalu timpa referensi" untuk penulisan ulang wajib objek yang direferensikan (kecepatan transfer berkurang secara signifikan, tetapi terkadang perlu). Tab "Persiapan" telah ditambahkan, di mana Anda dapat mengonfigurasi korespondensi bagan akun sumber dan tujuan (pada tingkat yang sama dengan kode akun) dan transfer konstanta. Peron 8.3.7.1970, BP 3.0.43.148

04/03/2016 Versi 3.11 Pengisian daftar dokumen yang ada pada sumbernya diubah: diisi dengan pergerakan sesuai bagan akun, dilakukan cukup dengan link periode, seperti pada // situs/publik/509628/

Pemrosesan dimaksudkan untuk mentransfer data untuk periode apa pun dengan cara yang sama seperti "Mengunggah MXL" dengan ITS, hanya saja tanpa menggunakan XML, JSON, dan file perantara lainnya - pertukaran dari database ke database melalui COM. Dalam versi yang lebih lama dari 3.10, koneksi digunakan menggunakan algoritma dari BSP, yang menyediakan pendaftaran comcntr.dll (jika OS "mengizinkan"), serta berbagai pesan ketika tidak mungkin membuat koneksi, misalnya contoh - “Basis informasi sedang dalam proses pembaruan,” dll. Menambahkan pemeriksaan untuk memilih penerima sebagai sumber IS - peringatan dikeluarkan.

Dapat digunakan untuk:

1. Transfer informasi referensi peraturan (RNI) dari sumber IS ke tujuan IS (transfer semua informasi referensi dilakukan atas permintaan pengguna, buku referensi yang diperlukan, dll. ditransfer melalui tautan selama transfer apa pun).

2. Transfer dokumen untuk setiap periode yang dipilih.

3. Transfer semua informasi dari sistem keamanan informasi yang “rusak” jika diluncurkan dalam mode 1C:Enterprise, dan tidak mungkin mengunggah data atau meluncurkan Configurator.

Fitur pemrosesan - keamanan informasi penerima dan sumber mungkin berbeda; transfer dari 2.0 ke 3.0 - edisinya berbeda, tetapi transfer berhasil!!! Detail yang tidak cocok akan diabaikan, atau algoritme transfer harus ditentukan untuk detail tersebut.

Komentar: Konversi data TIDAK DIGUNAKAN! Dan jangan tanya kenapa!!! Bagi mereka yang sangat pilih-pilih - BP 3.0 berubah hampir setiap hari, tidak ada lagi kekuatan untuk selalu memperbarui aturan transfer - semuanya lebih sederhana di sini :-).

Fitur lain dari pemrosesan ini adalah bahwa ia diluncurkan dalam keamanan informasi penerima (analog yang fungsinya paling dekat bekerja sebaliknya - dari sumber ke penerima).

Memulai - Anda perlu menentukan periode pemrosesan, menentukan organisasi dari sumber, itu akan ditransfer ke tujuan.

Saat mentransfer suatu organisasi, kebijakan akuntansi dan register informasi "terkait" ditransfer. Oleh karena itu, saat Anda pertama kali memilih organisasi di sumbernya, akan memakan waktu lama sebelum organisasi tersebut muncul di penerima.

Bagan akun sumber dan tujuan harus sama, tidak ada akun berbeda di versi 2.* yang ditransfer ke tujuan, direncanakan untuk memungkinkan penyesuaian akun dan analitik yang cocok di masa mendatang. Rekening yang ditransfer menggunakan kode yang tidak terdapat pada penerima TIDAK BISA DIBUAT!!!

Objek lainnya ditransfer menggunakan pengidentifikasi internal (GUID), jadi Anda harus memperhatikan beberapa direktori utama, misalnya - Mata Uang.

Jika Anda berencana untuk bertukar dengan database "bersih", maka lebih baik menghapus direktori yang diisi pada peluncuran pertama sebelum pertukaran. Mengapa ada halaman dalam pemrosesan di mana Anda bisa mendapatkan elemen direktori ini dan menghapusnya. Minimal, Anda perlu menghapus mata uang "gosok". - Karena duplikasi hampir tidak dapat dihindari (pada prinsipnya, hal ini mudah diperbaiki setelah berbagi pencarian dan penggantian duplikat yang ada di BP 3.0).

Pemrosesan menyediakan pemanggilan halaman penghapusan direktori ketika formulir pengisian awal terbuka:

Saat Anda membuka pemrosesan, halaman untuk menghapus direktori yang diisi selama pengisian awal akan ditampilkan:

Sejak versi 3.22, antarmuka telah diubah, sekarang semua operasi persiapan ada di tab dan selalu tersedia


Penting untuk memeriksa korespondensi Bagan Akun sumber dan penerima dan pastikan untuk menunjukkan korespondensi akun-akun tersebut.

Tidak perlu menghapus elemen direktori yang telah ditentukan sebelumnya - elemen tersebut ditransfer oleh pengidentifikasi konfigurasi (bukan GUID).

Anda dapat memilih objek untuk ditransfer menggunakan formulir pemilihan dari direktori dan dokumen (register informasi yang terkait dengan objek ini akan ditransfer secara otomatis, jadi tidak perlu memilihnya secara terpisah).Transfer register, pengurangan untuk sementara dinonaktifkan - Anda perlu mengembangkan daftar register untuk transfer - ada yang harus ditransfer, ada yang tidak, pada tahap ini cukup apa yang ditransfer di direktori, daftar register untuk transfer akan menjadi dalam templat di versi mendatang.

Saat bertukar dengan 2.0, beberapa detail (misalnya, Kontak informasi) ditransfer sesuai dengan algoritma yang dibangun dalam pemrosesan, karena untuk 2.0 dan 3.0 disimpan secara berbeda. Situasi serupa terjadi pada sejumlah dokumen (misalnya, Penyesuaian Hutang).

Daftar tipe objek dapat diisi berbeda-beda di versi 3.22, ditempatkan di submenu, perubahannya ditunjukkan pada gambar:

Ada penyederhanaan penggunaan pemrosesan - Anda tidak dapat memilih direktori untuk ditukar, tetapi cukup mengisi daftar jenis di penerima hanya dengan jenis direktori yang memiliki setidaknya satu entri di sumbernya.

Pemrosesan memiliki tata letak bawaan yang mencantumkan direktori yang tidak perlu ditransfer dari sumber ke tujuan (tata letak "Kecualikan dari transfer"). Anda dapat menambahkan (menghapus) direktori apa pun ke tata letak ini. Jika tidak perlu mentransfer semua data referensi, cukup mentransfer dokumen yang daftarnya juga bisa didapat tanpa memilih jenis, cukup isi semua dokumen sumber yang transaksinya ada.

Pemindahan dokumen dengan perpindahan disediakan; untuk pertukaran 3.0 ke 3.0 dan korespondensi bagan akun, ini berfungsi satu lawan satu; ketika menukar 2.0 ke 3.0, kesalahan mungkin terjadi, jadi disarankan untuk mentransfer dokumen tanpa perpindahan, dan kemudian cukup transfer ke penerima. Saat mentransfer dokumen dengan gerakan, bendera “Penyesuaian manual” disetel.

Atribut "Diposting" diatur dalam dokumen penerima dengan cara yang sama seperti di sumbernya, tetapi pergerakan (jika tidak ditransfer) hanya akan muncul setelah dokumen diproses, misalnya, menggunakan pemrosesan yang ada di dalam postingan Grup BP 3.0. dokumen (opsi yang disarankan), atau dari pemrosesan ini (Ada tombol “Posting Dokumen” di sini).

Jika pemrosesan direncanakan untuk digunakan untuk pertukaran permanen, maka dapat didaftarkan di keamanan informasi penerima (tombol “Daftar”). Untuk transfer “satu kali”, Anda cukup menggunakannya melalui File - Buka.

21/12/2015 - Platform versi 3.1 8.3.7.1805 dan unit catu daya 3.0.43.29 (versi 2.15 untuk 3.0.43.* tidak berfungsi - konfigurasi telah banyak diubah).

Berubah:

Dialog untuk memilih opsi koneksi, bendera Client-server selalu tersedia, tergantung pada pengaturannya, baik pilihan folder database file, atau bidang dengan nama database di server dan nama server itu sendiri adalah tersedia (bug pada dialog versi 2.15 telah diperbaiki)

- FUNGSIONALITAS BARU: Mekanisme untuk merekonsiliasi saldo dan perputaran antara database sumber dan penerima dalam berbagai tingkat detail:


Menurut saya pilihan opsi verifikasi jelas dari gambar:


Ada perbedaan penggunaan di klien tipis dan tebal - di klien tebal, jendela perbandingan file segera ditampilkan:


Di klien tipis, saya tidak repot-repot menekan tombol secara terprogram; saya menyarankan opsi sederhana untuk menampilkan jendela perbandingan:


Perbandingan di klien tipis, IMHO, lebih nyaman, karena... memiliki tombol navigasi untuk perbedaan, yang lebih nyaman untuk tabel besar daripada menggulir dengan mouse:

22/03/2016 Versi 3.10 - Menambahkan tanda "Selalu timpa referensi" untuk penulisan ulang wajib objek yang direferensikan (kecepatan transfer berkurang secara signifikan, tetapi terkadang perlu). Tab "Persiapan" telah ditambahkan, di mana Anda dapat mengonfigurasi korespondensi bagan akun sumber dan tujuan (pada tingkat yang sama dengan kode akun) dan transfer konstanta. Peron 8.3.7.1970, BP 3.0.43.148

- FUNGSIONALITAS BARU: Sebelum mentransfer dokumen, disarankan untuk memeriksa bagan akun untuk konsistensi sumber dan tujuan, serta kepatuhan terhadap konstanta yang ditetapkan.

Untuk tujuan ini, tab “Persiapan” telah ditambahkan di mana Anda dapat mengatur korespondensi berikut:


Algoritme untuk mengisi tabel pencocokan akun sederhana - omset yang ada di sumber dianalisis, dan untuk setiap akun yang ditemukan di sana, kecocokan ditemukan di penerima dengan kode; jika kecocokan tidak ditemukan, baris dengan akun kode ditampilkan di tabel, di mana Anda harus memilih akun penerima, itu akan digunakan saat transfer. Kepatuhan Poke ditetapkan pada tingkat kode.

Untuk memeriksa dan mentransfer korespondensi dari konstanta yang ditetapkan, tabel yang sesuai digunakan:

Kami mengisinya dan mentransfernya jika perlu. Hanya konstanta yang ditandai dengan bendera yang ditransfer...

Tumpukan program adalah area memori khusus yang diatur menurut prinsip antrian LIFO (Last in, first out). Nama "tumpukan" berasal dari analogi prinsip konstruksinya dengan tumpukan pelat - Anda dapat meletakkan pelat di atas satu sama lain (metode menambahkan ke tumpukan, "dorong", "dorong"), dan kemudian singkirkan, mulai dari atas (metode mendapatkan nilai dari tumpukan, "popping", "pop"). Tumpukan program juga disebut tumpukan panggilan, tumpukan eksekusi, atau tumpukan mesin (agar tidak tertukar dengan "tumpukan" - struktur data abstrak).

Untuk apa tumpukan? Ini memungkinkan Anda mengatur pemanggilan subrutin dengan mudah. Saat dipanggil, fungsi menerima beberapa argumen; itu juga harus menyimpan variabel lokalnya di suatu tempat. Selain itu, kita harus memperhitungkan bahwa satu fungsi dapat memanggil fungsi lain, yang juga perlu meneruskan parameter dan menyimpan variabelnya. Menggunakan tumpukan, saat meneruskan parameter Anda hanya perlu meletakkannya di tumpukan, lalu fungsi yang dipanggil dapat “memunculkan” parameter tersebut dari sana dan menggunakannya. Variabel lokal juga dapat disimpan di sana - di awal kodenya, fungsi mengalokasikan sebagian dari memori tumpukan, dan ketika kontrol kembali, ia akan menghapus dan mengosongkannya. Pemrogram dalam bahasa tingkat tinggi biasanya tidak memikirkan hal seperti itu - kompiler menghasilkan semua kode rutin yang diperlukan untuk mereka.

Konsekuensi dari kesalahan

Sekarang kita hampir mendekati masalahnya. Secara abstrak, tumpukan adalah penyimpanan tak terbatas di mana item baru dapat ditambahkan tanpa henti. Sayangnya, di dunia kita semuanya terbatas - tidak terkecuali memori tumpukan. Apa yang terjadi jika ini berakhir ketika argumen fungsi dimasukkan ke dalam tumpukan? Atau apakah fungsi tersebut mengalokasikan memori untuk variabelnya?

Kesalahan yang disebut stack overflow akan terjadi. Karena tumpukan diperlukan untuk mengatur pemanggilan fungsi yang ditentukan pengguna (dan hampir semua program dalam bahasa modern, termasuk program berorientasi objek, dibangun berdasarkan fungsi dalam satu atau lain cara), mereka tidak lagi dapat disebut. Oleh karena itu, sistem operasi mengambil kendali, membersihkan tumpukan, dan menghentikan program. Di sini kita dapat menekankan perbedaan antara stack overflow dan stack overflow - dalam kasus pertama, kesalahan terjadi ketika mengakses area memori yang salah, dan jika tidak ada perlindungan pada tahap ini, kesalahan itu tidak muncul dengan sendirinya pada saat itu - jika berhasil kombinasi keadaan, program dapat bekerja secara normal. Andai saja memori yang diakses dilindungi, . Jika terjadi tumpukan, program pasti akan berhenti.

Untuk lebih tepatnya, perlu dicatat bahwa deskripsi peristiwa seperti itu hanya berlaku untuk kompiler yang mengkompilasi ke kode asli. Dalam bahasa yang dikelola, mesin virtual memiliki tumpukannya sendiri untuk program yang dikelola, yang statusnya jauh lebih mudah untuk dipantau, dan Anda bahkan dapat memberikan pengecualian pada program tersebut ketika terjadi overflow. Dalam bahasa C dan C++ Anda tidak dapat mengandalkan “kemewahan” seperti itu.

Alasan kesalahan tersebut

Apa yang bisa menyebabkan situasi yang tidak menyenangkan seperti ini? Berdasarkan mekanisme yang dijelaskan di atas, salah satu kemungkinannya adalah terdapat terlalu banyak pemanggilan fungsi yang disarangkan. Skenario ini sangat mungkin terjadi saat menggunakan rekursi. Rekursi tak terbatas (dengan tidak adanya mekanisme evaluasi yang malas) diinterupsi dengan cara ini, sebagai lawan dari , yang terkadang memiliki penerapan yang berguna. Namun, dengan sejumlah kecil memori yang dialokasikan ke tumpukan (yang, misalnya, khas untuk mikrokontroler), rangkaian panggilan sederhana mungkin sudah cukup.

Pilihan lainnya adalah variabel lokal, yang memerlukan banyak memori. Memiliki array lokal yang terdiri dari sejuta elemen, atau sejuta variabel lokal (Anda tidak pernah tahu apa yang terjadi) bukanlah ide terbaik. Bahkan satu panggilan ke fungsi serakah dapat dengan mudah menyebabkan stack overflow. Untuk memperoleh data dalam jumlah besar, lebih baik menggunakan mekanisme memori dinamis, yang memungkinkan Anda menangani kesalahan kekurangannya.

Namun, memori dinamis cukup lambat dalam hal alokasi dan dealokasi (karena sistem operasi menangani hal ini), dan dengan akses langsung Anda harus mengalokasikan dan membatalkan alokasi secara manual. Memori pada tumpukan dialokasikan dengan sangat cepat (pada kenyataannya, Anda hanya perlu mengubah nilai satu register); selain itu, objek yang dialokasikan pada tumpukan memiliki destruktor yang dipanggil secara otomatis ketika kontrol fungsi kembali dan tumpukan dibersihkan. Tentu saja keinginan untuk mendapatkan memori dari stack segera muncul. Oleh karena itu, cara ketiga untuk melakukan overflow adalah alokasi memori programmer sendiri pada stack. Pustaka C menyediakan fungsi alokasi khusus untuk tujuan ini. Menarik untuk dicatat bahwa jika fungsi untuk mengalokasikan memori dinamis malloc memiliki "kembaran" sendiri untuk membebaskannya, gratis, maka fungsi alokasi tidak memilikinya - memori dibebaskan secara otomatis setelah kontrol fungsi kembali. Mungkin ini hanya memperumit situasi - lagi pula, tidak mungkin mengosongkan memori sebelum keluar dari fungsi. Meskipun, menurut halaman manual, "fungsi alokasi bergantung pada mesin dan kompiler; pada banyak sistem implementasinya bermasalah dan bermasalah; penggunaannya sangat sembrono dan tidak disukai" - fungsi ini masih digunakan.

Contoh

Sebagai contoh, mari kita lihat kode untuk pencarian file rekursif yang terletak di MSDN:

Void DirSearch(String* sDir) ( coba ( // Temukan subfolder di folder yang diteruskan. String* d = Direktori::GetDirectories(sDir); int numDirs = d->get_Length(); for (int i= 0;saya< numDirs; i++) { // Find all the files in the subfolder. String* f = Directory::GetFiles(d[i],textBox1->Teks); int numFiles = f->get_Length(); untuk (int j=0; j< numFiles; j++) { listBox1->Item->Tambahkan(f[j]); ) DirSearch(d[i]); ) ) catch (Sistem::Pengecualian* e) ( Kotak Pesan::Tampilkan(e->Pesan); ) )

Fungsi ini mendapatkan daftar file di direktori tertentu, dan kemudian memanggil dirinya sendiri untuk elemen daftar yang kebetulan merupakan direktori. Oleh karena itu, dengan pohon yang cukup dalam berkas sistem, kami mendapatkan hasil alami.

Contoh pendekatan kedua, diambil dari pertanyaan “Mengapa stack overflow terjadi?” dari situs bernama Stack Overflow (situs ini adalah kumpulan pertanyaan dan jawaban tentang topik pemrograman apa pun, dan bukan hanya Stack Overflow, seperti yang terlihat):

#define W 1000 #define H 1000 #define MAX 100000 //... int main() ( int gambar; float dtr; initImg(image,dtr); return 0; )

Seperti yang Anda lihat, fungsi utama mengalokasikan memori pada tumpukan untuk array tipe int dan float, masing-masing dengan sejuta elemen, yang totalnya menghasilkan kurang dari 8 megabita. Jika Anda menganggap bahwa secara default Visual C++ hanya mencadangkan 1 megabyte untuk tumpukan, maka jawabannya menjadi jelas.

Dan berikut adalah contoh yang diambil dari repositori GitHub proyek pemutar Flash Lightspark:

DefineSoundTag::DefineSoundTag(/* ... */) ( // ... unsigned int soundDataLength = h.getLength()-7; unsigned char *tmp = (unsigned char *)alloca(soundDataLength); // .. . )

Anda bisa berharap h.getLength()-7 angkanya tidak terlalu besar agar tidak terjadi overflow pada baris berikutnya. Namun apakah waktu yang dihemat pada alokasi memori sebanding dengan “potensi” crash program?

Intinya

Stack overflow adalah kesalahan fatal yang paling sering mempengaruhi program yang berisi fungsi rekursif. Namun, bahkan jika program tidak berisi fungsi-fungsi tersebut, overflow masih mungkin terjadi karena ukuran variabel lokal yang besar atau kesalahan dalam alokasi memori secara manual pada stack. Semua aturan klasik tetap berlaku: jika ada pilihan, lebih baik memilih iterasi daripada rekursi, dan juga jangan melakukan pekerjaan manual daripada kompiler.

Bibliografi

  • E. Tanenbaum. Arsitektur komputer.
  • Wikipedia. Tumpukan meluap.
  • Tumpukan Melimpah. Tumpukan luapan C++.

Tumpukan, dalam konteks ini, adalah yang terakhir di buffer pertama yang Anda alokasikan selama eksekusi program Anda. Terakhir, Pertama (LIFO) berarti benda terakhir yang Anda masukkan selalu benda pertama yang Anda keluarkan - jika Anda memunculkan 2 item di tumpukan, "A" dan kemudian "B", maka benda pertama yang Anda keluarkan dari tumpukan akan menjadi "B" dan berikutnya adalah "A".

Saat Anda memanggil suatu fungsi dalam kode Anda, perintah berikutnya setelah pemanggilan fungsi disimpan di tumpukan dan ruang memori apa pun yang dapat ditimpa oleh pemanggilan fungsi tersebut. Fungsi yang dipilih dapat menggunakan lebih banyak tumpukan untuk variabel lokalnya sendiri. Ketika ini selesai, ini akan mengosongkan ruang variabel lokal yang digunakannya dan kemudian kembali ke fungsi sebelumnya.

Tumpukan Melimpah

Stack overflow adalah ketika Anda telah menggunakan lebih banyak memori pada stack daripada yang seharusnya digunakan oleh program Anda. Pada sistem tertanam, Anda mungkin hanya memiliki 256 byte untuk tumpukan, dan jika setiap fungsi membutuhkan 32 byte, maka Anda hanya dapat memiliki 8 panggilan fungsi ke fungsi 2 dengan fungsi dalam 1, yang memanggil fungsi 3, yang memanggil fungsi 4.. .siapa yang memanggil fungsi 8, yang memanggil fungsi 9, namun fungsi 9 menimpa memori di luar tumpukan. Ini mungkin menimpa memori, kode, dll.

Banyak pemrogram melakukan kesalahan ini dengan memanggil fungsi A, yang kemudian memanggil fungsi B, yang kemudian memanggil fungsi C, yang kemudian memanggil fungsi A. Fungsi ini mungkin berfungsi hampir sepanjang waktu, tetapi hanya satu masukan yang salah akan menyebabkannya berputar selamanya hingga komputer gagal menemukan bahwa tumpukan sudah penuh.

Fungsi rekursif juga merupakan penyebab hal ini, tetapi jika Anda menulis secara rekursif (yaitu fungsi Anda memanggil dirinya sendiri) maka Anda perlu menyadari hal ini dan menggunakan variabel statis/global untuk mencegah rekursi tanpa akhir.

Biasanya, OS dan bahasa pemrograman yang Anda gunakan mengelola tumpukan tersebut, dan itu di luar kendali Anda. Anda harus melihat grafik panggilan Anda (struktur pohon yang menunjukkan dari poin utama Anda apa yang dipanggil setiap fungsi) untuk melihat seberapa dalam pemanggilan fungsi Anda, dan mengidentifikasi loop dan rekursi yang tidak dimaksudkan. Perulangan dan rekursi yang disengaja harus diperiksa kesalahannya secara artifisial jika keduanya terlalu sering memanggil satu sama lain.

Terlepas dari praktik pemrograman yang baik, pengujian statis dan dinamis, tidak banyak yang dapat Anda lakukan dalam sistem tingkat tinggi ini.

Sistem Tertanam

Di dunia tertanam, khususnya dalam kode jaminan tinggi (otomotif, dirgantara, dirgantara), Anda melakukan pengujian ekstensif dan peninjauan kode, namun Anda juga melakukan hal berikut:

  • Nonaktifkan rekursi dan loop - kepatuhan kebijakan dan pengujian
  • Simpan kode dan tumpukan berjauhan (kode dalam flash, tumpukan dalam RAM dan tidak akan pernah cocok satu sama lain)
  • Tempatkan palang pengaman di sekitar tumpukan - area memori kosong yang Anda isi dengan angka ajaib (biasanya rutinitas interupsi, tetapi ada banyak variasi di sini) dan ratusan atau ribuan kali per detik Anda melihat palang pengaman untuk membuatnya yakin mereka belum ditimpa.
  • Gunakan perlindungan memori (yaitu jangan mengeksekusi di tumpukan, jangan membaca atau menulis langsung di belakang tumpukan)
  • Interupsi tidak memanggil fungsi sekunder - interupsi menetapkan tanda, menyalin data, dan membiarkan aplikasi menanganinya (jika tidak, Anda bisa berakhir jauh di dalam pohon pemanggilan fungsi Anda, melakukan interupsi, dan kemudian memiliki beberapa fungsi lagi di dalamnya pintu keluar interupsi, menyebabkan lemparan). Anda memiliki beberapa pohon panggilan - satu untuk proses utama dan satu untuk setiap interupsi. Jika interupsi kalian bisa mengganggu satu sama lain... yah, ada naga...

Bahasa dan sistem tingkat tinggi

Namun dalam bahasa tingkat tinggi yang berjalan di sistem operasi:

  • Kurangi penyimpanan variabel lokal (variabel lokal disimpan di tumpukan), meskipun kompiler cukup pintar dalam hal ini dan terkadang akan meletakkan potongan besar di tumpukan jika pohon panggilan Anda dangkal)
  • Hindari atau batasi rekursi secara ketat
  • Jangan interupsi program Anda terlalu jauh ke dalam fungsi-fungsi yang semakin kecil - bahkan tanpa mempertimbangkan variabel lokal, setiap pemanggilan fungsi menghabiskan hingga 64 byte pada tumpukan (prosesor 32-bit, menghemat setengah register prosesor, flag, dll.).
  • Jaga agar pohon panggilan tetap dangkal (mirip dengan uraian di atas)

Server web

Itu tergantung pada kotak pasir yang Anda miliki apakah Anda dapat mengontrol atau bahkan melihat tumpukannya. Kemungkinannya adalah Anda dapat menangani server web seperti bahasa dan sistem operasi tingkat tinggi lainnya - sebagian besar berada di luar kendali Anda, namun periksalah bahasa dan tumpukan server yang Anda gunakan. Misalnya, Anda dapat membagi tumpukan di server SQL Anda.

Panduan Pemrogram API Informix® DataBlade™ tersedia untuk diunduh. Bagian "Mengelola Ruang Tumpukan" menjelaskan pembuatan fungsi yang ditentukan pengguna (UDR). Artikel ini memberikan informasi tambahan dan tips debugging.

Informasi berikut ini berlaku apakah UDR berjalan pada prosesor virtual (VP) yang ditentukan pengguna atau pada VP CPU. Tumpukan thread dapat dipindahkan ke prosesor virtual yang ditentukan pengguna segera sebelum mengeksekusi UDR.

Berapa ukuran tumpukan yang dialokasikan untuk UDR?

Ukuran tumpukan yang tersedia untuk UDR bergantung pada cara UDR dibuat:

    menggunakan pengubah STACK, yang memungkinkan UDR menggunakan tumpukan yang dialokasikan secara khusus,

    tanpa pengubah STACK, yang berarti UDR akan berbagi tumpukan yang dialokasikan oleh server dengan thread yang membuat permintaan. Ukuran tumpukan dalam hal ini akan ditentukan oleh nilai parameter STACKSIZE pada file konfigurasi onconfig.

pengubah STACK

Pernyataan CREATE PROCEDURE atau CREATE FUNCTION memiliki pengubah STACK opsional yang memungkinkan Anda menentukan jumlah ruang tumpukan, dalam byte, yang diperlukan untuk mengeksekusi UDR.

Jika Anda menggunakan pengubah STACK saat membuat UDR, server akan mengalokasikan dan membatalkan alokasi ruang tumpukan setiap kali UDR dijalankan. Ukuran sebenarnya yang tersedia sama dengan nilai STACK dalam byte dikurangi beberapa overhead tergantung pada jumlah argumen fungsi.

Jika nilai STACK lebih kecil dari parameter STACKSIZE di file onconfig (lihat bagian selanjutnya), maka ukuran tumpukan yang dialokasikan untuk UDR akan otomatis dibulatkan ke nilai STACKSIZE.

Parameter konfigurasi STACKSIZE

File konfigurasi onconfig menyertakan parameter STACKSIZE yang menentukan ukuran tumpukan default untuk thread pengguna.

Jika Anda tidak menentukan STACK saat membuat UDR, server tidak mengalokasikan ruang tumpukan tambahan untuk mengeksekusi UDR tersebut. Sebaliknya, UDR menggunakan ruang tumpukan yang dialokasikan untuk menjalankan permintaan. Ukuran tumpukan yang tersedia akan bergantung pada overhead pelaksanaan fungsi di tingkat SQL.

Tumpukan per thread dialokasikan satu kali untuk thread tertentu yang menjalankan permintaan. Kinerja lebih baik ketika UDR berbagi satu tumpukan dengan thread, karena server tidak menyia-nyiakan sumber daya untuk mengalokasikan tumpukan tambahan untuk setiap panggilan UDR. Di sisi lain, jika ukuran tumpukan yang digunakan oleh UDR mendekati nilai STACKSIZE, hal ini dapat menyebabkan tumpukan meluap saat memanggil fungsi sebagai bagian dari kueri kompleks (dalam hal ini, lebih sedikit ruang tumpukan yang tersedia untuk eksekusi UDR).

Harap dicatat bahwa Anda tidak boleh menetapkan nilai STACKSIZE terlalu tinggi, karena ini akan mempengaruhi semua thread pengguna.

Kapan perlunya mengontrol ukuran tumpukan?

YAnda harus mengelola ruang tumpukan jika UDR melakukan panggilan rekursif atau jika UDR memerlukan lebih banyak ruang tumpukan daripada yang tersedia secara default di tumpukan thread permintaan (STACKSIZE).

Ada dua cara untuk meningkatkan tumpukan untuk eksekusi UDR:

    Tentukan pengubah STACK saat membuat UDR.

    Gunakan mi_call() untuk melakukan panggilan rekursif (lihat Panduan Pemrogram API Informix DataBlade untuk contohnya).

Jika Anda tidak menentukan ukuran melalui STACK, dan jika Anda tidak menggunakan mi_call() untuk menambah tumpukan saat ini, dan jika UDR melakukan sesuatu yang memerlukan banyak ruang tumpukan, hal itu akan menyebabkan tumpukan meluap.

Perhatikan bahwa beberapa fungsi mi_* menambahkan segmen tumpukan baru untuk eksekusinya sendiri. Segmen ini dibebaskan ketika kembali ke fungsi UDR pemanggil.

Apa yang harus dilakukan jika terjadi kesalahan?

Memantau Penggunaan Tumpukan

Tujuan pemantauan adalah untuk mengidentifikasi UDR spesifik yang menyebabkan stack overflow sehingga Anda dapat mengubah nilai STACK khusus untuk UDR tersebut.

    Memantau penggunaan tumpukan dengan perintah "onstat -g sts".

    Memantau sesi yang menjalankan kueri SQL menggunakan "onstat -g ses session_id"

Setelah mengidentifikasi kueri SQL yang berakhir pada stack overflow, Anda harus menentukan penggunaan tumpukan dengan mengeksekusi kueri UDR secara terpisah yang merupakan bagian dari kueri asli.

Anda dapat secara dinamis mengatur nilai STACK untuk UDR. Misalnya:

ubah fungsi MyFoo (lvarchar,lvarchar) dengan (tambahkan tumpukan=131072);

Setelah mengubah nilai STACK, Anda harus menguji permintaan asli untuk memastikan bahwa permintaan tersebut sekarang stabil.

Tingkatkan UKURAN TUMPUKAN

Alternatifnya, coba tingkatkan nilai STACKSIZE. Periksa apakah ini menyelesaikan masalah. (Jangan lupa untuk mengembalikan nilai yang lama nanti).

Jika meningkatkan STACKSIZE tidak membantu, kemungkinan besar masalahnya adalah kerusakan memori. Berikut adalah beberapa saran:

    Aktifkan coretan memori dan pemeriksaan kumpulan memori. Bagian "Masalah Debugging" di artikel Alokasi Memori untuk UDR menjelaskan cara melakukannya.

    Pertimbangkan kembali untuk menggunakan mi_lvarchar . Perhatian khusus harus diberikan pada tempat di mana mi_lvarchar diteruskan ke fungsi yang mengharapkan untuk menerima string yang diakhiri dengan null sebagai argumen.

    Kurangi jumlah VP CPU (atau pengguna) menjadi satu untuk mereproduksi masalah lebih cepat.

mi_print_stack() --Solaris

Server Dinamis Informix untuk Solaris OS menyertakan fungsi mi_print_stack() yang dapat dipanggil di UDR. Secara default, fungsi ini menyimpan frame tumpukan ke file berikut:

/tmp/default.stack

Anda tidak dapat mengubah nama file keluaran, namun Anda dapat mengubah lokasinya dengan mengubah nilai variabel lingkungan DBTEMP. Pastikan direktori $DBTEMP dapat ditulis oleh pengguna informix. Setiap kesalahan yang ditemukan saat menjalankan mi_print_stack() dilaporkan ke $MSGPATH.

Fitur ini hanya tersedia untuk OC Solaris.

Glosarium

Istilah dan singkatan yang digunakan dalam artikel ini:

UDRRutinitas yang Ditentukan Pengguna
V.P.Prosesor Virtual

Artikel ini sekali lagi menunjukkan bahwa setiap rangkaian tindakan keamanan harus mencakup semua tahapan implementasi: pengembangan, penerapan, administrasi sistem dan, tentu saja, tindakan organisasi. Dalam sistem informasi, “faktor manusia” (termasuk pengguna) merupakan ancaman keamanan utama. Serangkaian tindakan ini harus masuk akal dan seimbang: tidak masuk akal dan kecil kemungkinannya akan ada cukup dana yang dialokasikan untuk mengatur perlindungan yang melebihi biaya data itu sendiri.

Perkenalan

1C:Enterprise adalah sistem akuntansi paling umum di Rusia, namun meskipun demikian, hingga versi 8.0, pengembangnya kurang memperhatikan masalah keamanan. Pada dasarnya, tentu saja, hal ini ditentukan oleh ceruk harga produk dan fokus pada usaha kecil di mana tidak ada spesialis TI yang berkualifikasi, dan kemungkinan biaya penerapan dan pemeliharaan sistem yang aman akan sangat mahal bagi perusahaan. Dengan dirilisnya versi 8.0, penekanannya harus berubah: biaya solusi meningkat secara signifikan, sistem menjadi lebih terukur dan fleksibel, dan persyaratan berubah secara signifikan. Apakah sistem sudah cukup andal dan aman merupakan pertanyaan yang sangat individual. Sistem informasi utama perusahaan modern setidaknya harus memenuhi persyaratan keamanan berikut:

  • Kemungkinan kegagalan sistem karena alasan internal cukup rendah.
  • Otorisasi pengguna yang andal dan perlindungan data dari tindakan yang salah.
  • Sistem yang efektif untuk menetapkan hak pengguna.
  • Sistem pencadangan dan pemulihan online jika terjadi kegagalan.

Apakah solusi berdasarkan 1C:Enterprise 8.0 memenuhi persyaratan ini? Tidak ada jawaban yang jelas. Meskipun ada perubahan signifikan dalam sistem kontrol akses, masih banyak masalah yang belum terselesaikan. Bergantung pada bagaimana sistem dirancang dan dikonfigurasi, semua persyaratan ini mungkin tidak dipenuhi atau dipenuhi secara memadai untuk implementasi tertentu, namun hal ini perlu diperhatikan (dan ini adalah konsekuensi signifikan dari “masa muda” platform. ) bahwa untuk sepenuhnya memenuhi syarat-syarat yang tercantum perlu dilakukan upaya yang sungguh-sungguh besar.

Artikel ini ditujukan untuk pengembang dan pelaksana solusi pada platform 1C:Enterprise, serta administrator sistem organisasi tempat 1C:Enterprise digunakan, dan menjelaskan beberapa aspek pengembangan dan konfigurasi versi klien-server sistem dari sudut pandang pandangan organisasi informasi keamanan. Artikel ini tidak dapat digunakan sebagai pengganti dokumentasi, tetapi hanya menunjukkan beberapa poin yang belum tercermin di dalamnya. Dan, tentu saja, baik artikel ini maupun seluruh dokumentasinya tidak akan mampu mencerminkan kompleksitas masalah dalam membangun sistem informasi yang aman, yang pada saat yang sama harus memenuhi persyaratan keamanan, kinerja, kenyamanan, dan fungsionalitas yang saling bertentangan.

Klasifikasi dan terminologi

Subjek utama yang menjadi pertimbangan dalam artikel ini adalah ancaman informasi.

Ancaman informasi– kemungkinan situasi dimana data akan dibaca, disalin, diubah atau diblokir tanpa izin.

Dan berdasarkan definisi tersebut, artikel tersebut mengklasifikasikan ancaman informasi sebagai berikut:

  • Penghancuran data tanpa izin
  • Perubahan data yang tidak sah
  • Penyalinan data yang tidak sah
  • Pembacaan data yang tidak sah
  • Tidak tersedianya data

Semua ancaman dibagi menjadi disengaja dan tidak disengaja. Kami akan menyebutnya sebagai ancaman informasi yang nyata kejadian. Fitur sistem adalah:

Kerentanan– fitur yang mengarah pada insiden Langkah-langkah perlindungan– fitur yang menghalangi kemungkinan terjadinya insiden

Pada dasarnya, hanya kasus-kasus tersebut yang dipertimbangkan, kemungkinannya disebabkan oleh penggunaan platform teknologi 1C:Enterprise 8.0 dalam versi client-server (selanjutnya, dalam kasus di mana hal ini tidak bertentangan dengan arti 1C atau 1C 8.0 saja) . Mari kita tentukan peran utama berikut sehubungan dengan penggunaan sistem:

  • Operator– pengguna yang memiliki hak untuk melihat dan mengubah data yang dibatasi oleh peran aplikasi, namun tidak memiliki fungsi administratif
  • Administrator sistem– pengguna yang memiliki hak administratif dalam sistem, termasuk hak administratif dalam sistem operasi server aplikasi dan server MS SQL, hak administratif dalam MS SQL, dll.
  • Administrator keamanan informasi– pengguna yang kepadanya fungsi administratif tertentu dalam basis informasi 1C didelegasikan (seperti menambahkan pengguna, menguji dan memperbaiki, membuat cadangan, menyiapkan solusi aplikasi, dll.)
  • Pengembang sistem– pengguna mengembangkan solusi aplikasi. Secara umum, mereka mungkin tidak memiliki akses ke sistem kerja.
  • Orang yang tidak memiliki akses langsung ke sistem– pengguna yang tidak mendelegasikan hak akses ke 1C, tetapi pada tingkat tertentu dapat mempengaruhi pengoperasian sistem (biasanya ini semua adalah pengguna dari domain Direktori Aktif yang sama tempat sistem diinstal). Kategori ini dianggap terutama untuk mengidentifikasi subjek yang berpotensi berbahaya dalam sistem.
  • Skrip administratif otomatis– program yang fungsi-fungsi tertentu didelegasikan, dirancang untuk melakukan tindakan tertentu secara otomatis (misalnya, impor-ekspor data)

Ada dua hal yang perlu diperhatikan di sini: pertama, klasifikasi ini sangat kasar dan tidak memperhitungkan pembagian dalam setiap kelompok - pembagian seperti itu akan dibuat untuk beberapa kasus tertentu, dan kedua, diasumsikan bahwa orang lain tidak dapat mempengaruhi operasi. sistem, yang harus disediakan melalui sarana di luar 1C.

Sistem keamanan apa pun harus dirancang dengan mempertimbangkan kelayakan dan biaya kepemilikan. Secara umum, ketika mengembangkan dan mengimplementasikan suatu sistem informasi, harga perlindungan sistem harus sesuai dengan:

  • nilai informasi yang dilindungi;
  • biaya untuk menciptakan suatu insiden (dalam kasus ancaman yang disengaja);
  • risiko keuangan jika terjadi insiden

Tidak ada gunanya dan berbahaya untuk mengorganisir pertahanan yang jauh lebih mahal daripada menilai efektivitas finansialnya. Ada beberapa metode untuk menilai risiko kehilangan informasi, namun metode tersebut tidak dibahas dalam cakupan artikel ini. Aspek penting lainnya adalah menjaga keseimbangan persyaratan yang sering bertentangan dalam hal keamanan informasi, kinerja sistem, kenyamanan dan kemudahan bekerja dengan sistem, kecepatan pengembangan dan implementasi, dan persyaratan lain untuk sistem informasi perusahaan.

Fitur utama dari mekanisme keamanan informasi sistem

1C:Enterprise 8.0 hadir dalam dua versi: file dan client-server. Versi file tidak dapat dianggap untuk menjamin keamanan informasi sistem karena alasan berikut:

  • Data dan konfigurasi disimpan dalam file yang dapat dibaca dan ditulis oleh semua pengguna sistem.
  • Seperti yang akan ditunjukkan di bawah, otorisasi sistem sangat mudah dilewati.
  • Integritas sistem hanya dijamin oleh kernel bagian klien.

Dalam versi client-server, MS SQL Server digunakan untuk menyimpan informasi, yang menyediakan:

  • Penyimpanan data yang lebih andal.
  • Isolasi file dari akses langsung.
  • Mekanisme transaksi dan penguncian yang lebih canggih.

Meskipun terdapat perbedaan signifikan antara versi sistem file dan server-klien, keduanya memiliki skema kontrol akses terpadu pada tingkat solusi aplikasi, yang memberikan kemampuan berikut:

  • Otorisasi pengguna menggunakan kata sandi yang ditentukan dalam 1C.
  • Otorisasi pengguna berdasarkan pengguna Windows saat ini.
  • Menetapkan peran kepada pengguna sistem.
  • Membatasi fungsi administratif berdasarkan peran.
  • Penetapan antarmuka yang tersedia berdasarkan peran.
  • Membatasi akses ke objek metadata berdasarkan peran.
  • Membatasi akses ke detail objek berdasarkan peran.
  • Membatasi akses ke objek data berdasarkan peran dan parameter sesi.
  • Membatasi akses interaktif ke data dan modul yang dapat dieksekusi.
  • Beberapa batasan eksekusi kode.

Secara umum, skema akses data yang digunakan cukup khas untuk sistem informasi tingkat ini. Namun, sehubungan dengan implementasi arsitektur klien-server tiga tingkat ini, terdapat beberapa aspek mendasar yang menyebabkan sejumlah besar kerentanan:

  1. Sejumlah besar tahapan pemrosesan data, dan pada setiap tahap, aturan yang berbeda untuk mengakses objek mungkin berlaku.

    Diagram tahapan pemrosesan data yang agak disederhanakan dan signifikan dari sudut pandang keamanan ditunjukkan pada Gambar 1. Peraturan umum untuk 1C adalah mengurangi batasan saat Anda menurunkan skema ini, oleh karena itu, gunakan kerentanan pada salah satu tingkat atas dapat mengganggu sistem di semua tingkatan.

  2. Prosedur yang ditetapkan untuk memantau data yang dikirimkan saat berpindah dari satu tingkat ke tingkat lainnya tidak memadai.

    Sayangnya, tidak semua mekanisme internal sistem di-debug dengan sempurna, terutama untuk mekanisme non-interaktif, yang proses debugnya selalu lebih memakan waktu di satu sisi, tetapi lebih bertanggung jawab di sisi lain. "Penyakit" ini bukan hanya masalah 1C, penyakit ini ditemukan di banyak produk server dari sebagian besar vendor. Hanya dalam beberapa tahun terakhir perhatian terhadap permasalahan ini meningkat secara signifikan.

  3. Kualifikasi rata-rata pengembang dan administrator sistem yang diwarisi dari versi sebelumnya tidak mencukupi.

    Produk dari lini 1C:Enterprise pada awalnya berfokus pada kemudahan pengembangan dan dukungan serta bekerja di organisasi kecil, sehingga tidak mengherankan bahwa secara historis telah berkembang bahwa sebagian besar “pengembang” solusi aplikasi dan “administrator” dari sistem tidak memiliki pengetahuan dan keterampilan yang memadai untuk bekerja dengan produk yang jauh lebih kompleks, yaitu versi 8.0. Masalah ini diperburuk oleh praktik yang diterapkan oleh perusahaan pewaralaba yang mengajarkan “dalam pertempuran” dengan mengorbankan klien, tanpa melakukan pendekatan sistematis terhadap masalah ini. Kita perlu memberi penghormatan kepada perusahaan 1C bahwa selama beberapa tahun terakhir situasi ini telah diperbaiki secara bertahap: perusahaan pewaralaba yang serius telah mulai mengambil pendekatan yang lebih bertanggung jawab terhadap masalah seleksi dan pelatihan personel, tingkat dukungan teknologi informasi dari perusahaan 1C telah meningkat secara signifikan, program sertifikasi telah muncul yang ditujukan untuk layanan tingkat tinggi; namun situasinya tidak dapat diperbaiki secara instan, jadi faktor ini harus diperhitungkan saat menganalisis keamanan sistem.

  4. Platform ini relatif muda.

    Di antara produk-produk dengan fokus dan tujuan penggunaan yang serupa, ini adalah salah satu solusi termuda. Fungsionalitas platform ini kurang lebih terbentuk kurang dari setahun yang lalu. Pada saat yang sama, setiap rilis platform, dimulai dengan 8.0.10 (dalam rilis inilah hampir semua kemampuan sistem saat ini diimplementasikan) menjadi jauh lebih stabil dibandingkan rilis sebelumnya. Fungsionalitas solusi aplikasi standar masih berkembang pesat, meskipun hanya setengah dari kemampuan platform yang digunakan. Tentu saja, dalam kondisi seperti itu kita dapat berbicara tentang stabilitas secara kondisional, tetapi secara umum harus diakui bahwa dalam banyak hal solusi pada platform 1C 8.0 jauh lebih unggul dalam fungsionalitas dan kinerja (dan seringkali dalam stabilitas) dibandingkan solusi serupa pada 1C. 7.7 platform.

Jadi, sistem (dan, mungkin, solusi aplikasi standar) diterapkan di perusahaan dan diinstal pada komputer. Pertama-tama, perlu untuk menciptakan lingkungan di mana pengaturan keamanan 1C masuk akal, dan untuk ini harus dikonfigurasi sedemikian rupa sehingga asumsi bahwa keamanan sistem dipengaruhi secara signifikan oleh pengaturan sistem terpenuhi.

Ikuti aturan umum untuk menyiapkan keamanan.

Tidak ada pembicaraan tentang keamanan informasi suatu sistem jika prinsip dasar menciptakan sistem yang aman tidak diikuti. Pastikan untuk memastikan bahwa setidaknya kondisi berikut terpenuhi:

  • Akses ke server dibatasi secara fisik dan pengoperasiannya dipastikan tidak terganggu:
    • peralatan server memenuhi persyaratan keandalan, penggantian peralatan server yang rusak telah disesuaikan, terutama untuk area kritis, skema dengan duplikasi perangkat keras digunakan (RAID, daya dari berbagai sumber, berbagai saluran komunikasi, dll.);
    • server terletak di ruangan terkunci, dan ruangan ini dibuka hanya selama pekerjaan yang tidak dapat dilakukan dari jarak jauh;
    • Hanya satu atau dua orang yang berhak membuka ruang server, dalam keadaan darurat, sistem pemberitahuan untuk orang yang bertanggung jawab telah dikembangkan;
    • pasokan listrik tidak terputus ke server dipastikan
    • kondisi iklim normal untuk pengoperasian peralatan dipastikan;
    • terdapat alarm kebakaran di ruang server, tidak ada resiko banjir (terutama untuk lantai satu dan terakhir);
  • Pengaturan jaringan dan infrastruktur informasi perusahaan diselesaikan dengan benar:
    • Firewall dipasang dan dikonfigurasi di semua server;
    • semua pengguna dan komputer diotorisasi di jaringan, kata sandinya cukup rumit sehingga tidak dapat ditebak;
    • operator sistem memiliki hak yang cukup untuk bekerja secara normal dengannya, tetapi tidak memiliki hak atas tindakan administratif;
    • alat anti-virus diinstal dan diaktifkan di semua komputer di jaringan;
    • Sebaiknya pengguna (kecuali administrator jaringan) tidak memiliki hak administratif pada stasiun kerja klien;
    • akses ke Internet dan media penyimpanan yang dapat dipindahkan harus diatur dan dibatasi;
    • audit sistem terhadap peristiwa keamanan harus dikonfigurasi;
  • Masalah organisasi utama telah diselesaikan:
    • pengguna memiliki kualifikasi yang memadai untuk bekerja dengan 1C dan perangkat keras;
    • pengguna diberitahu tentang tanggung jawab karena melanggar aturan pengoperasian;
    • orang yang bertanggung jawab secara finansial telah ditunjuk untuk setiap elemen material dari sistem informasi;
    • semua unit sistem disegel dan ditutup;
    • Berikan perhatian khusus pada instruksi dan pengawasan petugas kebersihan, pekerja konstruksi, dan teknisi listrik. Orang-orang ini, karena kelalaiannya, dapat menyebabkan kerusakan yang tidak sebanding dengan kerusakan yang disengaja yang disebabkan oleh pengguna sistem yang tidak bermoral.

Perhatian! Daftar ini tidak lengkap, tetapi hanya menjelaskan apa yang sering terlewatkan ketika menerapkan sistem informasi yang cukup rumit dan mahal!

  • MS SQL Server, server aplikasi dan bagian klien dijalankan di komputer yang berbeda, aplikasi server dijalankan di bawah hak pengguna Windows yang dibuat khusus;
  • Untuk MS SQL Server
    • mode otorisasi campuran diatur
    • Pengguna MS SQL yang termasuk dalam peran serveradmin tidak berpartisipasi dalam pekerjaan 1C,
    • untuk setiap IB 1C, pengguna MS SQL terpisah telah dibuat yang tidak memiliki akses istimewa ke server,
    • Pengguna MS SQL dari satu IS tidak memiliki akses ke IS lainnya;
  • Pengguna tidak memiliki akses langsung ke server aplikasi dan file server MS SQL
  • Stasiun kerja operator dilengkapi dengan Windows 2000/XP (bukan Windows 95/98/Me)

Jangan abaikan rekomendasi dari pengembang sistem dan membaca dokumentasi. Materi penting tentang pengaturan sistem dipublikasikan pada disk ITS di bagian “Rekomendasi Metodologis”. Berikan perhatian khusus pada artikel berikut:

  1. Fitur aplikasi yang bekerja dengan server 1C:Enterprise
  2. Penempatan data 1C:Enterprise 8.0
  3. Perbarui 1C:Enterprise 8.0 oleh pengguna Microsoft Windows tanpa hak administrator
  4. Mengedit daftar pengguna atas nama pengguna yang tidak memiliki hak administratif
  5. Mengonfigurasi Pengaturan Firewall Windows XP SP2 untuk Menjalankan SQL Server 2000 dan SQL Server Desktop Engine (MSDE)
  6. Mengonfigurasi parameter COM+ Windows XP SP2 untuk menjalankan server 1C:Enterprise 8.0
  7. Mengonfigurasi pengaturan firewall Windows XP SP2 untuk server 1C:Enterprise 8.0
  8. Mengonfigurasi pengaturan firewall Windows XP SP2 untuk Manajer Lisensi HASP
  9. Membuat Cadangan basis informasi menggunakan SQL Server 2000
  10. Masalah instalasi dan konfigurasi 1C:Enterprise 8.0 dalam versi "client-server".(salah satu artikel terpenting)
  11. Keunikan Pengaturan Windows Server 2003 saat menginstal server 1C:Enterprise 8.0
  12. Mengatur akses pengguna ke basis informasi dalam versi client-server(salah satu artikel terpenting)
  13. Server 1C:Perusahaan dan server SQL
  14. Prosedur instalasi terperinci untuk 1C:Enterprise 8.0 dalam versi "client-server".(salah satu artikel terpenting)
  15. Menggunakan bahasa bawaan di server 1C:Enterprise

Namun saat membaca dokumentasi, bersikaplah kritis terhadap informasi yang diterima, misalnya artikel “Masalah instalasi dan konfigurasi 1C:Enterprise 8.0 dalam versi client-server” tidak secara akurat menjelaskan hak yang diperlukan untuk pengguna USER1CV8SERVER. Akan ada link ke daftar di bawah, misalnya [ITS1] berarti artikel “Fitur aplikasi yang bekerja dengan server 1C:Enterprise”. Semua link ke artikel diberikan pada edisi terbaru ITS pada saat penulisan (Januari 2006)

Gunakan kemampuan otorisasi yang dikombinasikan dengan otorisasi Windows untuk pengguna

Dari dua kemungkinan mode otorisasi pengguna: 1C bawaan dan dikombinasikan dengan otorisasi OS Windows, jika memungkinkan, Anda harus memilih otorisasi gabungan. Hal ini akan memungkinkan pengguna tidak bingung dengan banyak kata sandi saat bekerja, namun tidak akan mengurangi tingkat keamanan sistem. Namun, bahkan untuk pengguna yang hanya menggunakan otorisasi Windows, sangat disarankan untuk mengatur kata sandi saat membuatnya, dan baru kemudian menonaktifkan otorisasi 1C untuk pengguna ini. Untuk memastikan pemulihan sistem jika terjadi kerusakan struktur Direktori Aktif, setidaknya satu pengguna harus dibiarkan yang dapat masuk ke sistem menggunakan otorisasi 1C.

Saat membuat peran solusi aplikasi, jangan menambahkan hak “sebagai cadangan”

Setiap peran solusi aplikasi harus mencerminkan serangkaian hak minimum yang diperlukan untuk melakukan tindakan yang ditentukan oleh peran ini. Namun, beberapa peran mungkin tidak dapat digunakan secara independen. Misalnya untuk peluncuran interaktif perawatan eksternal Anda dapat membuat peran terpisah dan menambahkannya ke semua pengguna yang perlu menggunakan pemrosesan eksternal.

Tinjau log dan protokol operasi sistem secara teratur

Jika memungkinkan, atur dan otomatiskan tampilan log dan protokol operasi sistem. Dengan konfigurasi yang tepat dan peninjauan log secara berkala (hanya memfilter berdasarkan peristiwa penting), tindakan tidak sah dapat dideteksi sejak dini atau bahkan dicegah selama tahap persiapan.

Beberapa fitur versi client-server

Bagian ini menjelaskan beberapa fitur pengoperasian opsi klien-server dan dampaknya terhadap keamanan. Untuk kemudahan membaca, notasi berikut digunakan:

Perhatian! deskripsi kerentanan

Menyimpan informasi yang mengontrol akses ke sistem

Menyimpan daftar pengguna keamanan informasi

Semua informasi tentang daftar pengguna keamanan informasi ini dan peran yang tersedia bagi mereka di dalamnya disimpan dalam tabel Params di database MS SQL (lihat [ITS2]). Melihat struktur dan isi tabel ini, menjadi jelas bahwa semua informasi pengguna disimpan dalam catatan dengan nilai bidang Nama File “users.usr”.

Karena kami berasumsi bahwa pengguna tidak memiliki akses ke database MS SQL, fakta ini sendiri tidak dapat digunakan oleh penyerang, namun, jika memungkinkan untuk mengeksekusi kode dalam MS SQL, ini “membuka pintu” untuk mendapatkan (! ) akses dari 1C . Mekanisme yang sama (dengan sedikit perubahan) juga dapat digunakan dalam versi file sistem, yang, dengan mempertimbangkan kekhasan versi file, sepenuhnya mengecualikan penerapannya dalam membangun sistem yang aman.

Rekomendasi: Saat ini, tidak ada cara untuk sepenuhnya melindungi aplikasi dari perubahan tersebut, kecuali penggunaan pemicu di tingkat MS SQL Server, yang, di sisi lain, dapat menyebabkan masalah saat memperbarui versi platform atau mengubah daftar pengguna. Untuk melacak perubahan tersebut, Anda dapat menggunakan log 1C (memperhatikan login "mencurigakan" dalam mode konfigurator tanpa menentukan pengguna) atau membiarkan SQL Profiler terus berjalan (yang akan berdampak sangat negatif pada kinerja sistem) atau mengonfigurasi Peringatan mekanisme (kemungkinan besar bersama-sama menggunakan pemicu)

Menyimpan informasi tentang daftar IS di server

Untuk setiap server aplikasi 1C, informasi disimpan tentang daftar database MS SQL yang terhubung dengannya. Setiap infobase menggunakan string koneksinya sendiri dari server aplikasi dan server MS SQL untuk beroperasi. Informasi tentang basis info yang terdaftar di server aplikasi, bersama dengan string koneksi, disimpan dalam file srvrib.lst, yang terletak di server di direktori<Общие данные приложений>/1C/1Cv8 (misalnya, C:/Dokumen dan Pengaturan/Semua Pengguna/Data Aplikasi/1C/1Cv8/srvrib.lst). Untuk setiap sistem keamanan informasi, string koneksi lengkap disimpan, termasuk kata sandi pengguna MS SQL saat menggunakan model otorisasi campuran MS SQL. Kehadiran file inilah yang memungkinkan untuk takut akan akses tidak sah ke database MS SQL, dan jika, bertentangan dengan rekomendasi, pengguna yang memiliki hak istimewa (misalnya, "sa") digunakan untuk mengakses setidaknya satu database, maka di Selain ancaman terhadap satu keamanan informasi, ada ancaman terhadap seluruh sistem yang menggunakan MS SQL.

Menarik untuk dicatat bahwa penggunaan otorisasi campuran dan otorisasi Windows pada server MS SQL menyebabkan berbagai jenis masalah saat mendapatkan akses ke file tertentu. Jadi sifat negatif utama dari otorisasi Windows adalah:

  • Pengoperasian semua keamanan informasi di server aplikasi dan di server MS SQL di bawah satu set hak (kemungkinan besar berlebihan)
  • Dari proses server aplikasi 1C (atau secara umum dari pengguna USER1CV8SERVER atau yang setara) tanpa menentukan kata sandi, Anda dapat dengan mudah terhubung ke keamanan informasi apa pun tanpa menentukan kata sandi

Di sisi lain, mungkin lebih sulit bagi penyerang untuk mengeksekusi kode arbitrer dari konteks pengguna USER1CV8SERVER daripada mendapatkan file yang ditentukan. Omong-omong, keberadaan file seperti itu adalah argumen lain untuk mendistribusikan fungsi server di komputer yang berbeda.

Rekomendasi: File srvrib.lst hanya boleh diakses oleh proses server. Pastikan untuk mengonfigurasi audit untuk mengubah file ini.

Sayangnya, secara default file ini hampir tidak terlindung dari pembacaan, yang harus diperhitungkan saat menerapkan sistem. Pilihan ideal adalah server aplikasi mencegah pembacaan dan penulisan file ini saat dijalankan (termasuk membaca dan menulis oleh koneksi pengguna yang berjalan di server ini).

Kurangnya otorisasi saat membuat keamanan informasi di server

Perhatian! Kesalahan kurangnya otorisasi telah diperbaiki pada rilis 8.0.14 dari platform 1C:Enterprise. Dalam rilis ini, konsep "1C:Enterprise Server Administrator" muncul, tetapi selama daftar administrator ditentukan di server, sistem beroperasi seperti yang dijelaskan di bawah, jadi jangan lupakan kemungkinan fitur ini.

Mungkin kerentanan terbesar dari bagian ini adalah kemampuan untuk menambahkan keamanan informasi ke server aplikasi tanpa batas, akibatnya setiap pengguna yang memperoleh akses ke koneksi ke server aplikasi secara otomatis mendapatkan kemampuan untuk menjalankan kode arbitrer di server aplikasi. . Mari kita lihat ini dengan sebuah contoh.

Sistem harus diinstal sebagai berikut

  • MS SQL Server 2000 (misalnya, nama jaringan SRV1)
  • Server 1C:Enterprise 8.0 (nama jaringan SRV2)
  • Bagian klien 1C:Enterprise 8.0 (nama jaringan WS)

Diasumsikan bahwa pengguna (selanjutnya disebut USER) yang bekerja pada WS memiliki setidaknya akses minimal ke salah satu sistem keamanan informasi yang terdaftar di SRV2, namun tidak memiliki akses istimewa ke SRV1 dan SRV2. Secara umum, kombinasi fungsi komputer yang terdaftar tidak mempengaruhi situasi. Sistem dikonfigurasikan dengan mempertimbangkan rekomendasi dalam dokumentasi dan pada disk ITS. Situasinya ditunjukkan pada Gambar. 2.


  • konfigurasikan keamanan COM+ pada server aplikasi sehingga hanya pengguna 1C yang berhak terhubung ke proses server aplikasi (detail lebih lanjut [ITS12]);
  • file srvrib.lst harus bersifat read-only untuk pengguna USER1CV8SERVER (untuk menambahkan keamanan informasi baru ke server, izinkan penulisan untuk sementara);
  • Untuk menyambung ke MS SQL, gunakan hanya protokol TCP/IP, dalam hal ini Anda dapat:
    • batasi koneksi menggunakan firewall;
    • konfigurasikan penggunaan port TCP non-standar, yang akan mempersulit koneksi IB 1C "orang luar";
    • menggunakan enkripsi data yang dikirimkan antara server aplikasi dan server SQL;
  • konfigurasikan firewall server sehingga penggunaan server MS SQL pihak ketiga tidak mungkin dilakukan;
  • menggunakan alat keamanan intranet untuk mengecualikan kemungkinan munculnya komputer yang tidak sah di jaringan lokal (IPSec, kebijakan keamanan grup, firewall, dll.);
  • Jangan dalam keadaan apa pun memberikan hak administratif kepada pengguna USER1CV8SERVER di server aplikasi.

Menggunakan kode yang berjalan di server

Saat menggunakan 1C versi client-server, pengembang dapat mendistribusikan eksekusi kode antara klien dan server aplikasi. Agar kode (prosedur atau fungsi) dapat dieksekusi hanya di server, perlu untuk menempatkannya dalam modul umum di mana properti "Server" diatur dan, dalam kasus ketika eksekusi modul diperbolehkan tidak hanya pada server, letakkan kode di bagian terlarang “#Jika Server ":

#Jika Server Lalu
Fungsi OnServer(Param1, Param2 = 0) Ekspor // Fungsi ini, meskipun sederhana, dijalankan di server
Param1 = Param1 + 12;
Kembalikan Param1;
Fungsi Akhir
#Berakhir jika

Saat menggunakan kode yang berjalan di server, Anda harus memperhitungkan bahwa:

  • kode dijalankan dengan hak USER1CV8SERVER di server aplikasi (objek COM dan file server tersedia);
  • semua sesi pengguna dijalankan oleh satu instance layanan, jadi, misalnya, stack overflow di server akan menyebabkan semua pengguna aktif terputus;
  • men-debug modul server itu sulit (misalnya, Anda tidak dapat menyetel breakpoint di debugger), tetapi harus dilakukan;
  • mentransfer kontrol dari klien ke server aplikasi dan sebaliknya mungkin memerlukan sumber daya yang signifikan dengan sejumlah besar parameter yang ditransfer;
  • penggunaan alat interaktif (formulir, dokumen spreadsheet, kotak dialog), laporan eksternal dan pemrosesan kode di server aplikasi tidak dimungkinkan;
  • penggunaan variabel global (variabel modul aplikasi yang dideklarasikan dengan indikasi "Ekspor") tidak diperbolehkan;

Untuk lebih jelasnya lihat [ITS15] dan artikel ITS lainnya.

Server aplikasi harus memiliki persyaratan keandalan khusus. Dalam sistem client-server yang dibangun dengan benar, kondisi berikut harus dipenuhi:

  • tidak ada tindakan aplikasi klien yang mengganggu pengoperasian server (kecuali untuk kasus administratif);
  • server tidak dapat mengeksekusi kode program yang diterima dari klien;
  • sumber daya harus didistribusikan secara “adil”. koneksi klien, memastikan ketersediaan server terlepas dari beban saat ini;
  • jika tidak ada pemblokiran data, koneksi klien tidak akan mempengaruhi pekerjaan satu sama lain;
  • tidak di server antarmuka pengguna, namun alat pemantauan dan pencatatan harus dikembangkan;

Secara umum, sistem 1C dibangun sedemikian rupa untuk mendekati persyaratan ini (misalnya, tidak mungkin memaksa pemrosesan eksternal dilakukan di server), tetapi beberapa fitur yang tidak menyenangkan masih ada, oleh karena itu:

Rekomendasi: Saat mengembangkan server runtime, disarankan untuk mematuhi prinsip antarmuka minimal. Itu. jumlah entri ke dalam modul server dari aplikasi klien harus sangat dibatasi, dan parameternya harus diatur secara ketat. Rekomendasi: Saat menerima parameter prosedur dan fungsi di server, perlu dilakukan validasi parameter (periksa apakah parameter sesuai dengan jenis dan rentang nilai yang diharapkan). Hal ini tidak dilakukan dalam solusi standar, namun sangat diinginkan untuk memperkenalkan validasi wajib dalam pengembangan Anda sendiri. Rekomendasi: Saat membuat teks permintaan (dan khususnya parameter perintah Jalankan) di sisi server, jangan gunakan string yang diterima dari aplikasi klien.

Rekomendasi umum adalah membiasakan diri Anda dengan prinsip-prinsip membangun keamanan web-aplikasi database dan bekerja dengan prinsip serupa. Persamaannya memang cukup besar: pertama, seperti aplikasi web, server aplikasi merupakan lapisan perantara antara database dan antarmuka pengguna (perbedaan utamanya adalah server web membentuk antarmuka pengguna); kedua, dari sudut pandang keamanan, Anda tidak dapat mempercayai data yang diterima dari klien, karena dimungkinkan untuk meluncurkan laporan dan pemrosesan eksternal.

Melewati parameter

Melewati parameter ke suatu fungsi (prosedur) yang dijalankan di server adalah masalah yang agak rumit. Hal ini terutama disebabkan oleh kebutuhan untuk mentransfernya antara server aplikasi dan proses klien. Ketika kontrol berpindah dari sisi klien ke sisi server, semua parameter yang dikirimkan diserialkan, ditransfer ke server, di mana parameter tersebut “dibongkar” dan digunakan. Saat berpindah dari sisi server ke sisi klien, prosesnya terbalik. Perlu dicatat di sini bahwa skema ini menangani parameter passing dengan benar berdasarkan referensi dan nilai. Saat meneruskan parameter, batasan berikut berlaku:

  • Hanya nilai yang tidak dapat diubah (yaitu, yang nilainya tidak dapat diubah) yang dapat ditransfer antara klien dan server (di kedua arah): tipe primitif, referensi, koleksi universal, nilai enumerasi sistem, penyimpanan nilai. Jika Anda mencoba meneruskan sesuatu yang lain, aplikasi klien akan mogok (meskipun server mencoba meneruskan parameter yang salah).
  • Tidak disarankan untuk mentransfer data dalam jumlah besar saat meneruskan parameter (misalnya, string lebih dari 1 juta karakter), hal ini dapat berdampak negatif pada kinerja server.
  • Anda tidak dapat meneruskan parameter yang berisi referensi siklik, baik dari server ke klien maupun sebaliknya. Jika Anda mencoba meneruskan parameter seperti itu, aplikasi klien akan crash (bahkan jika server mencoba meneruskan parameter yang salah).
  • Tidak disarankan untuk mentransfer kumpulan data yang sangat rumit. Saat Anda mencoba meneruskan parameter dengan tingkat bersarang yang sangat besar, server mogok (! ).

Perhatian! Fitur yang paling mengganggu saat ini mungkin adalah kesalahan dalam meneruskan kumpulan nilai yang kompleks. Jadi, misalnya kode: Nesting Level = 1250;
M = Array Baru;
Parameter Lulus = M;
Untuk Akun = 1 Berdasarkan Tingkat Siklus Bersarang
MVInt = Array Baru;
M.Tambahkan(MVInt);
M = M Vin;
Siklus Akhir;
ServerFunction (PassedParameter);

Menyebabkan penghentian darurat server dengan pemutusan semua pengguna, dan ini terjadi sebelum kontrol ditransfer ke kode dalam bahasa bawaan.

Menggunakan fungsi yang tidak aman di sisi server.

Tidak semua alat bahasa bawaan dapat digunakan dalam kode yang dieksekusi di server aplikasi, tetapi bahkan di antara alat yang tersedia terdapat banyak konstruksi “bermasalah” yang secara kasar dapat diklasifikasikan sebagai berikut:

  • mampu memberikan kemampuan untuk mengeksekusi kode yang tidak terdapat dalam konfigurasi (grup "Eksekusi Kode")
  • mampu memberikan aplikasi klien informasi tentang file dan sistem operasi pengguna atau melakukan tindakan yang tidak terkait dengan pekerjaan dengan data (“Pelanggaran Hak”)
  • mampu menyebabkan server crash atau menggunakan sumber daya yang sangat besar (grup "Server crash")
  • mampu menyebabkan kegagalan klien (kelompok kegagalan klien) – jenis ini tidak dipertimbangkan. Contoh: meneruskan nilai yang bisa diubah ke server.
  • kesalahan dalam algoritma pemrograman (loop tak berujung, rekursi tak terbatas, dll.) (“Kesalahan pemrograman”)

Desain bermasalah utama yang saya ketahui (dengan contoh) tercantum di bawah ini:

Prosedur Eksekusi(<Строка>)

Menjalankan kode. Memungkinkan Anda mengeksekusi sepotong kode yang diteruskan sebagai nilai string. Saat digunakan di server, Anda harus memastikan bahwa data yang diterima dari klien tidak digunakan sebagai parameter. Misalnya, penggunaan berikut tidak diperbolehkan:

#Jika Server Lalu
ProsedurOnServer(Param1) Ekspor
Jalankan(Param1);
Akhir Prosedur
#Berakhir jika

Ketik "COMObject" (konstruktor COMObject Baru(<Имя>, <Имя сервера>))

Membuat objek COM aplikasi eksternal dengan hak USER1CV8SERVER di server aplikasi (atau komputer tertentu lainnya). Saat digunakan di server, pastikan parameter tidak diteruskan dari aplikasi klien. Namun, di sisi server, penggunaan fitur ini efektif saat mengimpor/mengekspor, mengirim data melalui Internet, mengimplementasikan fungsi non-standar, dll.

Fungsi GetCOMObject(<Имя файла>, <Имя класса COM>)
Pelanggaran hak dan eksekusi kode. Mirip dengan yang sebelumnya, hanya mendapatkan objek COM yang sesuai dengan file tersebut.
Prosedur dan fungsi ComputerName(), TemporaryFileDirectory(), ProgramDirectory(), WindowsUsers()
Pelanggaran hak. Dengan menjalankannya di server, mereka memungkinkan Anda mengetahui detail organisasi subsistem server. Saat digunakan di server, pastikan data tidak ditransfer ke klien atau tidak dapat diakses oleh operator tanpa izin yang sesuai. Berikan perhatian khusus pada fakta bahwa data dapat diteruskan kembali dalam parameter yang diteruskan dengan referensi.
Prosedur dan fungsi untuk bekerja dengan file (CopyFile, FindFiles, MergeFiles dan banyak lainnya), serta jenis File.

Pelanggaran hak. Mereka mengizinkan, dengan menjalankannya di server, untuk mendapatkan akses bersama ke file lokal (dan terletak di jaringan) yang dapat diakses dengan hak pengguna USER1CV8SERVER. Jika digunakan secara sadar, maka dimungkinkan untuk mengimplementasikan tugas-tugas seperti mengimpor/mengekspor data secara efektif di server.

Pastikan untuk memeriksa hak pengguna 1C Anda sebelum menggunakan fungsi ini. Untuk memeriksa hak pengguna, Anda dapat menggunakan konstruksi berikut di modul server:

#Jika Server Lalu
Prosedur PerformWorkWithFile() Ekspor
RoleAdministrator = Metadata.Peran.Administrator;
Pengguna = SessionParameters.CurrentUser;
Jika User.Roles.Contains(RoleAdministrator) Lalu
//Kode untuk bekerja dengan file dieksekusi di sini
berakhir jika;
#Berakhir jika

Pastikan untuk memeriksa parameter jika Anda menggunakan prosedur dan fungsi ini, jika tidak, ada risiko secara tidak sengaja atau sengaja menyebabkan kerusakan yang tidak dapat diperbaiki pada server aplikasi 1C, misalnya, saat menjalankan kode berikut di server:

Jalur = "C:\Dokumen dan Pengaturan\Semua Pengguna\Data Aplikasi\1C\1Cv8\";
MoveFile(Jalur + "srvrib.lst", Jalur + "Di SiniDi ManaFileGoes");

Setelah mengeksekusi kode tersebut di server, jika pengguna USER1CV8SERVER memiliki hak untuk mengubahnya, seperti dijelaskan di atas, dan setelah memulai ulang proses server (secara default, 3 menit setelah semua pengguna keluar), akan muncul pertanyaan BESAR tentang memulai server . Namun dimungkinkan juga untuk menghapus file sepenuhnya...

Ketik "XBase", "BinaryData", "XML Reader", "XML Writer", "XSL Transformation", "ZipFile Writer", "ZipFile Reader", "Text Reader", "Text Writer"
Pelanggaran hak. Mereka mengizinkan, dengan menjalankannya di server, akses ke file lokal (dan terletak di jaringan) dari jenis tertentu dan membaca/menulisnya di bawah hak pengguna USER1CV8SERVER. Jika digunakan secara sadar, adalah mungkin untuk secara efektif melaksanakan tugas-tugas seperti mengimpor/mengekspor data di server, mencatat pengoperasian fungsi-fungsi tertentu, dan menyelesaikan tugas-tugas administratif. Secara umum, rekomendasinya sama dengan paragraf sebelumnya, tetapi Anda harus mempertimbangkan kemungkinan mentransfer data dari file ini (tetapi bukan objek dari semua jenis ini) antara bagian klien dan server.
Ketik "Informasi Sistem"
Pelanggaran hak. Memungkinkan Anda memperoleh data tentang server aplikasi jika terjadi kesalahan penggunaan dan transfer data ke bagian klien aplikasi. Dianjurkan untuk membatasi hak penggunaan saat menggunakan.
Ketik "InternetConnection", "InternetMail", "InternetProxy", "HTTPConnection", "FTPConnection"

Pelanggaran hak. Ketika digunakan di server, ia terhubung ke PC jarak jauh dari server aplikasi dengan hak USER1CV8SERVER. Rekomendasi:

  • Kontrol parameter saat memanggil metode.
  • Kontrol hak pengguna 1C.
  • Pembatasan ketat terhadap hak pengguna USER1CV8SERVER untuk mengakses jaringan.
  • Menyiapkan firewall dengan benar di server aplikasi 1C.

Jika digunakan dengan benar, akan lebih mudah untuk mengatur, misalnya, pengiriman email dari server aplikasi.

Ketik "InformationBaseUserManager", "InformationBaseUser"

Pelanggaran hak. Jika digunakan secara tidak benar (dalam modul istimewa), dimungkinkan untuk menambahkan pengguna atau mengubah parameter otorisasi pengguna yang ada.

Format Fungsi

Server mogok. Ya! Fungsi yang tampaknya tidak berbahaya ini, jika parameternya tidak dikontrol dan dijalankan di server, dapat menyebabkan aplikasi server mogok. Kesalahan terjadi saat memformat angka dan menggunakan mode untuk menampilkan angka nol di depan dan sejumlah besar karakter, misalnya

Format(1, "CHZ=999; CHVN=");

Saya harap kesalahan ini akan diperbaiki pada rilis platform berikutnya, tetapi sementara itu, di semua panggilan ke fungsi ini yang dapat dijalankan di server, periksa parameter panggilan.

Prosedur dan fungsi untuk menyimpan nilai (ValueInRowInt, ValueInFile)
Server mogok. Fungsi-fungsi ini tidak menangani referensi melingkar dalam koleksi atau penumpukan yang sangat dalam, sehingga mungkin macet dalam beberapa kasus yang sangat khusus.

Kesalahan dalam batas dan nilai parameter khusus dalam fungsi. Kontrol eksekusi.

Salah satu masalah yang mungkin Anda temui ketika menggunakan server adalah tingginya “tanggung jawab” fungsi server (kemungkinan seluruh aplikasi server crash karena kesalahan dalam satu koneksi dan penggunaan satu “ruang sumber daya” untuk semua koneksi) . Oleh karena itu kebutuhan untuk mengontrol parameter runtime utama:

  • Untuk fungsi bahasa bawaan, periksa parameter peluncurannya (contoh yang baik adalah fungsi “Format”)
  • Saat menggunakan perulangan, pastikan kondisi keluar perulangan terpenuhi. Jika loop berpotensi tak terbatas, batasi jumlah iterasi secara artifisial: MaximumIterationCounterValue = 1000000;
    Penghitung Iterasi = 1;
    Selamat tinggal
    FungsiWhichMayNotReturnFalseValue()
    DAN (Hitungan Iterasi<МаксимальноеЗначениеСчетчикаИтераций) Цикл

    //.... Badan perulangan
    Penghitung Iterasi = Penghitung Iterasi + 1;
    Siklus Akhir;
    Jika Penghitung Iterasi>Nilai Maksimum Penghitung Iterasi Lalu
    //.... menangani kejadian eksekusi loop yang terlalu panjang
    berakhir jika;

  • Saat menggunakan rekursi, batasi level sarang maksimum.
  • Saat membuat dan menjalankan kueri, usahakan untuk menghindari pemilihan yang sangat panjang dan pemilihan informasi dalam jumlah besar (misalnya, saat menggunakan kondisi "IN HIERARCHY", jangan gunakan nilai kosong)
  • Saat merancang basis informasi, sediakan cadangan kedalaman bit yang cukup besar untuk angka (jika tidak, penjumlahan dan perkalian menjadi non-komutatif dan non-asosiatif, yang membuat proses debug menjadi sulit)
  • Dalam kueri yang dapat dieksekusi, periksa logika operasi untuk mengetahui keberadaan nilai NULL dan pengoperasian kondisi dan ekspresi kueri yang benar menggunakan NULL.
  • Saat menggunakan koleksi, kendalikan kemampuan untuk mentransfernya antara server aplikasi dan sisi klien.

Menggunakan akses terminal ke sisi klien untuk membatasi akses

Anda sering dapat menemukan rekomendasi untuk menggunakan akses terminal guna membatasi akses ke data dan meningkatkan kinerja dengan mengeksekusi kode sisi klien di server terminal. Ya, jika dikonfigurasi dengan benar, penggunaan akses terminal memang dapat meningkatkan tingkat keamanan sistem secara keseluruhan, namun sayangnya, Anda sering menghadapi kenyataan bahwa dalam penggunaan praktis, keamanan sistem hanya menurun. Mari kita coba mencari tahu apa hubungannya ini. Sekarang ada dua cara umum untuk mengatur akses terminal, yaitu Microsoft Terminal Services (protokol RDP) dan Citrix Metaframe Server (protokol ICA). Secara umum, alat Citrix memberikan opsi administrasi akses yang jauh lebih fleksibel, namun harga solusi ini jauh lebih tinggi. Kami hanya akan mempertimbangkan fitur dasar yang umum pada kedua protokol yang dapat mengurangi tingkat keamanan secara keseluruhan. Hanya ada tiga bahaya utama saat menggunakan akses terminal:
  • Kemampuan untuk memblokir pekerjaan pengguna lain dengan menyita sumber daya dalam jumlah berlebihan
  • Akses ke data pengguna lain.
  • Penyalinan data yang tidak sah dari server terminal ke komputer pengguna

Bagaimanapun, Layanan Terminal memungkinkan Anda untuk:

  • Meningkatkan keandalan kerja (jika terjadi kegagalan pada komputer terminal, selanjutnya pengguna dapat terus bekerja dari tempat yang sama)
  • Batasi akses ke aplikasi klien dan file yang disimpannya.
  • Transfer beban komputasi dari stasiun kerja pengguna ke server akses terminal
  • Kelola pengaturan sistem secara lebih terpusat. Bagi pengguna, pengaturan yang disimpan akan valid terlepas dari komputer mana mereka masuk ke sistem.
  • Dalam beberapa kasus, Anda dapat menggunakan solusi terminal untuk akses jarak jauh ke sistem.

Penting untuk membatasi jumlah kemungkinan koneksi ke server terminal untuk satu pengguna

Karena "kerakusan" aplikasi klien 1C mengenai sumber daya, sangat penting untuk membatasi jumlah maksimum koneksi simultan dari satu pengguna (operator) ke server terminal. Koneksi yang digunakan secara aktif dapat menggunakan memori hingga 300 MB hanya dengan satu aplikasi. Selain memori, waktu CPU juga digunakan secara aktif, yang juga tidak berkontribusi terhadap stabilitas pengguna server ini. Selain mencegah penggunaan sumber daya server secara berlebihan, pembatasan tersebut juga dapat mencegah penggunaan sumber daya server orang lain akun. Diimplementasikan oleh pengaturan server terminal standar.

Anda tidak boleh mengizinkan lebih dari satu atau dua aplikasi klien 1C berjalan secara bersamaan dalam satu koneksi

Ditentukan oleh alasan yang sama seperti pada paragraf sebelumnya, tetapi secara teknis lebih sulit untuk diterapkan. Masalahnya adalah hampir tidak mungkin untuk mencegah restart 1C menggunakan alat server terminal (mengapa akan dijelaskan di bawah), jadi Anda harus mengimplementasikan fitur ini pada tingkat solusi aplikasi (yang juga bukan solusi yang baik, karena sesi mungkin tetap "menggantung" untuk beberapa waktu Jika aplikasi dihentikan secara tidak benar, ada kebutuhan untuk menyempurnakan solusi aplikasi dalam modul aplikasi dan beberapa buku referensi, yang akan mempersulit penggunaan pembaruan dari 1C). Sangat diinginkan untuk membiarkan pengguna menjalankan 2 aplikasi agar dapat menjalankan beberapa tindakan (misalnya, membuat laporan) di latar belakang - sayangnya, aplikasi klien sebenarnya adalah single-threaded.

Tidak disarankan untuk memberikan hak akses ke server terminal kepada pengguna yang memiliki hak untuk menjalankan tugas komputasi intensif sumber daya di 1C atau untuk mencegah peluncuran tersebut saat pengguna lain sedang aktif bekerja.

Tentu saja, lebih baik menyerahkan akses ke server terminal hanya kepada pengguna yang tidak menggunakan tugas-tugas seperti penambangan data, diagram geografis, impor/ekspor, dan tugas-tugas lain yang secara serius memuat bagian klien dari aplikasi. Jika masih ada kebutuhan untuk mengizinkan tugas-tugas tersebut, maka perlu untuk: memberi tahu pengguna bahwa tugas-tugas ini dapat mempengaruhi kinerja pengguna lain, mencatat awal dan akhir proses tersebut dalam log, mengizinkan eksekusi hanya pada waktu yang diatur waktu, dll.

Penting untuk memastikan bahwa setiap pengguna memiliki hak menulis hanya pada direktori yang ditentukan secara ketat di server terminal dan bahwa pengguna lain tidak memiliki akses ke direktori tersebut.

Pertama, jika Anda tidak membatasi kemampuan untuk menulis ke direktori bersama (seperti direktori tempat 1C diinstal), maka penyerang masih dapat mengubah perilaku program untuk semua pengguna. Kedua, data satu pengguna (file sementara, file untuk menyimpan pengaturan laporan, dll.) dalam keadaan apa pun tidak boleh dapat diakses oleh pengguna lain di server terminal - secara umum, selama konfigurasi normal, aturan ini dipatuhi. Ketiga, penyerang masih mempunyai kesempatan untuk “membuang sampah sembarangan” pada partisi tersebut sehingga tidak ada ruang tersisa di harddisk. Saya tahu mereka akan keberatan dengan saya bahwa sistem operasi Windows, dimulai dengan Windows 2000, memiliki mekanisme kuota, tetapi ini adalah mekanisme yang agak mahal, dan saya praktis belum pernah melihat kegunaan nyata darinya.

Jika masalah pengaturan akses sebelumnya umumnya cukup mudah untuk diterapkan, maka tugas (yang tampaknya) sederhana seperti mengatur akses pengguna ke file tidak dapat diterapkan dengan mudah. Pertama, jika mekanisme kuota tidak digunakan, maka file berukuran besar bisa disimpan. Kedua, sistem ini dibangun sedemikian rupa sehingga hampir selalu memungkinkan untuk menyimpan file sehingga tersedia untuk pengguna lain.

Mengingat tugas ini sulit untuk diselesaikan sepenuhnya, disarankan untuk mengaudit sebagian besar peristiwa file

Penting untuk melarang koneksi (pemetaan) perangkat disk, printer, dan clipboard stasiun kerja klien.

Di RDP dan ICA, dimungkinkan untuk mengatur koneksi otomatis disk, printer, port com clipboard dari komputer terminal ke server. Jika peluang ini ada, maka hampir tidak mungkin untuk mencegah peluncuran kode asing di server terminal dan penyimpanan data dari 1C pada klien akses terminal. Izinkan fitur ini hanya untuk mereka yang memiliki hak administratif.

Akses file jaringan dari server terminal harus dibatasi.

Jika hal ini tidak dilakukan, pengguna akan dapat lagi menjalankan kode yang tidak diinginkan atau menyimpan data. Karena log reguler tidak melacak peristiwa file (omong-omong, ini adalah ide bagus untuk diterapkan oleh pengembang platform), dan hampir tidak mungkin untuk menyiapkan audit sistem di seluruh jaringan (tidak ada cukup sumber daya untuk memeliharanya), lebih baik pengguna dapat mengirim data baik untuk dicetak, atau melalui email. Berikan perhatian khusus untuk memastikan bahwa server terminal tidak bekerja secara langsung dengan media yang dapat dipindahkan milik pengguna.

Dalam situasi apa pun Anda tidak boleh meninggalkan server aplikasi di server terminal saat membuat sistem yang aman.

Jika server aplikasi berjalan di komputer yang sama dengan aplikasi klien, maka ada banyak peluang untuk mengganggu pengoperasian normalnya. Jika karena alasan tertentu tidak mungkin memisahkan fungsi server terminal dan server aplikasi, maka berikan perhatian khusus pada akses pengguna ke file yang digunakan oleh server aplikasi.

Penting untuk mengecualikan kemungkinan menjalankan semua aplikasi kecuali 1C:Enterprise di server terminal.

Ini adalah salah satu keinginan yang paling sulit untuk diwujudkan. Mari kita mulai dengan fakta bahwa Anda perlu mengonfigurasi kebijakan Kebijakan Keamanan Grup di domain dengan benar. Semua Template Administratif dan Kebijakan Pembatasan Perangkat Lunak harus dikonfigurasi dengan benar. Untuk menguji diri Anda sendiri, pastikan setidaknya fitur berikut diblokir:

Kompleksitas penerapan persyaratan ini sering kali mengarah pada kemungkinan meluncurkan sesi 1C "ekstra" di server terminal (meskipun aplikasi lain terbatas, pada dasarnya tidak mungkin untuk melarang peluncuran 1C menggunakan Windows).

Pertimbangkan batasan log biasa (semua pengguna menggunakan program dari satu komputer)

Jelas, karena pengguna membuka 1C dalam mode terminal, maka server terminal akan dicatat dalam log. Log tidak menunjukkan dari komputer mana pengguna terhubung.

Terminal Server – Perlindungan atau Kerentanan?

Jadi, setelah mempertimbangkan fitur utama terminal utara, kita dapat mengatakan bahwa terminal utara berpotensi membantu otomatisasi untuk mendistribusikan beban komputasi, namun membangun sistem yang aman cukup sulit. Salah satu kasus ketika penggunaan server terminal paling efektif adalah ketika menjalankan 1C tanpa Windows Explorer dalam mode layar penuh untuk pengguna dengan fungsionalitas terbatas dan antarmuka khusus.

Pekerjaan bagian klien

Menggunakan Internet Explorer (IE)

Salah satu syarat untuk pengoperasian normal bagian klien 1C adalah penggunaan komponen Internet Explorer. Anda harus sangat berhati-hati dengan komponen-komponen ini.

Perhatian! Pertama, jika modul spyware atau adware “melekat” ke IE, maka modul tersebut akan dimuat bahkan jika Anda melihat file HTML apa pun dalam 1C. Sejauh ini saya belum melihat adanya penggunaan fitur ini secara sadar, tetapi saya telah melihat di salah satu organisasi modul "mata-mata" yang dimuat dari salah satu jaringan pornografi dengan 1C berjalan (program antivirus tidak diperbarui, gejalanya terdeteksi : saat mengatur firewall, terlihat jelas bahwa 1C sedang mencoba pada port 80 untuk terhubung ke situs porno). Sebenarnya, ini adalah argumen lain yang mendukung fakta bahwa perlindungan harus komprehensif

Perhatian! Kedua, sistem 1C memungkinkan penggunaan film Flash, objek ActiveX, VBScript dalam dokumen HTML yang ditampilkan, mengirim data ke Internet, bahkan membuka file PDF (!), meskipun dalam kasus terakhir ia meminta "buka atau simpan"... Secara umum, semua yang diinginkan hati Anda. Contoh penggunaan kemampuan melihat dan mengedit HTML bawaan yang tidak sepenuhnya masuk akal:

  • Buat dokumen HTML baru (File -> Baru -> Dokumen HTML).
  • Buka tab "Teks" pada dokumen kosong.
  • Hapus teks (seluruhnya).
  • Buka tab "Lihat" pada dokumen ini
  • Menggunakan drag-n-drop, pindahkan file dengan ekstensi SWF (ini adalah file film Flash) dari Explorer yang terbuka ke jendela dokumen, misalnya dari cache browser, meskipun Anda juga dapat menggunakan mainan FLASH untuk bersenang-senang.
  • Betapa indahnya! Anda dapat menjalankan mainan di 1C!

Dari sudut pandang keamanan sistem, hal ini sepenuhnya salah. Sejauh ini saya belum melihat adanya serangan khusus terhadap 1C melalui kerentanan ini, tetapi kemungkinan besar ini hanya masalah waktu dan nilai informasi Anda.

Ada beberapa masalah kecil lainnya yang muncul ketika bekerja dengan bidang dokumen HTML, namun yang utama adalah dua hal yang tercantum. Meskipun demikian, jika Anda mendekati fitur-fitur ini secara kreatif, Anda dapat mengatur kemampuan antarmuka yang benar-benar luar biasa untuk bekerja dengan 1C.

Menggunakan laporan dan pemrosesan eksternal.

Perhatian! Laporan dan pemrosesan eksternal – di satu sisi – cara yang nyaman penerapan formulir cetak tambahan, pelaporan peraturan, laporan khusus, di sisi lain, merupakan cara potensial untuk melewati banyak batasan keamanan sistem dan mengganggu pengoperasian server aplikasi (misalnya, lihat di atas dalam “Parameter penerusan”). Dalam sistem 1C ada parameter khusus dalam kumpulan hak untuk peran "Pembukaan interaktif pemrosesan eksternal", tetapi ini tidak sepenuhnya menyelesaikan masalah - untuk solusi lengkap perlu mempersempit lingkaran pengguna yang dapat mengelola formulir cetak eksternal, laporan peraturan, dan kemampuan standar lainnya dari solusi standar yang diterapkan menggunakan pemrosesan eksternal. Misalnya, secara default di UPP, semua peran pengguna utama memiliki kemampuan untuk bekerja dengan direktori formulir cetak tambahan, dan ini sebenarnya adalah kemampuan untuk menggunakan pemrosesan eksternal apa pun.

Menggunakan mekanisme standar untuk solusi dan platform standar (pertukaran data)

Beberapa mekanisme standar berpotensi berbahaya, dan dengan cara yang tidak terduga.

Daftar pencetakan

Daftar apa pun (misalnya, direktori atau daftar informasi) dalam sistem dapat dicetak atau disimpan ke file. Untuk melakukan ini, cukup gunakan fitur standar yang tersedia dari menu konteks dan menu “Tindakan”:

Ingatlah bahwa hampir semua yang dilihat pengguna dalam daftar dapat di-output ke file eksternal. Satu-satunya hal yang dapat kami sarankan adalah menyimpan log pencetakan dokumen di server cetak. Untuk formulir yang sangat penting, perlu untuk mengonfigurasi panel tindakan yang terkait dengan bidang tabel yang dilindungi sehingga kemampuan untuk menampilkan daftar tidak tersedia dari panel ini, dan menonaktifkan menu konteks (lihat Gambar 6).

Pertukaran data dalam database terdistribusi

Format pertukaran data cukup sederhana dan dijelaskan dalam dokumentasi. Jika pengguna memiliki kemampuan untuk mengganti beberapa file, ia dapat membuat perubahan yang tidak sah pada sistem (walaupun ini merupakan tugas yang memakan waktu). Kemampuan untuk membuat database periferal saat menggunakan rencana pertukaran database terdistribusi seharusnya tidak tersedia untuk operator biasa.

Pertukaran Data XML Standar

Dalam pertukaran data standar, yang digunakan untuk pertukaran antara konfigurasi standar (misalnya, "Manajemen Perdagangan" dan "Akuntansi Perusahaan"), dimungkinkan untuk menentukan pengendali peristiwa untuk memuat dan menurunkan objek dalam aturan pertukaran. Hal ini diimplementasikan dengan mendapatkan handler dari file dan prosedur “Run()” untuk pemrosesan standar pemuatan dan pembongkaran file (prosedur “Run()” diluncurkan di sisi klien). Jelas, tidak sulit untuk membuat file pertukaran palsu yang akan melakukan tindakan jahat. Untuk sebagian besar peran pengguna solusi standar, berbagi diperbolehkan secara default.

Rekomendasi: membatasi akses ke pertukaran XML untuk sebagian besar pengguna (menyerahkannya hanya kepada administrator keamanan informasi). Simpan log jalannya pemrosesan ini, simpan file pertukaran, misalnya, mengirimkannya melalui email administrator keamanan informasi sebelum mengunduh.

Menggunakan laporan umum, khususnya Reports Console

Masalah lainnya adalah akses default pengguna ke laporan umum, khususnya laporan Konsol Laporan. Laporan ini dicirikan oleh fakta bahwa laporan ini memungkinkan Anda untuk mengeksekusi hampir semua permintaan keamanan informasi, dan bahkan jika sistem hak 1C (termasuk RLS) dikonfigurasi dengan cukup ketat, laporan ini memungkinkan pengguna memperoleh banyak informasi "ekstra" dan memaksa server untuk menjalankan permintaan yang akan menghabiskan semua sumber daya sistem.

Menggunakan Mode Layar Penuh (Mode Desktop)

Salah satu cara efektif untuk mengatur antarmuka khusus dengan akses terbatas ke fungsionalitas program adalah mode layar penuh dari bentuk antarmuka utama (dan mungkin satu-satunya) yang digunakan. Dalam hal ini, tidak ada masalah aksesibilitas, misalnya menu "File" dan semua tindakan pengguna dibatasi oleh kemampuan formulir yang digunakan. Untuk lebih jelasnya lihat “Fitur penerapan mode desktop” pada disk ITS.

Cadangan

Pencadangan untuk versi client-server 1C dapat dilakukan dengan dua cara: mengunggah data ke file dengan ekstensi dt dan membuat salinan cadangan menggunakan SQL. Metode pertama memiliki banyak kelemahan: diperlukan akses eksklusif, pembuatan salinan itu sendiri membutuhkan waktu lebih lama, dalam beberapa kasus (jika struktur keamanan informasi dilanggar) pembuatan arsip tidak mungkin dilakukan, tetapi ada satu keuntungan - ukuran minimum arsip. Untuk pencadangan SQL, yang terjadi adalah sebaliknya: pembuatan salinan terjadi di latar belakang menggunakan server SQL, karena strukturnya yang sederhana dan kurangnya kompresi - ini adalah proses yang sangat cepat, dan selama integritas fisik SQL database tidak rusak, pencadangan dilakukan, tetapi ukuran salinannya sesuai dengan ukuran keamanan informasi yang sebenarnya dalam keadaan diperluas (tidak dilakukan kompresi). Karena keuntungan tambahan dari sistem pencadangan MS SQL, lebih disarankan untuk menggunakannya (3 jenis pencadangan diperbolehkan: penuh, diferensial, salinan log transaksi; dimungkinkan untuk membuat pekerjaan yang dijalankan secara teratur; salinan cadangan dan cadangan sistem dikerahkan dengan cepat; dimungkinkan untuk memprediksi ukuran ruang disk yang diperlukan, dll.). Poin utama pengorganisasian cadangan dari sudut pandang keamanan sistem adalah:

  • Kebutuhan untuk memilih lokasi penyimpanan cadangan agar tidak dapat diakses oleh pengguna.
  • Kebutuhan untuk menyimpan cadangan pada jarak fisik dari server MS SQL (jika terjadi bencana alam, kebakaran, serangan, dll.)
  • Kemampuan untuk memberikan hak untuk memulai pencadangan kepada pengguna yang tidak memiliki akses ke pencadangan.

Untuk lebih jelasnya, silakan merujuk ke dokumentasi MS SQL.

Enkripsi data

Untuk melindungi data dari akses yang tidak sah, berbagai alat kriptografi (baik perangkat lunak maupun perangkat keras) sering digunakan, namun kelayakannya sangat bergantung pada aplikasi yang benar dan keamanan sistem secara keseluruhan. Kami akan melihat enkripsi data pada berbagai tahap transmisi dan penyimpanan data menggunakan cara paling umum dan kesalahan utama dalam desain sistem menggunakan alat kriptografi.

Ada beberapa tahapan utama pemrosesan informasi yang dapat dilindungi:

  • Transfer data antara bagian klien dari sistem dan server aplikasi
  • Mentransfer data antara server aplikasi dan MS SQL Server
  • Data disimpan di MS SQL Server (file data di disk fisik)
  • Enkripsi data yang disimpan dalam keamanan informasi
  • Data eksternal (dalam kaitannya dengan keamanan informasi)

Untuk data yang disimpan di sisi klien dan di server aplikasi (pengaturan pengguna yang disimpan, daftar keamanan informasi, dll.), enkripsi hanya dibenarkan dalam kasus yang sangat jarang terjadi dan oleh karena itu tidak dipertimbangkan di sini. Saat menggunakan alat kriptografi, kita tidak boleh lupa bahwa penggunaannya dapat mengurangi kinerja sistem secara keseluruhan secara signifikan.

Informasi umum tentang perlindungan kriptografi koneksi jaringan saat menggunakan protokol TCP/IP.

Tanpa keamanan, semua koneksi jaringan rentan terhadap pengawasan dan akses tidak sah. Untuk melindunginya, Anda dapat menggunakan enkripsi data pada tingkat protokol jaringan. Untuk mengenkripsi data yang dikirimkan melalui jaringan lokal, alat IPSec yang disediakan oleh sistem operasi paling sering digunakan.

Alat IPSec menyediakan enkripsi data yang dikirimkan menggunakan algoritma DES dan 3DES, serta verifikasi integritas menggunakan fungsi hash MD5 atau SHA1. IPSec dapat beroperasi dalam dua mode: mode transport dan mode terowongan. Moda transportasi lebih cocok untuk mengamankan koneksi pada jaringan lokal. Mode terowongan dapat digunakan untuk mengatur koneksi VPN antara segmen jaringan yang terpisah atau melindungi koneksi jarak jauh ke jaringan lokal melalui saluran data terbuka.

Keuntungan utama dari pendekatan ini adalah:

  • Kemungkinan manajemen keamanan terpusat menggunakan alat Direktori Aktif.
  • Kemampuan untuk mengecualikan koneksi tidak sah ke server aplikasi dan server MS SQL (misalnya, dimungkinkan untuk melindungi terhadap penambahan keamanan informasi yang tidak sah pada server aplikasi).
  • Penghapusan "mendengarkan" lalu lintas jaringan.
  • Tidak perlu mengubah perilaku program aplikasi (dalam hal ini 1C).
  • Sifat standar dari solusi tersebut.

Namun pendekatan ini mempunyai keterbatasan dan kelemahan:

  • IPSec tidak melindungi data dari gangguan dan penyadapan langsung pada komputer sumber dan tujuan.
  • Jumlah data yang ditransfer melalui jaringan sedikit lebih besar dibandingkan tanpa menggunakan IPSec.
  • Saat menggunakan IPSec, beban pada prosesor pusat sedikit lebih tinggi.

Penjelasan rinci tentang penerapan alat IPSec berada di luar cakupan artikel ini dan memerlukan pemahaman tentang prinsip dasar fungsi protokol IP. Untuk mengonfigurasi keamanan koneksi dengan benar, harap baca dokumentasi yang relevan.

Secara terpisah, perlu disebutkan beberapa aspek perjanjian lisensi dengan 1C saat mengatur koneksi VPN. Faktanya adalah, meskipun tidak ada batasan teknis, saat menghubungkan beberapa segmen jaringan lokal atau akses jarak jauh dari satu komputer ke jaringan lokal, biasanya diperlukan beberapa perlengkapan dasar.

Enkripsi data saat ditransfer antara bagian klien dari sistem dan server aplikasi.

Selain enkripsi pada tingkat protokol jaringan, dimungkinkan juga untuk mengenkripsi data pada tingkat protokol COM+, sebagaimana disebutkan dalam artikel “Pengaturan akses pengguna ke basis informasi versi client-server” ITS. Untuk menerapkannya, Anda perlu mengatur tingkat Otentikasi untuk panggilan ke “Privasi Paket” untuk aplikasi 1CV8 di “Layanan Komponen”. Ketika diatur ke mode ini, paket diautentikasi dan dienkripsi, termasuk data dan identitas serta tanda tangan pengirim.

Enkripsi data saat ditransfer antara server aplikasi dan MS SQL Server

MS SQL Server menyediakan alat berikut untuk enkripsi data:

  • Secure Sockets Layer (SSL) dapat digunakan saat mentransfer data antara server aplikasi dan MS SQL Server.
  • Saat menggunakan perpustakaan jaringan Multiprotocol, enkripsi data digunakan pada tingkat RPC. Ini berpotensi menjadi enkripsi yang lebih lemah dibandingkan menggunakan SSL.
  • Jika protokol pertukaran Memori Bersama digunakan (ini terjadi jika server aplikasi dan MS SQL Server berlokasi di komputer yang sama), maka enkripsi tidak digunakan dalam hal apa pun.

Untuk menetapkan kebutuhan mengenkripsi semua data yang dikirimkan untuk server MS SQL tertentu, Anda harus menggunakan utilitas "Server Network Utility". Jalankan dan pada tab "Umum", centang kotak "Paksa enkripsi protokol". Metode enkripsi dipilih tergantung pada metode yang digunakan oleh aplikasi klien (yaitu server aplikasi 1C). Untuk menggunakan SSL, Anda harus mengonfigurasi layanan sertifikat di jaringan Anda dengan benar.

Untuk mengatur kebutuhan mengenkripsi semua data yang dikirimkan untuk server aplikasi tertentu, Anda harus menggunakan utilitas "Client Network Utility" (biasanya terletak di "C:\WINNT\system32\cliconfg.exe"). Seperti pada kasus sebelumnya, pada tab "Umum", centang kotak "Paksa enkripsi protokol".

Perlu dipertimbangkan bahwa penggunaan enkripsi dalam hal ini dapat berdampak signifikan terhadap kinerja sistem, terutama saat menggunakan kueri yang mengembalikan informasi dalam jumlah besar.

Untuk lebih melindungi koneksi antara server aplikasi dan MS SQL Server saat menggunakan protokol TCP/IP, kami dapat merekomendasikan beberapa perubahan pada pengaturan default.

Pertama, Anda dapat mengatur port selain port standar (port 1433 digunakan secara default). Jika Anda memutuskan untuk menggunakan port TCP non-standar untuk pertukaran data, harap perhatikan bahwa:

  • Server MS SQL dan server aplikasi harus menggunakan port yang sama.
  • Saat menggunakan firewall, port ini harus diizinkan.
  • Anda tidak dapat mengatur port yang dapat digunakan oleh aplikasi lain di server MS SQL. Untuk referensi, Anda dapat menggunakan http://www.ise.edu/in-notes/iana/assignments/port-numbers (alamat diambil dari SQL Server Books Online).
  • Saat menggunakan beberapa contoh layanan MS SQL Server, pastikan untuk membaca dokumentasi MS SQL untuk konfigurasi (bagian "Mengonfigurasi Koneksi Jaringan").

Kedua, dalam pengaturan protokol TCP/IP di server MS SQL, Anda dapat menyetel tanda "Sembunyikan server", yang melarang respons terhadap permintaan siaran untuk contoh layanan MS SQL Server ini.

Enkripsi data MS SQL yang disimpan di disk

Ada banyak pilihan perangkat lunak dan perangkat keras untuk mengenkripsi data yang terletak di disk lokal (termasuk kemampuan standar Windows untuk menggunakan EFS, penggunaan kunci eToken, dan program pihak ketiga seperti Jetico Bestcrypt atau PGPDisk). Salah satu tugas utama yang dilakukan oleh alat ini adalah melindungi data jika terjadi kehilangan media (misalnya, ketika server dicuri). Perlu diperhatikan secara khusus bahwa Microsoft tidak menyarankan penyimpanan database MS SQL pada media terenkripsi, dan ini cukup beralasan. Masalah utama dalam hal ini adalah penurunan produktivitas dan kemungkinan masalah keandalan dari kegagalan. Faktor kedua yang memperumit kehidupan administrator sistem adalah kebutuhan untuk memastikan ketersediaan semua file database pada saat layanan MS SQL pertama kali mengaksesnya (yaitu, tindakan interaktif diharapkan dikecualikan saat menghubungkan media terenkripsi).

Untuk menghindari penurunan kinerja sistem yang nyata, Anda dapat menggunakan kemampuan MS SQL untuk membuat database dalam beberapa file. Tentu saja, dalam hal ini, database MS SQL tidak boleh dibuat oleh server 1C saat membuat infobase, tetapi harus dibuat secara terpisah. Contoh skrip TSQL dengan komentar diberikan di bawah ini:

GUNAKAN master
PERGI
-- Membuat database SomeData,
BUAT DATABASE SomeData
-- yang datanya seluruhnya terletak di filegroup PRIMARY.
PADA UTAMA
-- File data utama terletak pada media terenkripsi (drive logis E :)
-- dan memiliki ukuran awal 100 MB, dapat ditingkatkan secara otomatis menjadi 200 MB dengan
-- dengan kelipatan 20 MB
(NAMA = BeberapaData1,
NAMA FILE = "E:\SomeData1.mdf",
UKURAN = 100 MB,
UKURAN MAKSIMUM = 200,
PERTUMBUHAN FILE = 2),
-- File data kedua terletak di media yang tidak terenkripsi (drive logis C :)
-- dan memiliki ukuran awal 100 MB, dapat ditingkatkan secara otomatis hingga batasnya
-- ruang disk dengan kelipatan 5% dari ukuran file saat ini (dibulatkan menjadi 64 KB)
(NAMA = BeberapaData2,
NAMA FILE = "c:\program files\microsoft sql server\mssql\data\SomeData2.ndf",
UKURAN = 100 MB,
UKURAN MAKSIMUM = TANPA BATAS,
PERTUMBUHAN FILE = 5%)
MASUK
-- Meskipun log transaksi juga dapat dibagi menjadi beberapa bagian, hal ini tidak boleh dilakukan,
-- Karena file ini lebih sering berubah dan dibersihkan secara teratur (misalnya, kapan
-- membuat cadangan basis data).
(NAMA = BeberapaDatalog,
NAMA FILE = "c:\program files\microsoft sql server\mssql\data\SomeData.ldf",
UKURAN = 10 MB,
UKURAN MAKSIMUM = TANPA BATAS,
PERTUMBUHAN FILE = 10)
PERGI
-- Sebaiknya segera berikan kepemilikan database kepada pengguna atas nama siapa
-- 1C akan terhubung. Untuk melakukan ini, kita perlu mendeklarasikan basis saat ini
- baru saja dibuat,
GUNAKAN BeberapaData
PERGI
-- dan jalankan sp_changbower
EXEC sp_changdbowner @loginame = "SomeData_dbowner"

Penyimpangan singkat tentang peningkatan otomatis ukuran file data. Secara default, ukuran file untuk database baru ditingkatkan sebesar 10% dari ukuran file saat ini. Ini adalah solusi yang sepenuhnya dapat diterima untuk database kecil, tetapi tidak terlalu bagus untuk database besar: dengan ukuran database, misalnya, 20 GB, file akan segera bertambah sebesar 2 GB. Meskipun kejadian ini jarang terjadi, kejadian ini dapat berlangsung selama beberapa puluh detik (semua transaksi lainnya secara efektif menganggur selama waktu ini), yang jika terjadi selama aktif bekerja dengan database, dapat menyebabkan beberapa kegagalan. Konsekuensi negatif kedua dari peningkatan proporsional, yang terjadi ketika ruang disk hampir penuh, adalah kemungkinan kegagalan dini karena ruang kosong yang tidak mencukupi. Misalnya, jika partisi disk dengan kapasitas 40 GB sepenuhnya didedikasikan untuk satu database (lebih tepatnya, untuk satu file database ini), maka ukuran kritis dari file database yang diperlukan untuk segera (sangat mendesak, sampai mengganggu pekerjaan normal pengguna) untuk mengatur ulang penyimpanan informasi adalah file data berukuran 35 GB. Dengan ukuran kenaikan yang ditetapkan pada 10-20 MB, Anda dapat terus bekerja hingga mencapai 39 GB.

Oleh karena itu, meskipun daftar di atas menentukan peningkatan ukuran salah satu file database dengan kelipatan 5%, untuk ukuran database besar lebih baik menetapkan peningkatan tetap sebesar 10-20 MB. Saat mengatur nilai kenaikan untuk pertumbuhan ukuran file database, perlu diingat bahwa hingga salah satu file dalam grup file mencapai ukuran maksimumnya, aturan berlaku: file dalam satu grup file bertambah semuanya secara bersamaan waktu, ketika semuanya terisi penuh. Jadi pada contoh di atas, ketika file SomeData1.mdf mencapai ukuran maksimum 200 MB, maka file SomeData2.ndf akan berukuran sekitar 1,1 GB.

Setelah membuat database seperti itu, meskipun file SomeData2.ndf dan SomeData.ldf yang tidak dilindungi dapat diakses oleh penyerang, akan sangat sulit untuk memulihkan keadaan sebenarnya dari database - data (termasuk informasi tentang struktur logis database ) akan tersebar di beberapa file, dan informasi penting (misalnya, tentang file mana yang membentuk database ini) akan ada di file terenkripsi.

Tentu saja, jika penyimpanan file database menggunakan sarana kriptografi digunakan, maka pencadangan (setidaknya file-file ini) tidak boleh dilakukan pada media yang tidak terenkripsi. Untuk membuat cadangan file database individual, gunakan sintaks perintah BACKUP DATABASE yang sesuai. Harap dicatat bahwa meskipun dimungkinkan untuk melindungi cadangan basis data dengan kata sandi (opsi "PASSWORD = " dan "MEDIAPASSWORD = " pada perintah "BACKUP DATABASE"), cadangan tersebut tidak menjadi terenkripsi!

Enkripsi server aplikasi dan data klien yang disimpan pada disk

Dalam kebanyakan kasus, menyimpan file yang digunakan oleh 1C:Enterprise (bagian klien dan server aplikasi) pada media terenkripsi tidak dapat dibenarkan karena biayanya yang terlalu tinggi, namun, jika diperlukan, harap perhatikan bahwa server aplikasi dan bagian klien dari aplikasi sangat sering membuat file-file sementara. Seringkali, file-file ini tetap ada setelah aplikasi selesai dijalankan, dan hampir tidak mungkin untuk menjamin penghapusannya menggunakan alat 1C. Oleh karena itu, direktori yang digunakan untuk file sementara di 1C perlu dienkripsi atau tidak menyimpannya di disk menggunakan drive RAM (opsi terakhir tidak selalu memungkinkan karena ukuran file yang dihasilkan dan kebutuhan RAM 1C:Enterprise aplikasi itu sendiri).

Enkripsi data menggunakan alat 1C bawaan.

Kemampuan standar untuk menggunakan enkripsi dalam 1C adalah menggunakan objek untuk bekerja dengan file Zip dengan parameter enkripsi. Mode enkripsi berikut tersedia: Algoritma AES dengan kunci 128, 192 atau 256 bit dan algoritma usang yang awalnya digunakan dalam pengarsipan Zip. File zip yang dienkripsi dengan AES tidak dapat dibaca oleh banyak pengarsip (WinRAR, 7zip). Untuk menghasilkan file yang berisi data terenkripsi, Anda harus menentukan kata sandi dan algoritma enkripsi. Contoh paling sederhana dari fungsi enkripsi-dekripsi berdasarkan fitur ini diberikan di bawah ini:

Fungsi EncryptData (Data, Kata Sandi, Metode Enkripsi = Tidak Terdefinisi) Ekspor

// Tulis data ke file sementara. Faktanya, tidak semua data bisa disimpan dengan cara ini.
ValueInFile(NamaFile Sementara, Data);

// Tulis data sementara ke arsip
Zip = ZipFileRecord Baru (NamaFileArchiveSementara, Kata Sandi, Metode Enkripsi);
Zip.Add(NamaFile Sementara);
Zip.Tulis();

// Membaca data dari arsip yang diterima ke dalam RAM
EncryptedData = NewValueStorage(NewBinaryData(ArchiveTemporaryFileName));

// File sementara - hapus

Ekspor DecryptData Fungsi EndFunctions (Data Terenkripsi, Kata Sandi).

// Perhatian! Kebenaran parameter yang diteruskan tidak dipantau

// Tulis nilai yang diteruskan ke file
ArchiveTemporaryFileName = DapatkanTemporaryFileName("zip");
BinaryArchiveData = Data Terenkripsi.Dapatkan();
BinaryArchiveData.Write(ArchiveTemporaryFileName);

// Ekstrak file pertama dari arsip yang baru saja ditulis
TemporaryFileName = DapatkanTemporaryFileName();
Zip = ReadZipFile Baru (NamaFileArchiveSementara, Kata Sandi);
Zip.Extract(Zip.Items, TemporaryFileName, ZIPFilePathRecoveryMode.Do NotRecover);

// Baca file tertulis
Data = ValueFromFile(NamaFile Sementara + "\" + Zip.Items.Nama);

//Hapus file sementara
DeleteFiles(NamaFile Sementara);
DeleteFiles(ArchiveTemporaryFileName);

Data Pengembalian;

Fungsi Akhir

Tentu saja, metode ini tidak bisa disebut ideal - data ditulis ke folder sementara dalam bentuk teks biasa, kinerja metode ini, sejujurnya, lebih buruk dari sebelumnya, penyimpanan dalam database memerlukan ruang yang sangat besar, tetapi ini adalah satu-satunya metode yang hanya didasarkan pada mekanisme bawaan platform. Selain itu, metode ini memiliki keunggulan dibandingkan banyak metode lainnya - metode ini secara bersamaan mengemas data bersama dengan enkripsi. Jika Anda ingin mengimplementasikan enkripsi tanpa kekurangan yang dimiliki metode ini, Anda harus mengimplementasikannya di komponen eksternal, atau beralih ke perpustakaan yang ada melalui pembuatan objek COM, misalnya menggunakan Microsoft CryptoAPI. Sebagai contoh, kami akan memberikan fungsi mengenkripsi/mendekripsi string berdasarkan kata sandi yang diterima.

Fungsi EncryptStringDES (String Tidak Terenkripsi, Kata Sandi)

CAPICOM_ENCRYPTION_ALGORITHM_DES = 2; // Konstanta ini berasal dari CryptoAPI


EncryptionMechanism.Content = UnencryptedString;
Mesin Enkripsi.Algoritma.Nama = CAPICOM_ENCRYPTION_ALGORITHM_DES;
EncryptedString = EncryptionMechanism.Encrypt();

kembalikan EncryptedString;

Fungsi Akhir // EncryptStringDES()

Fungsi DecryptStringDES (EncryptedString, Kata Sandi)

//Perhatian! Parameter tidak dicentang!

Mesin Enkripsi = COMObject Baru("CAPICOM.EncryptedData");
Mekanisme Enkripsi.SetSecret(Kata Sandi);
Percobaan
Mekanisme Enkripsi.Dekripsi(EncryptedString);
Pengecualian
// Kata kunci Salah!;
Kembali Tidak Terdefinisi;
Percobaan Akhir;

ReturnEncryptionMechanism.Content;

Fungsi Akhir // DecryptStringDES()

Harap dicatat bahwa saat mentransfer nilai kosong memasukkan string atau kata sandi ke dalam fungsi ini akan menghasilkan pesan kesalahan. String yang diperoleh dengan menggunakan prosedur enkripsi ini sedikit lebih panjang dari aslinya. Kekhususan enkripsi ini adalah jika Anda mengenkripsi sebuah string dua kali, string yang dihasilkan TIDAK akan sama.

Kesalahan mendasar saat menggunakan alat kriptografi.

Saat menggunakan alat kriptografi, kesalahan yang sama sering dilakukan:

Meremehkan penalti kinerja saat menggunakan kriptografi.

Kriptografi merupakan tugas yang memerlukan jumlah perhitungan yang cukup besar (terutama untuk algoritma seperti DES, 3DES, GOST, PGP). Dan bahkan ketika menggunakan algoritma berkinerja tinggi dan dioptimalkan (RC5, RC6, AES), tidak ada jalan keluar dari transfer data yang tidak perlu dalam memori dan pemrosesan komputasi. Dan ini hampir meniadakan kemampuan banyak komponen server (array RAID, adaptor jaringan). Saat menggunakan enkripsi perangkat keras atau derivasi perangkat keras dari kunci enkripsi, ada kemungkinan hambatan kinerja tambahan: kecepatan transfer data antara perangkat tambahan dan memori (dimana kinerja perangkat tersebut mungkin tidak terlalu penting). Saat menggunakan enkripsi data dalam jumlah kecil (misalnya, pesan email), peningkatan beban komputasi pada sistem tidak begitu terlihat, namun dalam kasus enkripsi total semuanya, hal ini dapat sangat mempengaruhi kinerja sistem. secara keseluruhan.

Meremehkan kemampuan modern untuk memilih kata sandi dan kunci.

Saat ini, kemampuan teknologi sedemikian rupa sehingga kunci dengan panjang 40-48 bit dapat dipilih oleh organisasi kecil, dan kunci dengan panjang 56-64 bit dapat dipilih oleh organisasi besar. Itu. algoritma yang menggunakan kunci minimal 96 atau 128 bit harus digunakan. Namun sebagian besar kunci dihasilkan menggunakan algoritma hash (SHA-1, dll.) berdasarkan kata sandi yang dimasukkan oleh pengguna. Dalam hal ini, kunci dengan panjang 1024 bit mungkin tidak membantu. Pertama, kata sandi yang mudah ditebak sering digunakan. Faktor-faktor yang memudahkan pemilihan adalah: hanya menggunakan satu huruf besar-kecil; penggunaan kata, nama dan ungkapan dalam kata sandi; penggunaan tanggal, ulang tahun, dll yang diketahui; menggunakan "pola" saat membuat kata sandi (misalnya, 3 huruf, lalu 2 angka, lalu 3 huruf di seluruh organisasi). Kata sandi yang baik harus berupa urutan acak yang terdiri dari huruf besar-kecil, angka, dan tanda baca. Kata sandi yang dimasukkan dari keyboard maksimal 7-8 karakter, meskipun aturan ini dipatuhi, dapat ditebak dalam waktu yang wajar, jadi sebaiknya kata sandi minimal 11-13 karakter. Solusi ideal adalah menghindari pembuatan kunci menggunakan kata sandi, misalnya menggunakan berbagai kartu pintar, dll., namun dalam hal ini perlu disediakan kemungkinan perlindungan terhadap hilangnya media kunci enkripsi.

Penyimpanan kunci dan kata sandi tidak aman.

Contoh umum kesalahan ini adalah:

  • kata sandi yang panjang dan rumit yang ditulis pada catatan tempel yang ditempel di monitor pengguna.
  • menyimpan semua kata sandi dalam file yang tidak dilindungi (atau dilindungi jauh lebih lemah daripada sistem itu sendiri)
  • penyimpanan kunci elektronik di domain publik.
  • seringnya transfer kunci elektronik antar pengguna.

Mengapa membuat pintu lapis baja jika kuncinya ada di bawah keset?

Transfer data yang awalnya dienkripsi ke lingkungan yang tidak aman.

Saat menyiapkan sistem keamanan, pastikan sistem tersebut berfungsi dengan baik. Misalnya, saya menemukan situasi (tidak terkait dengan 1C) ketika file yang awalnya dienkripsi, ketika program berjalan dalam bentuk yang jelas, ditempatkan di folder sementara, sehingga dapat dibaca dengan aman. Seringkali, salinan cadangan data terenkripsi dalam bentuk yang jelas terletak di suatu tempat “tidak jauh” dari data ini.

Penggunaan alat kriptografi untuk tujuan lain

Dengan mengenkripsi data saat transit, Anda tidak dapat mengharapkan data tersebut tidak dapat diakses di tempat data tersebut digunakan. Misalnya, layanan IPSec sama sekali tidak mencegah server aplikasi "mengendus" lalu lintas jaringan di tingkat aplikasi.

Oleh karena itu, untuk menghindari kesalahan saat menerapkan sistem kriptografi, Anda harus (minimal) melakukan hal berikut sebelum menerapkannya.

  • Temukan:
    • Apa yang perlu dilindungi?
    • Metode perlindungan mana yang sebaiknya Anda gunakan?
    • Bagian mana dari sistem yang perlu diamankan?
    • Siapa yang akan mengontrol akses?
    • Apakah enkripsi akan berfungsi di semua area yang tepat?
  • Tentukan di mana informasi disimpan, bagaimana informasi tersebut dikirim melalui jaringan, dan komputer dari mana informasi tersebut akan diakses. Ini akan memberikan informasi tentang kecepatan jaringan, kapasitas, dan penggunaan sebelum mengimplementasikan sistem, yang berguna untuk mengoptimalkan kinerja.
  • Menilai kerentanan sistem terhadap berbagai jenis serangan.
  • Mengembangkan dan mendokumentasikan rencana keamanan sistem.
  • Evaluasi efisiensi ekonomi (justifikasi) penggunaan sistem.

Kesimpulan

Tentu saja, dalam tinjauan singkat tidak mungkin untuk menunjukkan semua aspek yang terkait dengan keamanan di 1C, tetapi mari kita tarik beberapa kesimpulan awal. Tentu saja, platform ini tidak bisa disebut ideal - seperti banyak platform lainnya, platform ini memiliki masalah tersendiri dalam mengatur sistem yang aman. Namun hal ini tidak berarti bahwa permasalahan tersebut tidak dapat dihindari; sebaliknya, hampir semua kekurangan dapat dihilangkan dengan pengembangan, implementasi dan penggunaan sistem yang tepat. Sebagian besar masalah muncul karena kurangnya pengembangan solusi aplikasi tertentu dan lingkungan eksekusinya. Misalnya, solusi standar tanpa perubahan signifikan tidak berarti terciptanya sistem yang cukup aman.

Artikel ini sekali lagi menunjukkan bahwa setiap rangkaian tindakan keamanan harus mencakup semua tahapan implementasi: pengembangan, penerapan, administrasi sistem dan, tentu saja, tindakan organisasi. Dalam sistem informasi, “faktor manusia” (termasuk pengguna) merupakan ancaman keamanan utama. Serangkaian tindakan ini harus masuk akal dan seimbang: tidak masuk akal dan kecil kemungkinannya akan ada cukup dana yang dialokasikan untuk mengatur perlindungan yang melebihi biaya data itu sendiri.

Perusahaan adalah layanan unik untuk pembeli, pengembang, dealer, dan mitra afiliasi. Selain itu, ini adalah salah satu toko perangkat lunak online terbaik di Rusia, Ukraina, dan Kazakhstan, yang menawarkan kepada pelanggan berbagai macam produk, banyak metode pembayaran, pemrosesan pesanan yang cepat (seringkali instan), dan pelacakan proses pemesanan di bagian pribadi. .