Co każdy Web developer powinien wiedzieć o szyfrowaniu?

Właśnie wylądowałem na php5. Nie będę zajmował się częściami aplikacji, które wiążą się z super wrażliwymi danymi, ale nadal niewiele wiem o metodach bezpieczeństwa i szyfrowania. Znam tylko same podstawy (nie przechowuj haseł w zwykłym tekście, nie zezwalaj użytkownikom na uruchamianie kodu za pomocą danych postowych itp.). Co muszę wiedzieć, aby moje aplikacje były bezpieczne i gdzie mogę się tego nauczyć?

Author: hakre, 2009-08-03

11 answers

Poznaj różnicę między hashami a szyfrowaniem. Szyfrowanie jest zazwyczaj dwukierunkową interpretacją ciągu znaków. Mogę zaszyfrować moje hasło, a następnie odszyfrować je do zwykłego tekstu. Idea hashów polega na tym, że stają się one szyfrowaniem jednokierunkowym.'

Na moich stronach przechowuję hasła jako hasze. Za każdym razem, gdy użytkownik się zaloguje, ponownie hashuję podane przez niego hasło, testuję je z Hashem przechowywanym w bazie danych i zatwierdzam, czy pasują. Nie mogę wysłać im hasła, jeśli go zapomną, ponieważ (ogólnie) nie ma sposobu, aby wiedzieć.Dwa różne ciągi mogą przekładać się na ten sam hash, co sprawia, że (ogólnie) niemożliwe jest ustalenie, jaki był oryginalny ciąg.

Jest to jedna z kwestii, która jest dobra do zrozumienia i rozróżnienia, kiedy używać szyfrowania vs. hashes.

 27
Author: Sampson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:06:47

Wiedz, aby nie pisać własnych funkcji szyfrowania. Istniejąca, zaufana Biblioteka jest najlepszym sposobem, aby przejść tam, gdzie to możliwe. Unikaj chłodnych, skrajnych technologii, które nie mają za sobą wielu udanych godzin programistycznych i godzin użytkowników. Wiedz, że nie ufaj wybranej funkcjonalności, dopóki nie przetestujesz jej osobiście, w pierwszej osobie. Bądź na bieżąco z nowościami, które mogą z dnia na dzień zmienić wybraną funkcjonalność. Wiedz o tym tylko dlatego, że używasz najlepszej technologii szyfrowania dostępne dzisiaj, że nic nie chroniłeś, jeśli zostawisz klucze na tabeli (np. cleartext nie jest w pamięci podręcznej lub przechowywany w innej tabeli w tej samej bazie danych, klucze prywatne nie pozostają otwarte)

 17
Author: Bob Kaufman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:11:53
  • zrozum różnicę między szyfrowaniem i haszowaniem
  • zrozumieć powód
  • zrozum, że HTTP jest cleartext
  • zrozumieć, co to jest HTTPS
  • zrozum, że nigdy (prawie nigdy) nie będziesz w stanie stworzyć lepszych metod haszujących lub szyfrujących niż te, które biblioteki stron trzecich i wbudowane biblioteki już robią
 15
Author: cwap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:13:42
 14
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:27:05

Że można go złamać bez względu na to, co zrobisz.

 11
Author: Cyril Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:13:26

Gdzie dowiedzieć się o bezpieczeństwie: Pobierz książkę Schneiera Kryptografia stosowana .

 6
Author: zvrba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:07:22

Krótka odpowiedź

You can never be too secure

Użyj solone hashowanie hasła dla zwiększenia bezpieczeństwa

Dłuższa odpowiedź (jeszcze nie pełna)

Bezpieczeństwo nie jest czymś, czego można się nauczyć dzięki szybkiemu samouczkowi w sieci. Wymaga to dogłębnej wiedzy nie tylko o tym, jakie luki istnieją, ale Dlaczego istnieją i Jak działają. Jednym z największych problemów (szczególnie w open source), czy nowe metody są dodawane cały czas, dlatego musimy zrozumieć pojęcia i teorię bezpieczeństwa.

