Jak zapewnić użytkownikom, że witryna i hasła są bezpieczne [zamknięte]

15

Na niezawodnych stronach internetowych zawsze widzę oświadczenia, takie jak „Wszystkie dane są szyfrowane” lub „Wszystkie hasła są szyfrowane przy użyciu szyfrowania 128-bitowego” itp. Jednak nigdy nie spotkałem się z twierdzeniem, np. „Wszystkie hasła są zaszyfrowane”.

Na mojej stronie będę przechowywać wszystkie hasła użytkowników w bazie danych po użyciu skrótu SHA-512 (najprawdopodobniej) z losową solą. Chcę dodać fragment zapewniający użytkowników, że ich hasła są bezpieczne, aby nie zniechęcali się do korzystania z mojej witryny, ponieważ wymaga hasła. Chcę, aby użytkownicy czuli się bezpiecznie, ale nie sądzę, aby każdy wiedział, co to jest skrót.

MOJE PYTANIE: Czy można podać komunikat „Wszystkie hasła są zaszyfrowane i bezpieczne”, ponieważ nie sądzę, aby przeciętny użytkownik wiedział, jaka jest różnica między haszowaniem a szyfrowaniem, i prawdopodobnie poczuje się bezpiecznie tylko dlatego, że widzi słowo „szyfrowanie”? Czy może jest jakiś alternatywny komunikat, który powinienem przekazać?

Na marginesie, jestem nowy w szyfrowaniu i haszowaniu haseł i zastanawiałem się, czy byłoby to na razie wystarczająco bezpieczne, kiedy uruchamiam moją stronę. Nie chcę informować użytkowników, że jest bezpieczny, jeśli nie jest. Wszelkie informacje będą mile widziane. Dzięki.

użytkownik2698818
źródło
7
Osobiście nie martwiłbym się zbytnio komunikacją: napisz techniczny opis tego, co robisz, pochowany gdzieś głęboko w FAQ, gdzie znajdą go techniczni myślący. Zresztą nikogo to tak naprawdę nie obchodzi. Co ważniejsze: upewnij się, że postępujesz właściwie (to trudne, jeśli jesteś nowy, ale przynajmniej próbujesz!). Nie buduj własnego haszowania, użyj czegoś takiego jak bcrypt .
Joachim Sauer,
4
Cóż, właściwą rzeczą jest stowarzyszenie loginu i nie zawracanie głowy kolejną nazwą użytkownika i hasłem.
Jan Hudec,
1
OpenID jest dobry, ale nazwa użytkownika / hasło również jest w porządku. Nie sądzę, że Twoim problemem jest przekonanie użytkowników, że Twoja witryna jest bezpieczna. Ponieważ jesteś niedoświadczony, to jak obiecanie czegoś, czego nie masz. Po prostu zastosuj wspólne standardy - nie powstrzymasz przychodzących profesjonalnych hakerów, ale nikt też nie może cię winić.
Hoàng Long,
3
@coredump Rzeczywiście. Używanie SHA-512 do mieszania haseł nie jest po prostu dobre. Nie jest w porządku".
Thomas
3
Prawdopodobnie warto zadać dalsze pytania na temat bezpieczeństwa informacji, aby upewnić się, że uzyskasz najlepszą i aktualną poradę. (To nie znaczy, że dostajesz złe porady, tylko że niekoniecznie jesteśmy specjalistami od bezpieczeństwa).
ChrisF

Odpowiedzi:

22
  1. Użytkownicy nie dbają o to.

    Jedyne, na czym im zależy, to kiedy ktoś pobiera pieniądze z konta bankowego i wydaje się, że ma link, który kilka dni wcześniej uzyskał pełny dostęp do twojej bazy danych.

  2. W prawie każdym przypadku, gdy widziałem takie wiadomości, były one mylące. Najśmieszniejszy był na stronie internetowej z „bezpiecznymi dla wojska” etykietami na każdej stronie. Wystąpił alert informujący, że certyfikat HTTP jest nieprawidłowy. W formularzu logowania wystąpił zastrzyk SQL. Kilka tygodni później witryna została zhakowana, a następnie zniknęła na zawsze.

    Przestaję liczyć liczbę stron internetowych, które twierdzą, że przechowują informacje w bezpiecznym miejscu, mając formularz „Odzyskaj moje hasło”, który faktycznie wysyła oryginalne hasło pocztą e-mail.

    To tak, jak te etykiety „W3C XHTML”. Dlaczego zwykle są umieszczane na stronach internetowych, na których nawet strona główna zawiera co najmniej dziesiątki błędów i podobnych kodów <DIV COLOR='red'>?

Jeśli nadal chcesz uspokoić użytkowników, możesz umieścić coś takiego:

