Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dynamiczne pytania dotyczące bezpieczeństwa witryny (PHP + MySQL)

Inne kwestie do przemyślenia:

1. Jesteś podatny na brutalną siłę

Atak słownikowy złamałby Twoje hasło. Ponieważ zdecydowana większość użytkowników ma niezabezpieczone hasło, jest to tylko kwestia czasu. Użyj captcha lub rejestruj nieprawidłowe wpisy. Lub dodaj opóźnienie, gdy hasło jest nieprawidłowe.

Jak powiedział pułkownik Shrapnel, tęczowy stół nie jest dla ciebie problemem, ponieważ są używane, gdy ktoś ma kilka hashów i chce je złamać. Sól służy do ochrony przed tęczowym stołem, a nie w Twoim przypadku.

2. Wysyłasz hasła w postaci zwykłego tekstu

Jeśli ktoś sniffuje twój login (na przykład wifi), jesteś zgubiony. Istnieje kilka bibliotek JavaScript, które mogą szyfrować wszystko za pomocą kluczy publicznych. Jeśli nie chcesz używać SSL, zaszyfruj login/hasło, wyślij na serwer, odszyfruj za pomocą klucza prywatnego i będziesz bezpieczniejszy.

3. Rozważ użycie przygotowanych oświadczeń w MySQL

Używanie przygotowanych instrukcji pomaga zapobiegać wstrzykiwaniu SQL, ponieważ może bezpiecznie działać nawet przy złośliwych danych wejściowych:

$dbc = new mysqli("mysql_server_ip", "mysqluser", "mysqlpass", "dbname");
$statement = $db_connection->prepare("SELECT * FROM table WHERE thing='?'");
$statement->bind_param("i", $thing);
$statement->execute();

4. Nie przekazuj walidacji po stronie klienta

W formularzu logowania przekazujesz funkcję javascript uniemożliwiającą działanie klawisza Enter. Co się stanie, jeśli wyłączę Javascript? Możesz użyć ukrytego pola (np. ), użyć swojej funkcji, aby zapobiec klawiszowi Enter, ORAZ użyć funkcji onSubmit(), aby zmienić FormIsValid na 1 przed wysłanie formularza. Na swoim serwerze zweryfikuj FormIsValid.

5. Jesteś podatny na przejęcie sesji

Twoja sesja jest zapisywana w pliku cookie, domyślnie o nazwie PHPSESSID. Jeśli atakujący może uzyskać ten plik cookie, może wysłać go na Twój serwer i ukraść Twoją sesję. Aby temu zapobiec, możesz zapisać adres IP użytkownika i agenta użytkownika w sesji i porównywać wartość otrzymaną z sesji przy każdym żądaniu. Jeśli wartości nie są zgodne, adres IP użytkownika mógł ulec zmianie lub sesja mogła zostać przejęta.

6. Możesz być podatny na fiksację sesji

Jak wspomniano powyżej, jeśli ktoś przekona Twojego administratora do uzyskania dostępu do jakiejś witryny, a ta witryna wyśle ​​żądanie do Twojej witryny z PHPSESSID w żądaniu, Twoja witryna utworzy sesję, przetworzy login/hasło i stwierdzi, że poświadczenia są nieprawidłowe . Do tej pory nieźle.

Później administrator loguje się do portalu, sesja już istnieje, login i hasło są zgodne, a sesja jest ZAKTUALIZOWANA. Zmienna prawidłowa teraz jest 1.

Jak tylko zmienna zostanie zaktualizowana, atakujący ma pełny dostęp do Twojego portalu, ponieważ zna PHPSESSID, Twoja witryna nie zapobiega przejmowaniu sesji ani utrwalaniu sesji.

Aby uniknąć utrwalania i przejmowania sesji, patrz punkt 5.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja MySQL NOW() z wysoką precyzją

  2. Czy mysql UPDATE jest szybszy niż INSERT INTO?

  3. Hibernacja Zapisz dziwne zachowanie

  4. Błąd:SQLSTATE[HY000] [2002] Brak takiego pliku lub katalogu

  5. PL/MySQL czy to istnieje?