przeczytaj książki, weź udział w zajęciach i przetestuj luki na lokalnej maszynie. następnie powoli zaczniesz rozumieć koncepcję, jak zabezpieczyć aplikację internetową.

Sprawdź poniżej, aby rozpocząć

  1. poradnik programisty do aplikacji internetowych Bezpieczeństwo
  2. Testowanie Bezpieczeństwa Sieci Książka kucharska
  3. Kryptografia Stosowana
 6
Author: Sev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:27:40

Proszę zwrócić uwagę na następujące punkty podczas przechowywania haseł,

  1. Zaszyfrowane hasło jest na ogół bezpieczniejsze, ponieważ nie musisz dochować tajemnicy. Uniemożliwia to jednak korzystanie z innych schematów opartych na hash w procesie uwierzytelniania. Na przykład nie można używać uwierzytelniania HTTP Digest z hashowanym hasłem.

  2. Prosty hash jest podatny na Tęczowy attak tabeli ( http://en.wikipedia.org/wiki/Rainbow_table ). proszę dodać nonce do hasha lub użyj nonce jako klucza do HMAC. Nonce musi być przechowywany wraz z hasłami. Przygotowuję to do strawienia.

  3. Jeśli używane jest szyfrowanie, upewnij się, że używany jest losowy Wektor początkowy, aby to samo hasło było szyfrowane do różnych szyfrów dla różnych użytkowników. W przeciwnym razie jesteś podatny na atak dopasowywania wzorców. MySQL ma wbudowane polecenie szyfrowania. Nie wstrzykuje IV, więc nigdy nie używaj go do haseł.

  4. Zapisz nazwę/wersję klucza za pomocą tekstu szyfrowego więc klucze mogą być obracane. Rotacja klucza jest wymagana dla zgodności z pewnymi normami. Szyfrowanie bez kluczowych informacji jest niemożliwe do odszyfrowania, gdy jesteś zmuszony do zmiany lub obracania kluczy.

Jeśli zastosujesz się do tych wskazówek, Twoje hasła będą bezpieczne z dowolnymi schematami szyfrowania / hashowania.

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:35:53

Sprawdź Open Web Application Security Project. Mają wiele informacji na temat aktualnych problemów z bezpieczeństwem aplikacji internetowych i co musisz zrobić, aby się przed nimi bronić. OWASP opracowuje Development Guide, który dostarcza wielu dobrych informacji na temat problemów związanych z tworzeniem aplikacji internetowych i usług internetowych.

 1
Author: Jason Fritcher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 22:29:48

Jeśli patrzysz na to z kontekstu PHP, polecam tę książkę:

Alt text http://ecx.images-amazon.com/images/I/51sKhc8YUlL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

Pro PHP Security on Amazon

Najbardziej podoba mi się w tej książce to to, że obejmuje ona znacznie więcej niż tylko listę funkcji związanych z bezpieczeństwem w PHP. Duża część z nich obejmuje ogólne koncepcje bezpieczeństwa sieci i ochrony mechanizmy. Uprawnienia, zasada najmniejszych uprawnień, szyfrowanie, haszowanie, Skrypty cross-site, fałszowanie żądań cross-site, przechwytywanie sesji itp. wszystkie omówione są tutaj, z przykładami pisania bezpiecznego kodu w PHP.

Biorąc udział w zajęciach z bezpieczeństwa na studiach, jestem pod wrażeniem relacji w tej książce. Uznałbym to za lekturę wymaganą dla każdego profesjonalnego programisty PHP.

 1
Author: Bob Somers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 22:46:16

Najpierw musisz zapoznać się z tą metodą php:

Tutaj masz wszystkie rozszerzenia kryptograficzne w PHP.

 0
Author: Elzo Valugi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-03 19:02:27