Operator amator Delphi Napisano Marzec 18, 2011 Zgłoś Share Napisano Marzec 18, 2011 Witam. Mam taki problem. Chcę aby mój program łączył się z bazą MySQL. Nie chce trzymać tego hasła w programie, ponieważ w ten sposób narażam się na łatwe przechwycenie go (np. dekompilacja). Chciałbym żeby mój program obsługiwał około 100 użytkowników. Każdy z nich pobierał by z tej bazy przez mój program jakieś rekordy, oraz dodawał je. Macie jakiś pomysł? Szukałem na google jak zrobić to za pomocą wywoływania skryptu php, ale nie znalazłem żadnych przykładów które bym zrozumiał. Jeśli ktoś wie jak się takie rzeczy robi to proszę o wytłumaczenie jak wymieniać dane między aplikacją a skryptami umieszczonymi na serwerze. Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Marzec 18, 2011 Zgłoś Share Napisano Marzec 18, 2011 Najlepiej aby wszelkie operacje na bazie były wykonywane z poziomu skryptów na serwerze. Twój program korzystałby z funkcjonalności oferowanych przez te skrypty. Link do komentarza Udostępnij na innych stronach More sharing options...
Operator amator Delphi Napisano Marzec 18, 2011 Autor Zgłoś Share Napisano Marzec 18, 2011 Najlepiej aby wszelkie operacje na bazie były wykonywane z poziomu skryptów na serwerze. Twój program korzystałby z funkcjonalności oferowanych przez te skrypty. Też tak myślałem, żeby tak zrobić. Pytanie tylko jak korespondować z tymi skryptami? Na tą chwile jestem w stanie wrzucić na formę WebBrowsera który by wywoływał te skrypty jak zwykła przeglądarka, po czym bym kod HTML strony czytał, ale nie podoba mi się takie rozwiązanie. WebBrowser jest do du**. Można by to jakoś bardziej po ludzku skodzić? Czy takie rozwiązanie jest odporne na sniffing? Co prawda, w moim programie zależy mi tylko na ukryciu hasła do bazy, ale na przyszłość chciałbym wiedzieć czy taki algorytm się nada. Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Marzec 18, 2011 Zgłoś Share Napisano Marzec 18, 2011 Najpierw sprawdź czy MySQL obsługuję połączenie ssl jeśli tak to nie ma problemu, a w programie i tak musisz trzymać zakodowane hasło. Jeśli jednak chcesz zrobić warstwe logiczną osobno to najlepszym rozwiązaniem to zdalne wywoływanie funkcji: CORBA, SOAP(php chyba to obsługuję) itp. Jeśli jednak chcesz robić własny protokuł do tego(co jest trochę bez sensu) to masz wiele opcji do wykożystania, wszystko to co może ustanowić połączenie, wysłać i odebrać dane: Sockety, Strumienie i wiele bibiotek które bazują na tym a udostępniają wygodny interfejs. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Operator amator Delphi Napisano Marzec 18, 2011 Autor Zgłoś Share Napisano Marzec 18, 2011 Najpierw sprawdź czy MySQL obsługuję połączenie ssl jeśli tak to nie ma problemu, a w programie i tak musisz trzymać zakodowane hasło. Jeśli jednak chcesz zrobić warstwe logiczną osobno to najlepszym rozwiązaniem to zdalne wywoływanie funkcji: CORBA, SOAP(php chyba to obsługuję) itp. Jeśli jednak chcesz robić własny protokuł do tego(co jest trochę bez sensu) to masz wiele opcji do wykożystania, wszystko to co może ustanowić połączenie, wysłać i odebrać dane: Sockety, Strumienie i wiele bibiotek które bazują na tym a udostępniają wygodny interfejs. To co piszesz jest dla mnie trochę trudne do zrozumienia (pewnie ze względu na moją mała wiedzę). Jeśli będę trzymać hasło w programie to będzie bardzo prosto je rozkodować, nawet jeśli użyje w kodzie programu funkcji typu szyfr cezara która i tak będzie widoczna po dekompilacji. Pomysł z obsługą skryptów wydaję się dobry, tylko pytanie jak je obsługiwać - czyli wysyłać i pobierać z nich dane? Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 18, 2011 Zgłoś Share Napisano Marzec 18, 2011 nie do konca rozumiem, jesli chcesz ograniczyc dostep do operacji na bazie to definiujesz uzytkownika o malym zakresie uprawnien, udostepniasz mu tylko widoki lub widoki + procedury skladowane. W twoim programie user + haslo moze byc jawne bo de facto ograniczenia ustawiasz na poziomie bazy danych. Jakie ma znaczenie czy schowasz baze za php czy corba czy inna warstwa posrednia skoro ta warstwa wykonuje to co kaze program klient ktory musi podac haslo do zalogowania sie, wiec znowu wraca problem hasla i usera. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Operator amator Delphi Napisano Marzec 19, 2011 Autor Zgłoś Share Napisano Marzec 19, 2011 nie do konca rozumiem, jesli chcesz ograniczyc dostep do operacji na bazie to definiujesz uzytkownika o malym zakresie uprawnien, udostepniasz mu tylko widoki lub widoki + procedury skladowane. W twoim programie user + haslo moze byc jawne bo de facto ograniczenia ustawiasz na poziomie bazy danych. Jakie ma znaczenie czy schowasz baze za php czy corba czy inna warstwa posrednia skoro ta warstwa wykonuje to co kaze program klient ktory musi podac haslo do zalogowania sie, wiec znowu wraca problem hasla i usera. OK, do mojego programu to by wystarczyło, ale czy da się zrobić tak (pytam już na przyszłość, żeby później nie odkopywać tego tematu), żeby nadać dostęp do podglądania bazy tylko określonej grupie osób (np. pracowników firmy jakieśtam). Wiem że można by było każdemu z osobna założyć konta MySQL, ale załóżmy, że jest ich około 100 osób więc takie rozwiązanie odpada. Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Marzec 19, 2011 Zgłoś Share Napisano Marzec 19, 2011 korespondowanie z bazą za pomocą skryptów moim zdaniem nie ma sensu, jest ono dobrym rozwiązaniem w przypadku braku możliwości dostępu do MySQL'a poza serwerem. Ale jak... ? Program komunikuje się ze stroną protokołem http (ja w swoim używałem czystych socket'ów i tworzyłem ręcznie protokół). Następnie program musiał się zalogować (wysłać metodą POST login + hasło użytkownika), po czym dostawał kod ciastka i zapisywał sobie w zmiennej. Pobieranie informacji ze strony polegało na dekodowaniu treści wysyłanej przez skrypt php. np. KOD soft.php?a=articles&p=2 powodowało wyświetlenie KOD Title:"Tytuł strony";Id:"2";Content:"Treść strony ...;]"; Program taki ciąg dzielił na tablicę bloków: KOD Title:"Tytuł strony" Id:"2" Content:"Treść strony ...;]" a to z kolei na tablice zmiennych: KOD data_table['Title'] := "Tytuł strony"; data_table['Id'] := "2"; data_table['Content'] := "Treść strony ...;]"; W przypadku przekroczenia ważności ciastka (w bazie serwisu) program po prostu tracił dostęp do danych i strony zwracały: KOD error:00 u mnie 00 - brak dostępu = program jest niezalogowany. Takie rozwiązanie stosować można jako "panel administracyjny" dla danego serwisu www. Pozdrawiam. Prawdziwy programista wiesza sie wraz ze swoim programem. Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Marzec 20, 2011 Zgłoś Share Napisano Marzec 20, 2011 Toster: Jawny login i hasło do bazy nie jest dobrym pomysłem. Nawet jeśli ograniczysz uprawnienia tylko do selecta to każdy będzie mógł podglądać dane innych użytkowników, o insert i update nie wspominając, które mogą nieźle namieszać. De fakto problem z hasłem już nie wraca, każdy użytkownik musi założyć własny login, którego będzie używał do zalogowania się do systemu. A znajomość własnego loginu i hasła nie jest wiedzą wystarczająco do grzebania w bazie danych więc to możemy już sobie jawnie zapisa gdzieś na dysku, no chyba że chcemy ograniczyć możliwość wykradzenia haseł innym użytkownikom, ale to w najgorszym przypadku program nie musi tego zapamiętywać tylko przy każdym uruchomieniu prosić o podanie tych danych. spike: Oddzielenie warstwy loginczej jako osobny server ma sens, i jest powszechnie stosowane, to co ty omówiłeś to zwykłe proxy, które faktycznie nie ma wielkiego sensu. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 20, 2011 Zgłoś Share Napisano Marzec 20, 2011 Blind: Dobrze skonfigurowana baza z odpowiednio ustawionymi prawami, widokami i metodami skladowanymi moze sie sama bronic calkiem dobrze. Propozycja ktora podalem jest przy zalozeniu ze login/haslo jest zaszyte w programie czyli de facto jest jawne. A jasli jest jawne to nie ma znaczenia ile warst posrednich bedzie bo zawsze atakujacy bedzie mial do nich dostep dzieki zdobytemu dostepowi. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.