Twoje hasła są bezpieczne. Pamiętaj, że nie widzimy Twojego hasła i nigdy nie wyślemy Ci e-maila z prośbą o podanie go.

Ale szczerze mówiąc, formularz „Zresetuj moje hasło” zastępujący „Zapomniałem hasła; wyślij go do mnie e-mailem” jest znacznie bardziej uspokajający niż jakiekolwiek słowa.

Wskazówki z różnych komentarzy:

  • Nie wymyślaj koła ponownie: użyj OpenID. W ten sposób nie przechowujesz nawet skrótów.

    Źródło: komentarz Jana Hudca .

  • Ponieważ jesteś studentem, otwórz swój projekt. Ponieważ martwisz się: „Nie chcę, aby użytkownicy myśleli, że ich hasła nie są bezpieczne, ponieważ zaprojektowało je jakieś dziecko w szkole”. , nie ma nic bardziej uspokajającego niż to, że można sprawdzić, czytając kod źródłowy, że został napisany przez zręcznego programistę, który dba o bezpieczeństwo.

    Źródło: komentarz Jana Doggena .

Arseni Mourzenko
źródło
Dzięki za wkład. Problem polega na tym, że jestem studentem projektującym usługę dla mojego uniwersytetu. Nie chcę, aby użytkownicy myśleli, że ich hasła nie są bezpieczne, ponieważ zaprojektowało je jakieś dziecko w szkole. Przyjrzałem się wielu różnym metodom, w tym bcrypt, i po prostu nie zdecydowałem, której użyć. Sądzę, że będzie teraz wystarczająco bezpieczny i jeśli wiele osób zacznie go używać, mogę go dodać w razie potrzeby. Na razie pracuję nad tym, żeby to zrobić. Dzięki jeszcze raz.
user2698818,
3
@ user2698818 To, co powinieneś zrobić, to zaprojektować zabezpieczenia, a następnie opublikować pytanie szczegółowo je opisujące i pytające „czy to jest bezpieczne (wystarczające)”. Dobre bezpieczeństwo może być całkowicie publiczne.
Jan Doggen,
@ user2698818: ok. Edytowałem moją odpowiedź.
Arseni Mourzenko,
6
@JDanDoggen: cóż, powinien zrobić to, korzystając z istniejącego systemu bezpieczeństwa, który ktoś inny zaprojektował i zapytał „czy jest wystarczająco bezpieczny”. Najlepiej taki, w którym to pytanie trwało już od dłuższego czasu i zwróciło na niego uwagę kilku ekspertów w tej dziedzinie ;-)
Joachim Sauer
12

Nie przechowuj haseł w pierwszej kolejności! Postępuj zgodnie z przykładem Stack Exchange i pozwól użytkownikom zalogować się przy użyciu swojej tożsamości w innej witrynie, która zapewnia uwierzytelnianie za pośrednictwem OpenID . Implementacje są swobodnie dostępne dla większości popularnych platform internetowych.

Lub ewentualnie jakikolwiek inny protokół. Jeśli jest to projekt wewnętrzny dla jakiejś instytucji (jak sugeruje Twój komentarz do drugiej odpowiedzi), prawie na pewno jest już LDAP, Kerberos (Windows Active Directory też jest oparty na tych dwóch; apache obsługuje uwierzytelnianie HTTP przeciwko nim) lub niektóre taka usługa logowania do komputera. Po prostu połącz się z tym.

Dzięki temu nie musisz przechowywać poufnych informacji (najprawdopodobniej nadal będziesz musiał przechowywać uprawnienia, ale nie są one tak ważne), a użytkownicy nie będą musieli pamiętać innej nazwy użytkownika i hasła, więc ogólnie wygrana.

Jan Hudec
źródło
1
Poinformuj mnie, jakie witryny utworzyłeś, abym mógł ich uniknąć, jeśli traktujesz uprawnienia jako nieistotne z punktu widzenia bezpieczeństwa.
orlp
1
Co jeśli warunkiem jest przechowywanie haseł. Pytanie dotyczy również ich przechowywania.
Piotr Kula,
3
@ppumkin: Istnieje wiele pytań typu „jak użyć X do zrobienia Y”, gdzie najlepszą odpowiedzią jest „używasz Z”. Jeśli się nie zgadzasz, po prostu podaj lepszą odpowiedź ;-).
Jan Hudec,
3
@ppumkin Aby użyć analogii: „Próbuję przełamać kamień pięścią, jakich rękawiczek powinienem użyć?” Sprawdź, czy wiedzą o dłutach, zanim zaoferujesz 19. niemiecką rękawicę kawalerii.
deworde
1
Unikałbym zbyt szybkiego sugerowania OpenID. Tak, jest świetny, ale ogólnie działa najlepiej, jeśli obsługujesz wielu dostawców OpenID / OAuth. Istnieje wiele forów technicznych, blogów, pytań i odpowiedzi itp., Na których musisz się zalogować za pośrednictwem dostawcy OID na Facebooku i nie możesz korzystać z żadnego innego. Jestem w sieci firmowej, która hurtowo blokuje domeny Facebooka, więc nie mogę pracować z tymi stronami. Jeśli zamierzasz obsługiwać OID i na razie będziesz go używać tylko jeden, wybierz dostawcę, który jest popularny wśród odbiorców docelowych i prawdopodobnie nie zostanie zablokowany przez sysadmin. Google i Windows Live to dobry wybór.
KeithS,
2

