Jak połączyć użytkowania z bazą danych bez podawania hasła.

0

Witam.
Wymyśliłem sobie aplikację, w której użytkownik będzie musiał się zarejestrować, w związku z czym będę jego dane przechowywał w bazie MySql. Tu moje pytanie, wiem już jak połączyć się z bazą:

using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using BCrypt.Net;

namespace Mysql
{
    class Program
    {
        static void Main(string[] args)
        {
            string connString = "server=sql4.freemysqlhosting.net;" +
                "user=sql496743;" +
                "database=sql496743;" +
                "port=3306;" +
                "password=********;";
            MySqlConnection conn = new MySqlConnection(connString);
            try
            {
                Console.WriteLine("Connecting to MySql...");
                conn.Open();

                string sqlGet = "Select * From Users";
                MySqlCommand cmd = new MySqlCommand(sqlGet, conn);
                MySqlDataReader rdr = cmd.ExecuteReader();

                while (rdr.Read())
                {
                    Console.WriteLine(rdr[0] + " -- " + rdr[1] + " -- " + rdr[2] + " -- " + rdr[3]);
                }
                rdr.Close();

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            conn.Close();
            Console.WriteLine("Done");
            Console.ReadLine();

        }
    }
} 

Jednak myślę, że takie rozwiązanie nie jest bespieczne gdzie na sztywno muszę podać hasło do bazy danych, mam tu na myśli tą linię:

 string connString = "server=sql4.freemysqlhosting.net;" +
                "user=sql496743;" +
                "database=sql496743;" +
                "port=3306;" +
                "password=********;";

Oczywiście to jest tylko test i nie ma związku z docelową aplikacją ale chciałbym najpierw rozwiązać wszystkie problemy jakie mogę napotkać - albo inaczej, których nie umiem jeszcze rozwiązać :P

1

Ech, temat poruszany setki razy.
Napisz RESTowe API i komunikuj się za jego pośrednictwem.

0

Wiesz dopiero wchodzę w ten temat i nie wiedziałem jak to ugryźć ale link @fasadin mi wyjaśnił sprawę :P Czy dobrym rozwiązaniem jest przechowywanie stringów w pliku konfiguracyjnym aplikacji?

1

No ale co to zmieni? Możesz je nawet sobie autorskim algorytmem szyfrować, ale każdy średnio ogarnięty reverse engineer (tłumacz pls?) doskonale wie, że wystarczy w odpowiednim miejscu w programie ustawić czujkę i już ma wszystkie dane na tacy.
Jedynym sensownym rozwiązaniem jest napisanie API.

0

Nie wiem co to zmieni, nie znam się dlatego pytam. Na stronie msdn nie piszą nic o tym, że to rozwiązanie nie jest zbyt dobre. Na stack overflow znalazłem tylko przykłady z app.config.

1

Jeśli wrzucisz nawet najbardziej skomplikowane i zaszyfrowane hasło, to i tak koniec końców do serwera musi zostać wysłane plain textem, prawda?
Więc teraz na logikę - skoro komputer użytkownika wysyła do bazy danych pakiet o połączeniu zawierający jawną nazwę użytkownika oraz hasło, to pakiet ten może zostać podejrzany (np. Wiresharkiem), a hasło skradzione, po czym haker może już sobie podglądać oraz modyfikować w bazie co mu siępodoba.

Jeśli natomiast łączyć będziesz się przez API, to i tak najwyżej zrobi tyle na co pozwala API, czyli nic, czego byś się nie spodziewał.

Najważniejsza zasada tworzenia zdrowych aplikacji - nigdy nie ufaj użytkownikowi :P

1

Użytkownik ma swoją aplikację z którą może zrobić. To co Ty musisz zrobić to Web Api na własnym serwerze do którego łączy się użytkownik (np przez właśnie REST'owe web api). Na serwerze możesz robić co chcesz i używać dowolnego hasła, bo jedyne do czego będzie miał dostęp użytkownik to api, które mu wystawisz. Aplikacja użytkownika (czy to jest w javascriptcie czy jakaś windsformowa) łączy się wtedy z Twoją aplikacją z API, a nie bezpośrednio z bazą i tak to powinno działać :)

0

Trochę poczytałem i pooglądałem filmików ale nie wiem czy do końca dobrze wszystko rozumiem. Mam aplikacje mobilną (Windows Mobile), która za pośrednictwem web Api pobiera dane, które potrzebuję. Takich przykładów jest dość dużo ale nie mogę znaleźć nic na temat jak ta aplikacja webowa ma pobierać dane z bazy danych?

0

Po stronie serwera działa sobie jakiś serwisik oparty o Javę, PHP, Pythona (...), który przetwarza requesty - w nim już bezproblemowo jawnie łączysz się z bazą danych i przetwarzasz co trzeba.

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