2009-08-11 2 views

Odpowiedz

7

Zakładam, że chcesz zaszyfrować dane wyjściowe dziennika. W takim przypadku musisz napisać własną aplikację Appender, która może obsługiwać szyfrowanie. Proponuję dowiedzieć się, jaki mechanizm wyjściowy zamierzasz używać bez szyfrowania (np. FileAppender, EventLogAppender itp.), A następnie rozszerzyć tę Appender i zastąpić funkcjonalność, która faktycznie wypisze dane wyjściowe.

Dokumentacja referencyjna dotycząca elementów do dodawania znajduje się pod adresem here.

Na przykład rozszerzyć FileAppender o EncryptedFileAppender i przesłonić/zaimplementować członków, których potrzebujesz, aby podłączyć się do zapisu pliku.

Można również przedłużyć aplikację IAppender i utworzyć program do tworzenia aplikacji całkowicie od zera. To da ci większą kontrolę, ale może wymagać więcej pracy, jeśli wszystko, co próbujesz zrobić, to szyfrowanie twojego ładunku.

+0

Dzięki za miłe wskazówki. Chodzi ci o to, że lepiej zaszyfruję moją zawartość przed dołączeniem do moich dzienników przez zaimplementowanie otoki, która wykonuje zadanie. Następnie treść moich logów byłaby cały zaszyfrowana bez konfiguracji czegokolwiek w log4net? – paradisonoir

+0

Powinieneś być w stanie podłączyć się tam, gdzie faktycznie dołącza każdy element zamówienia do pliku dziennika, co pozwala ci zaszyfrować całą linię. Gdy już to zrobisz, będziesz musiał skonfigurować log4net, aby używał Appendera, zamiast tego, co wcześniej używałeś. W takim przypadku EncryptedFileAppender – Joseph

+0

@Joseph, sugerujesz zaszyfrować go dla każdego wiersza dzienników, lub gdy przejdzie do innego pliku (w miarę jak osiąga maksymalny rozmiar dzienników)? – paradisonoir

2

Jeśli próbujesz uniemożliwić użytkownikom czytanie go w Internecie, możesz zmienić nazwę pliku, w którym zapisujesz zapisy dziennika, na rozszerzenie, którego nie zezwalasz na obsługę witryny. W ten sposób użytkownicy nie mogą odgadnąć w pliku dziennika i uzyskać do niego dostęp przez Internet.

Jeśli próbujesz uniemożliwić użytkownikom zalogowanym na serwerze przeglądanie zawartości pliku, możesz użyć kontroli uprawnień, aby zablokować plik, tak aby tylko użytkownicy z określonych grup administratorów mogli przeglądać jego zawartość.

Alternatywnie można zalogować się do bazy danych, aby nie było pliku, który musi być w ogóle zabezpieczony.

3

Nie ma gotowej obsługi szyfrowania. Tak jak inni tutaj stwierdzili, będziesz musiał to zaimplementować samodzielnie.

To powiedziawszy, proponuję podklasy ForwardingAppender do szyfrowania. Pozwoli to w zasadzie umieścić twojego appendera "przed" dowolnym standardowym appenderem, który zdecydujesz się na pisanie na dysku.

1

Zdaję sobie sprawę, że ta odpowiedź przychodzi kilka lat po pierwotnym terminie post, ale po obliczu tego samego problemu postanowiłem stworzyć otwartą pakiet źródłowy właśnie do tego zadania: log4net wiadomość szyfratora

Kod źródłowy może można znaleźć na GitHub

i pakiet można pobrać z NuGet

+0

Dzięki za udostępnienie, szukałem podobnego rozwiązania dla nlog, teraz przynajmniej mam implementację refowania do naśladowania. Przy okazji planowałem użyć klucza publicznego/prywatnego do zaszyfrowania klucza losowego, aby jeszcze bardziej poprawić bezpieczeństwo, zamiast naprawić klucz symetryczny, ponieważ każdy, kto ma dostęp do dziennika, może również uzyskać klucz z app.config – faulty

+1

Cieszę się, że mogę pomóc! Podstawowy przypadek użycia dla mnie koncentruje się wokół logów przechowywanych w bazie danych lub poza początkowym serwerem. Myślałem, że jeśli atakujący może uzyskać dostęp do pliku web.config, prawdopodobnie będzie to bezużyteczny gest szyfrowania dzienników! Zastanawiałem się nawet nad przeniesieniem implementacji na NLog, ale życie stało na drodze. Jeśli uda Ci się stworzyć projekt i otworzyć go, daj mi znać, bo byłbym szczególnie zainteresowany! –

+1

Należy również wspomnieć o tym, że sekcja klucza szyfrowania w pliku web.config powinna być zaszyfrowana za pomocą Aspnet_regiis. Oznaczałoby to, że klucz nie jest w formie zwykłego tekstu i byłby nieco bezpieczniejszy. –