Powiedzenie:

„To jest bezpieczne”.

jest osobistym osądem, który oceniasz na temat pewnych faktów technologicznych lub procesów, a osąd ten jest ograniczony tym, co sam wiesz o bezpieczeństwie w tym czasie. Ale czy możesz zagwarantować bez wątpienia, że ​​twoje szyfrowanie, metoda przechowywania itp. Wytrzymają każdy rodzaj ataku, nawet taki, o którym nie wiesz lub o którym jeszcze nie wiesz?

Znaczenie: Stwierdzenie to może być nieaktualne, być może nawet bez Twojej świadomości.

Dlatego zgadzam się z powyższym komentarzem @JoachimSauer: Po prostu opisz, co robisz, jak zapisujesz informacje o użytkowniku i mów użytkownikom, w jaki sposób ma to zapewnić bezpieczeństwo Twojej usługi. Następnie użytkownicy mogą sami ocenić.

stakx
źródło
Nie, „To jest bezpieczna” nie jest „osobisty” lub prywatną oświadczenie, że nie jest jak „to jest całkiem” do mnie . W rzeczywistości jest to semantycznie puste stwierdzenie, bez określenia „w stosunku do czego” lub „zabezpiecz się przed jakim atakiem” lub „na jakim poziomie w jakim kontekście”. Jeśli całe twoje zdanie składa się z „to jest bezpieczne”, jest nieaktualne, zanim skończysz pisać i jest bardzo prawdopodobne, że nie jesteś tego świadomy. Zgadzam się jednak w ostatniej części, chodzi o szczegóły.
AviD,
@AviD: Być może przeczytałeś zbyt wiele w moim specyficznym wyborze słów. Tak, powiedzenie, że coś „jest bezpieczne” bez podawania jakichkolwiek szczegółów, jest bez znaczenia. Ale jestem przekonany, że jest to również osobisty osąd, ponieważ nie każdy ma dokładnie to samo poczucie i wymaga „bezpieczeństwa”: To, co A uważa za wystarczająco bezpieczne, może czuć się niepewnie wobec B. Zatem powiedzenie, że coś „jest bezpieczne” sugeruje, że osoba, która sprawia, że ​​stwierdzenie „uznaje je za bezpieczne”. I nie jest to argument mający taką samą wagę, jak podanie komuś odpowiednich faktów i pozwolenie im na wyciągnięcie własnych wniosków.
stakx
Zgadza się, „w odniesieniu do tego, co” miałem na myśli dla jakich wymagań, profilu bezpieczeństwa, ryzyka itp. Wciąż nie jest to osobisty osąd, ale być może to, co rozumiesz przez „osobisty”, rozumiem przez „kontekst”. „Bezpieczny” jest miarą twardej nauki, a nie miękkim „uczuciowym” uczuciem. Ale tak, jak mówisz, nie mów mi, że to „bezpieczne”, powiedz mi, co zrobiłeś, aby to zrobić.
AviD,
@AviD: OK. Nie będę dalej omawiać tej argumentacji, z wyjątkiem powiedzenia, że ​​bezpieczeństwo jest również uczuciowe. To oczywiście więcej, ale gdy pytanie dotyczy „zapewniania” użytkowników (patrz tytuł pytania), to w końcu liczy się uczucie obojętności.
stakx
1

To zależy od kontekstu Twojej witryny.

Na przykład, jeśli jest to strona internetowa konsumenta, istnieje prawdopodobieństwo, że większość z nich będzie dbać tylko o swoje hasła (być może), informacje finansowe / zdrowotne (w zależności) i ich prywatne informacje, takie jak zdjęcia (hahaha, tak, racja ...) .

Jeśli jest to aplikacja biznesowa, odpowiedni jest poziom bezpieczeństwa całej witryny, a nie tylko hasła. Podobnie zależy to od tego, kim są Twoi docelowi użytkownicy - wysoce techniczny / niezbyt techniczny itp.

Cały ten kontekst znacznie określa, co powinieneś komunikować i jaki poziom pewności jest wymagany.

Na przykład dla nietechnicznych konsumentów wystarczy mieć kilka ogólnych, prostych komentarzy, takich jak:

