Jak przechowywać wrażliwe dane i nie wrzucać ich na GitHub? Na przykładzie ASP.NET MVC


20 kwietnia 2017 / Michał Kortas


Każda większa aplikacja będzie w końcu musiała mieć wbudowane wrażliwe dane w swój kod. Jak podejść do tematu, zachowując się odpowiedzialnie? Tego dowiesz się w dzisiejszym wpisie, napisanym pod wpływem chwili, kiedy sam się nad tym zastanawiałem. W moim przypadku były to dane dostępowe do serwera SMTP, które musiałem gdzieś umieścić, podczas budowania serwisu do obsługi poczty email. Zapraszam do lektury.

TL;DR

Wrażliwe dane trzymaj w osobnym pliku, który będziesz mógł w prosty sposób wykluczyć w .gitignore. Poniżej informacja, jak zrobić to w ASP.NET MVC.

Słowem wstępu

Zapytasz, o co chodzi? Co za problem wpisać dane w kodzie? W zasadzie żaden, ale… nie w życiu tak nie rób!

Przez pomyłkę prawie puściłem pulla na GitHuba z danymi serwera SMTP, które „na szybko” wpisałem w metodzie odpowiedzialnej za wysyłkę email, a przecież w Internecie nic nie ginie. Jak więc podejść do tematu, żeby nie informować o haśle do konta innych użytkowników, którzy obserwują, czy przeszukują repozytoria?

Dużo pytań, z których formułuje się jedno, zawarte w tytule.

Jak przechowywać wrażliwe dane i nie wrzucać ich na GitHub?

Jest na to prosty sposób, przynajmniej jeśli chodzi o aplikację pisaną w ASP.NET MVC. Można wykorzystać plik Web.config.

Jeśli otworzysz sobie plik Web.config, ujrzysz dość sporego XMLa konfigurującego Twoją aplikację. Do zawartości tagów <appSettings>  można dostać się z poziomu kodu za pomocą:

… gdzie email.SenderEmail to nazwa pola w tym XMLu.

Ale, ale… przecież Web.config jest najczęściej trzymany w repozytorium. To nadal umieszczanie w nim wrażliwych danych. Pójdźmy więc dalej.

Wystarczy, że w tagu otwierającym, w atrybucie file umieścisz ścieżkę do nowego pliku. W moim przypadku nazwałem go sobie Services.config. Pełny kod dodatkowego pliku dla jednego klucza jest następujący:

Oczywiście nic nie stoi na przeszkodzie, żeby go rozbudowywać wedle potrzeb.

Fajnie, wrażliwe dane są w osobnym pliku, co z tego? No tu już sprawa jest chyba oczywista. Co robi programista, żeby nie wysyłać pliku do repozytorium? Deklaruje go w .gitignore.

Proste i skuteczne, o czym się już przekonałem.


Tagi:


5 odpowiedzi na “Jak przechowywać wrażliwe dane i nie wrzucać ich na GitHub? Na przykładzie ASP.NET MVC”

  1. Comandeer pisze:

    Ostatnio zaczyna mnie przekonywać całkowicie inne podejście: trzymanie tego typu danych w zmiennych środowiskowych. W PHP jest do tego fajna biblioteka: https://github.com/vlucas/phpdotenv ale myślę, że ASP .NET gorsze nie jest i też ma coś takiego ;)

  2. Dobre rozwiązanie. Nie pomyślał bym o takim. Dzięki :-)

  3. nrm pisze:

    U mnie to samo co u Comandera: #tylkoENV ;)

  4. buli pisze:

    Zaskoczyło mnie że ten atrybut „file” jest obsługiwany od czasów .NET Framework 1.1. Nie spotkałem się, a wygląda na fajne rozwiązanie w niektórych scenariuszach :)

    Podejście ze zmiennymi środowiskowymi wydaje się mieć jedną dodatkową zaletę nad trzymaniem tego w systemie plików. Można np. podpiąć kod trzymany na publicznym repozytorium (GitHub) do usługi hostingu (np. na Azure) i włączyć continuous deployment po każdym commicie. Kod leci wtedy z publicznego źródła, hasła ze zmiennych środowiskowych i wszystko od razu działa ;)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *