Jak schować kod

0

Witam,
Czy istnieje możliwość aby w jakiś sposób schować kod programu ponieważ wykorzystuje connect do bazy sql i w kodzie widnieją dane logowania do niej, a ludzie "dekompiluja" mój program i wchodzą do bazy?

4
Maskak47 napisał(a):

ludzie "dekompiluja" mój program i wchodzą do bazy?

Ludź nie powinien być w stanie zrobić bezpośrednio w bazie czego nie wolno mu zrobić z poziomu programu, więc nie powinno być to zmartwieniem.
Również w idealnym przypadku ludź nie powinien mieć potrzeby grzebania w bazie – jeśli to robi to znaczy że jakiejś funkcjonalności w programie chyba brakuje…

2

Niezależnie od tego, jak głęboko i jak dziwnie zaszyfrujesz te dane, w pewnym momencie muszą one i tak zostać odszyfrowane (np. aby przekazać je sterownikowi) - odnalezienie tego miejsca i odczytanie z pamięci odszyfrowanych już danych z wykorzystaniem debuggera jest kwestią kilku minut.

Nie powinieneś w ogóle łączyć się bezpośrednio z bazą danych - wystaw sobie normalne API z uwierzytelnianiem.

0
Azarien napisał(a):
Maskak47 napisał(a):

ludzie "dekompiluja" mój program i wchodzą do bazy?

Ludź nie powinien być w stanie zrobić bezpośrednio w bazie czego nie wolno mu zrobić z poziomu programu, więc nie powinno być to zmartwieniem.
Również w idealnym przypadku ludź nie powinien mieć potrzeby grzebania w bazie – jeśli to robi to znaczy że jakiejś funkcjonalności w programie chyba brakuje…

mam baze z strony na ktorej kupilem hosting i nie mam praw zeby zminic uprawnienia ;)
a niestety mam tworzenie kont w aplikacji i niestety ktos mi sie wlamuje i usuwa konta itp

2

Program powinien pracować na użytkowniku bazodanowym o obniżonych uprawnieniach żeby właśnie nie można było wyciągać wszystkiego mając dostęp do hasła. Proponuję założyć takiego usera, nadawać granty na odpowiednie tabele, a jeśli chcemy coś ukryć to używajmy widoków i procedur i do nich zadawajmy uprawnienia. Ostatecznie możesz zrobić pośrednik między aplikacją a bazą w postaci proxy/api, które potrafi tylko stosowne dane zwracać, a to API będzie poza dostępem użytkowników.

2

Kasowanie kont mozesz zablokowac uzywajac uzytkownika o obnizonych uprawnieniach (j.w.)

Zmienianie nieswoich danych mozesz zablokowac usuwajac uprawnienie update i dajac w zamian SP lub modyfikowalny widok (jesli potrzeba w aplikacji). W tym SP mozesz sprawdzac czy uzytkownik modyfikuje swoje dane (najlepiej na podstawie kontekstu bazy a nie parametrow od uzytkownika).

Dodatkowo dodalbym tracing zeby sprawdzic czy na pewno to robi ktos specjalnie. Bo moze sie okazac ze po prostu masz babola w aplikacji.
Po prostu dodaj jakas flage ktora jesli jest aktywna powoduje odkladanie szczegolow kazdej operacji gdzies do logu.

0

az.pl i moge tylko stworzyc nowa baze z juz istniejacym uzytkownikiem i nie moge zmienic mu uprawnien ;/ wiec chyba pozostaje mi tylko zmiana bazy danych
Dziekuje wszystkim za pomoc

1

Najrozsądniejszym rozwiązaniem będzie wystawienie API które obsłuży żądania dostępu do bazy zamiast wystawiania współdzielonej bazy każdemu klientowi

0
var napisał(a):

Najrozsądniejszym rozwiązaniem będzie wystawienie API które obsłuży żądania dostępu do bazy zamiast wystawiania współdzielonej bazy każdemu klientowi

a moglbys mi podac jakis tutorial do tego jak by to mialo dzialac? ja zielony jestem troche ;/

1

Powinieneś utworzyć web API do którego metod podepniesz aplikację kliencką. Klient nie będzie łączył się bezpośrednio z bazą a przez to właśnie API w którym możesz zaimplementować przeróżne metody autentykacji i autoryzacji.
Pozbędziesz się wtedy z aplikacji oddawanej klientowi tak danych tak wrażliwych jak connection stringi, rzeczywisty dostęp do danych będzie realizowany wyłącznie przez API

1
Maskak47 napisał(a):
var napisał(a):

Najrozsądniejszym rozwiązaniem będzie wystawienie API które obsłuży żądania dostępu do bazy zamiast wystawiania współdzielonej bazy każdemu klientowi

a moglbys mi podac jakis tutorial do tego jak by to mialo dzialac? ja zielony jestem troche ;/

podstawy tworzenia WebAPI z ASP.NET Core:
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio

a tutaj przykład aplikacji konsolowej która się komunikuje z WebAPI:
https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client

EDIT:
Idea jest taka, że aplikacja konsolowa wysyła żądania *HTTP *do WebAPI, a WebAPI robi z Twoją bazą danych cokolwiek tam chcesz. WebAPI może mieć dostęp do bazy i może też zwracać odpowiedzi z treścią (*cotent *np. w formacie JSON) do aplikacji konsolowej, np rekordy z bazy

0

Ja rozumiem że kolega ma dostęp do bazy na zewnętrznym hostingu, na którym nie może uruchomić żadnej swojej aplikacji konsolowej lub winform. Można próbować zaciemnić kod z użyciem narzędzia Confuser ale to nie do końca uchroni cię przed odszyfrowaniem dostępu do bazy. Sprytny user z tym sobie poradzi. Jeśli nie masz możliwości dostępu do sql przez aplikację działającą w przeglądarce to proponowałbym uruchomienie aplikacji pośredniczącej między bazą a użytkownikiem końcowym na jakimś komputerze, do którego wszyscy mogą się łączyć. Wtedy ty dajesz aplikację końcową użytkownikowi, który nie komunikuje się z bazą a twoją pośredniczącą aplikacją. A ta ów aplikacja zajmuje się komunikacją z bazą i przekazywaniem informacji z / do bazy i do użytkownika końcowego.

To takie jedno z najprostszych i najszybszych rozwiązań, choć mało eleganckich. Najlepsze to dostęp do bazy przez WWW. Ale tu już trochę musisz posiedzieć nad taką aplikacją. az.pl nie ma chyba histingu asp.net więc tu nie postawisz żadnej aplikacji bazującej na platformie asp.net

1 użytkowników online, w tym zalogowanych: 0, gości: 1