Ta strona została zbudowana przy użyciu najnowocześniejszych technik bezpieczeństwa. Twoje hasło jest zawsze szyfrowane i nigdy nie wyślemy twoich zdjęć do NSA.

(I, jak powiedzieli inni, lepiej nie mieć nawet haseł, użyj standardu, takiego jak OpenId lub OAuth.)

W przypadku wysoce technicznych firm, chciałbyś mieć pełną stronę szczegółów technicznych i proceduralnych, takich jak:

Wdrożyliśmy pełny SDL (bezpieczny cykl rozwojowy) podczas całego procesu rozwoju i wdrażania.
...
Nasza architektura bezpieczeństwa jest ... Daje to korzyści z ...
Zapewniamy bezpieczne kodowanie, takie jak ... przez ... Wykonujemy te i te testy.
Nasza kryptografia obejmuje te algorytmy ... i ... Jesteśmy zgodni z dowolnymi regulacjami branżowymi, których potrzebujesz, i certyfikujemy ...
Nasze bezpieczeństwo jest weryfikowane przez tego niezależnego zewnętrznego konsultanta.
...
Aby uzyskać więcej informacji i przejrzeć nasze zasady lub zorganizować niezależny audyt, prosimy o omówienie z działem marketingu.

Oczywiście nie chcesz przekazywać zbyt wielu szczegółowych informacji, powinno to dotyczyć bardziej samego procesu niż samych haseł ... I oczywiście powinno być oczywiste, że rzeczywistość powinna być zgodna z tym, co tam piszesz , niezależnie od kontekstu, z którym masz do czynienia.

Jak wskazano na jedną z odpowiedzi, większość użytkowników nie dba o to, nie zrozumie, co im powiesz, i mimo to zarejestruje się, nawet jeśli powiesz, że wysyłasz dane użytkownika do NSA.
To nie jest dla nich.
Byliby równie szczęśliwi, gdyby nie mieli żadnych haseł, pozwól mi tylko wybrać moją nazwę użytkownika z listy i zalogować się automatycznie.

Oczywiście dotyczy to niewielkiego odsetka, który się tym przejmuje - należy umożliwić inteligentnym użytkownikom robienie tego, co właściwe, przekazywać im potrzebne informacje i zapewniać im edukację, o którą mogliby poprosić.
Jeśli tego nie zrobisz, gdy coś pójdzie nie tak, pozostałe 98% nagle się obudzi i rozzłości.
( „Jasne, wiedziałem, że nie potrzebne jest hasło, aby zobaczyć moje zdjęcia, ale nie sądzę, że ktoś inny mógł również zobaczyć je !!”)

Zachłanny
źródło
0

Jeśli chcesz, aby Twój system był bezpieczny, siła algorytmu hasła jest bez znaczenia - większość hakerów może złamać hasło w mgnieniu oka, szczególnie jeśli wybrane hasło jest małe lub składa się z ogólnych słów, które haker już „złamał i zapisał” „usiong tęczowe stoły i podobne. Przeczytaj artykuł ArsTechnica na temat łamania haseł, aby uzyskać wiele informacji.

To, co musisz zrobić, to zapewnić użytkownikom, że złoczyńcy nie mogą dostać się do swoich skrótów. Jedna firma dbająca o bezpieczeństwo, dla której pracowałem, miała trójwarstwowy system internetowy, w którym serwery sieciowe nie były fizycznie podłączone do serwerów baz danych. Kiedy mój szef chciał założyć swoją stronę internetową i mieć bezpośredni dostęp do DB (źle zaprojektowany kod, powiedział „nuff”), powiedziano mu, że nie może go mieć, a kiedy naciskał… powiedziano mu, że nie było między nimi przewodów . Musiał go tak zaprojektować, aby przekazywał wszystkie żądania danych za pośrednictwem usługi pośredniej. Usługi te były nie tylko zabezpieczone, ale także narażone na atak minimalnej powierzchni i zostały zablokowane. I DB nigdy nie ujawnił żadnej ze swoich tabel do odczytu, tylko procedury składowane, które z kolei zostały zablokowane, więc tylko odpowiednia usługa miała dostęp.

Kodowanie nie było tak złe, jak mogłoby się wydawać, kiedy poznałeś architekturę i oddzielenie poszczególnych warstw, było dość łatwe do kodowania.

gbjbaanb
źródło
0

Możesz opracować najbardziej bezpieczną witrynę na świecie i mieć naprawdę kiepską obsługę. Użytkownicy przyjmą, że Twoja witryna jest niepewna.

Możesz zbudować najmniej bezpieczną witrynę na świecie i mieć niesamowitą wygodę użytkowania. Użytkownicy przyjmą, że Twoja witryna jest bezpieczna. Przynajmniej dopóki nie pojawi się w wieczornych wiadomościach.

CodeART
źródło