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

Base64 jako metoda oczyszczania danych wejściowych użytkownika dla Mysql

Nie „oczyszczaj” dane wejściowe jako środek zapobiegający wstrzykiwaniu SQL - użyj symboli zastępczych (lub poprawna ucieczka) , zawsze. Bądź konsekwentny. Bądź bezpieczny. Problem został już rozwiązany.

Ta sprawa będzie „bezpieczna” ze względu na ograniczoną domenę base64_encode funkcjonować. Jednak...

To jest złe praktyki i przechowywanie wartości zakodowanych w base64 (takie, że pokazane zapytanie może działać) niesie ze sobą kilka ujemnych implikacje w miarę zmian przechowywane informacje:niszczy uporządkowanie wartości sprawia, że ​​informacje nie można łatwo przeszukiwać , wymaga dodatkowego krok „kodowanie/dekodowanie”, a nawet zużywa więcej miejsca – ała!

Tak więc, chociaż mogą wystąpić szczególne przypadki danych zakodowanych w base64, to podejście nie dobrze nadaje się jako sposób na złagodzenie wstrzykiwania SQL .

Problem polega na dostępie do SQL przez protokół tekstowy gdzie polecenie/kształt zapytania i wartości są wymieszane. Użycie poprawnego techniki ucieczki (np. mysql_real_escape_string ) rozwiązuje ten problem, zapewniając, że informacje są eskortowane, dzięki czemu tekst SQL jest przetwarzany zgodnie z przeznaczeniem — jednak w przeciwieństwie do kroku z kodowaniem base64 nie faktycznie zmienić dostarczone informacje!

To jest dokładnie co zapewniają symbole zastępcze ! Symbole zastępcze to the powszechnie poprawnym podejściem i należy do niego zachęcać. Symbole zastępcze pozwalają na przesłanie zapytania i wartości do bazy danych oddzielnie gdy jest obsługiwane przez bibliotekę/bazę danych; i są emulowane przez ucieczkę w inny sposób. Prawidłowe użycie symbolu zastępczego eliminuje Wstrzyknięcie SQL i potrzeba mieszania wartości w kodzie użytkownika z tekstem poleceń SQL, co może również ułatwić pisanie i obsługę zapytań.

Aby uniemożliwić „indywidualnym programistom” pisanie okropnych zapytań, rozwiązaniem jest zapobieganie Zapytania ad hoc przed rozproszeniem w kodzie:zbierz operacje dostępu do danych w warstwie dostępu do danych ( DAL) (prawdopodobnie w połączeniu z ORM) i ujawniaj tylko odpowiednie akcje, zapewniając prawidłowe użycie SQL w DAL. W prostszych projektach DAL jest również odpowiednią lokalizacją do centralnego zarządzania regułami biznesowymi dotyczącymi warunków sanitarnych i innej logiki walidacji.

Dokładniej:

  • Oczyść wartości dla reguł biznesowych; powinno to zapobiec „złym informacjom”, takim jak nazwa użytkownika, która jest zbyt krótka, zawiera znaki zastrzeżone lub w inny sposób nie spełnia wymagań biznesowych.

  • Użyj symboli zastępczych aby zapobiec wstrzykiwaniu SQL . To jest ściśle związane z przesyłaniem danych do SQL i nie mają wpływu na zawarte w nich informacje.

Podczas gdy MySQL 5.6.1 dodaje FROM_BASE64 , tak że kodowanie może być po prostu użyte w tekście polecenia SQL, to nadal dodaje dodatkowy jawny krok dekodowania i komplikuje zapytanie przy użyciu takiego schematu kodowania. To podejście base64 po prostu nie konieczne, ponieważ istnieją już sprawdzone techniki zapobiegania wstrzykiwaniu SQL i nie zostały zaproponowane w początkowym pytaniu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel :Jak przechowywać dane w formacie json w bazie danych?

  2. jak uzyskać listę nazw schematów baz danych MySql za pomocą java JDBC

  3. Nie można połączyć się z lokalnym serwerem MySQL w docker-compose

  4. Przekonwertować zrzut SQL na JSON?

  5. Mysql Split String i Select z wynikami