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

Bezpieczna zmienna użytkownika PHP

Są dwie bardzo ważne rzeczy, które musisz zrobić, aby uniknąć poważnych problemów z bezpieczeństwem.

  1. Przed umieszczeniem ich w zapytaniu SQL należy zmienić znaczenie danych wprowadzonych przez użytkownika. Ucieczka oznacza uniknięcie wszystkich znaków specjalnych, takich jak '; na szczęście istnieje funkcja, która robi to automatycznie:mysql_real_escape_string .

    Jeśli nie uciekniesz od wprowadzania danych przez użytkownika, mogą się zdarzyć nieprzyjemne rzeczy. Wyobraź sobie, że Twoje zapytanie to INSERT INTO userdata VALUES ('$user_data') . Teraz wyobraź sobie, że użytkownik napisał '; DROP DATABASE userdata; .

    Jeśli go nie zmienisz, Twoje zapytanie zmieni się w:INSERT INTO userdata VALUES (''; DROP DATABASE userdata;') . Jak możesz sobie wyobrazić, to nie jest dobre:​​jeśli masz włączoną obsługę wielu instrukcji, możesz pożegnać się ze swoją bazą danych. Nazywa się to wstrzyknięciem SQL atak.

  2. Kiedy wysyłasz swoją zmienną do użytkownika, musisz również odpowiednio zastąpić znaki specjalne HTML encjami HTML. Na szczęście istnieje również funkcja, która to robi:htmlspecialchars() . Przekształci specjalne znaki HTML, takie jak < do < .

    Wydaje się, że jest to często niedoceniany problem, ale w rzeczywistości jest bardzo poważny. Wyobraź sobie, że $user_data zawiera <script>SomeNastyScript()</script> . Może wykorzystać istniejące luki w zabezpieczeniach przeglądarki użytkowników lub wysłać atakującemu plik cookie inny niż HTTPOnly (który może zawierać zapisane hasła) lub nakłonić użytkownika do zapisania hasła w formularzu wygenerowanym przez manipulację DOM (możliwe w javascript) lub wiele innych złych rzeczy.

    Nazywa się to XSS (Cross-site scripting).

Krótka wersja

  1. Zadzwoń do mysql_real_escape_string na łańcuchu przed wstawieniem go do zapytania SQL (ale nie wtedy, gdy echo) to).

  2. Zadzwoń do htmlspecialchars na łańcuchu przed wyświetleniem go użytkownikowi (ale nie po umieszczeniu go w bazie danych).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL DROP wszystkie tabele, ignorując klucze obce

  2. jak skopiować schemat w mysql za pomocą java

  3. Ponownie przypisz uprawnienia dostępu do hosta użytkownikowi MySQL

  4. JSON_ARRAY() – Utwórz tablicę JSON z listy wartości w MySQL

  5. Instalowanie mysql na leopardzie:Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo