swat09 napisał(a)
Niestety hasło musi być w programie z tego względu, że użytkownik nie może go znać. Domyślam się że rozwiązania idealnego nie ma (są ludzie którzy łamią nawet zabezpieczenia bankowe...). Jednak chodzi o utrudniony dostęp do tych danych. Chyba zastanowię się nad tym szyfrowanym configiem, może da się go w exe wkomponować ? Dostęp będzie jeszcze bardziej utrudniony.
o, istotna informacja. czyli uzytkownicy nie sa na tyle zaufani, aby znac haslo do bazy ktorej beda uzywac? hm..
to jeszcze trzy wazne pytanie:
- czy w ogole fakt istnienia tej bazy jest jawny?
- dlaczego obawiasz się że użytkownik znający haslo do tej bazy, może jej zaszkodzić? [pamietaj, ze na bazie można ustawiac uprawnienia nawet z rozroznieniem na operacje insert/delete/itp!]
- na ile bezpieczny musi byc Twoj "system"? porownaj to do czegos "znanego". projekt na zaliczenie i profer sie czepia? e-zakupy? e-ankiety? portal i rejestracja uzytkownikow? firma i listy pracownikow? firma i system fakturujacy? szpital i informacje o lekach? teatr/kino i rezerwacje miejsc? wojsko i plany ewakuacji miasta?
a teraz, czesciowo dowcip, czesciowo odpowiedz:
Jesli stopien ochrony ma byc jakis, ale nie musi byc wysoki ani nawet sredni, byle by "szczawikow" i "script kiddies" odstreczyc, wymysl haslo bedace nieoczywistym ale dobrze znanym przez wszystkich napisem.. na przyklad, jeśli Twoj connstring, bez hasla, ma ogolnie postac:
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername
to nie uzywaj app.config, tylko wyryj to gdzies w programie, w kawałkach, potem gdzies w programie to posklejaj, przekaz gdzie indziej, niech to gdzie-indziej dolepi Password równe temu pozlepianemu napisowi (tak, password=connectionstringbezhasla), przekaz to jeszcze gdzies indziej, i dopiero stamtad uzywaj. potem po skonczeniu programu przelec wszystko dotsfucatorem
plusy:
- jawnie stringiem w binarce connstring sie nie pojawi
- jak ktos znajdzie gdzie budujesz connstringa, co mu mangling lekko utrudni, to mu jeszcze troche pograsz na nerwach haslem do polaczenia (po zmanglowaniu programu obsfucatorem nie bedzie banalne skumac, ze naprawde haslo brzmi wlasnie tak..)
minusy:
- jesli ktos wie jak wyciagnac haslo z zaszyfrowanego app.config, to nie bedzie sie bawil, tylko od razu zacznie tak samo, i bardzo szybko znajdzie ostateczny connstring. co najwyzej usmieje się z hasla-żartu do polaczenia i bedac w dobrym humorze, zrobi mniej szkód, albo popełni błędy pozwalające dowiedziec się kto to był..
a tak bardziej na serio..
Jesli obawiasz się, że użytkownik wiedzący za dużo może Ci zaszkodzić, to znaczy, że już teraz wiesz że architektura Twojego systemu jest "zła".
Jeśli obawiasz się podawać komuś haslo do Twojej bazy, nawet pomimo nadania odpowiednich uprawnien po jej stronie, to znaczy ze Twoj program nie powinien operować na tej bazie. Niestety to jest dokladnie tak proste. Zamiast gadac z bazą bezpośrednio, musisz mieć wtedy jakiś "izolator", cos z czym Twoj program (albo oszalały użytkownik) będzie mógł dowolnie rozmawiać, i tylko ten "izolator" będzie miał prawo dotykac bazy. "Izolator", czyli jakies serwer stojący u Ciebie w domu czy firmie, na którym bedzie chodzic Twoja usługa, nie wazne czy to faktycznie program czy grupka webservice'ow. Serwer stojacy "pod Twoja ręka" bedzie "gwarantowal" bezpieczenstwo kodu, wiec w nim bedziesz mogl uzywac hasel do bazy, i ich ochrona bedzie sprowadzona do ochrony serwera-izolatora przed wlamaniem lub kradzieza fizyczna.. To tyle.. chyba juz "czaisz" wizję..
A jesli sie nie obawiasz az tak, to sie nie obawiaj. Jakiekolwiek pierwsze lepsze rozwiazanie, czy z szyfrowanym app.config, czy z dotsfucatorem, czy z czymkolwiek co po prostu nie pozwoli odczytac hasla przez otworzenie .exe w Notepad'zie - bedzie wystarczajaca, poniewaz i tak NIE BEDZIE wystarczajace dla osoby wiedzacej o co tak naprawde chodzi..
PS. powyzej jest moj komment "to bylo do massther'a, prawda? tez mialem tak ochote odpisac, ale sie powstrzymalem.." - powstrzymalem, bo stwierdzilem, ze warto wyelaborowac no i napisalem -tego- posta.. uzywanie/nieuzywanie akurat tego co zaproponowal massther, jest zalezne od tego jak bardzo autor sie obawia i jak bardzo musi zabezpieczyc dane. na scriptkiddie oraz uzytkownikow-idiotow-z-glupimi-pomyslami, szyfrowany app.config wystarczy w zupelnosci