Penyimpanan Data Sensitif - Praktik Terbaik

8

Saya baru-baru ini mulai mengerjakan proyek pribadi tempat saya terhubung ke database menggunakan Java. Ini membuat saya berpikir. Saya harus memberikan informasi login untuk akun database di server DB untuk mengakses database. Tetapi jika saya memasukkannya dalam kode yang sulit maka seseorang mungkin dapat mendekompilasi program dan mengekstrak info masuk itu. Jika saya menyimpannya di file setup eksternal maka masalah yang sama hanya ada, itu akan lebih mudah bagi mereka untuk mendapatkannya. Saya bisa mengenkripsi data sebelum menyimpannya di kedua tempat tetapi sepertinya itu bukan gagal aman juga dan saya bukan ahli enkripsi dengan cara apa pun. Jadi apa sajakah praktik terbaik untuk menyimpan data pengaturan sensitif untuk suatu program?

Kenneth
sumber

Jawaban:

10

Beberapa opsi di sini:

  • Jalankan program Java di bawah pengguna domain yang diberikan akses ke database (atau, alternatifnya, menyimpan informasi kata sandi dalam file yang hanya dapat diakses oleh pengguna yang menjalankan program Anda).

  • menggunakan penyimpanan kunci, dengan batasan untuk pengguna dan perangkat lunak yang akan menggunakan kunci (seperti apa yang disediakan Mac OS X)

  • menggunakan solusi enkripsi standar, dengan antarmuka yang akan memerlukan input kata sandi enkripsi pada saat startup program (sehingga admin yang memulai program hanya mengetahui kata sandi)

  • mengharuskan uid / kata sandi untuk database dimasukkan pada saat startup program

blueberryfields
sumber
3

Aturan pertama penyimpanan data sensitif adalah jangan. Dalam hal ini, Anda mungkin harus melakukan apa saja yang dilakukan oleh setiap sistem otentikasi - mengeluarkan setiap pengguna kredensial mereka sendiri sehingga Anda tidak memiliki masalah ini. Atau masalah seperti "oh, hentikan, akun basis data dikompromikan. Sekarang saya harus mencari cara untuk menerbitkan kembali kata sandi ini untuk setiap pengguna. Termasuk yang tidak saya ketahui."

Wyatt Barnett
sumber
2

Tidak ada cara untuk mencegah siapa pun yang menerima aplikasi Anda dari mempelajari nama pengguna dan kata sandi. Jika itu tidak dapat diterima, maka Anda harus meletakkan beberapa perangkat lunak antara aplikasi dan database, seperti layanan web.

kevin cline
sumber
1

Biasanya Anda ingin mencoba dan mengenkripsi informasi semacam itu. Misalnya praktik umum dengan pengembangan web di .NET adalah untuk mengenkripsi bagian dari web.config yang berisi string koneksi. Yang lain yang dapat Anda lakukan adalah menggunakan akun domain / windows / os alih-alih koneksi langsung. Ini menjaga Anda dari pengodean kata sandi yang sulit ke dalam aplikasi atau file konfigurasi. Alih-alih, Anda mengatur koneksi dengan memberi otorisasi kepada pengguna aplikasi (atau akun yang menjalankannya).

Ken Henderson
sumber
-2

Anda harus mengenkripsi aplikasi Anda sehingga tidak dapat diurai. Saya tidak tahu alat Java, tapi pasti ada.

Omong-omong, Anda harus selalu mengenkripsi aplikasi Anda untuk keamanan! Maka Anda dapat membuat hardcode jika Anda mau.

EDIT: Mengikuti komentar, saya akan memastikan bahwa Anda BISA mengenkripsi aplikasi Anda, Anda hanya perlu memiliki alat (semacam decrypter 'on the fly') pada mesin pengguna untuk menjalankan aplikasi yang dienkripsi. Ini yang saya gunakan dengan Foxpro dan mungkin ada juga untuk bahasa lain. Mungkin, meskipun demikian, jenis alat itu tidak digunakan dalam teknologi yang lebih baru, tetapi hal itu jelas membuat aplikasi saya tidak mungkin untuk didekompilasi saat berjalan dengan baik.

EDIT 2: Beberapa produk yang saya temukan untuk enkripsi .NET: http://www.hallogram.com/ezcryptonet/index.html

Mathieu
sumber
4
kebingungan! = enkripsi. Apa yang Anda rekomendasikan tidak layak secara teknis, juga tidak ada untuk perangkat lunak apa pun. Program yang dienkripsi sehingga tidak dapat didekompilasi juga tidak dapat dieksekusi. Program yang dapat dieksekusi, selalu dapat didekompilasi
blueberryfields
2
apa yang mencegah pengguna mengumpulkan output dari decrypter, atau memodifikasi decrypter?
kevin cline
Kata-kata saya di sini salah, itu tidak mendekripsi, tetapi lebih tepatnya. Tentang memodifikasi decrypter, well, saya kira itu bisa jadi kemungkinan. Pengetahuan saya tentang bawahan tidak cukup luas untuk menjawabnya.
Mathieu