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

PHP / MySQLi:Jak zapobiec wstrzykiwaniu SQL na INSERT (kod działa częściowo)

W Nowym kodzie PHP fragment, nadal jesteś podatny na zastrzyki.
Używasz przygotowanego oświadczenia we wstawce, ale w rzeczywistości nie używasz prawidłowo mocy preparatów.

Tworząc przygotowane zestawienie, tworzysz zapytanie, w którym zamiast nieprzetworzonych wartości dodajesz symbole zastępcze:

$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");

Znaki zapytania są symbolami zastępczymi i są później zastępowane za pomocą bind_param metoda:

$stmt->bind_param('ss', $email, $pw);

ss część wywołania bind informuje bazę danych mysql, że jej dwa ciągi, które są przekazywane do bazy danych (s dla string , ja dla int itp).
Wiążesz parametr ($name ), ale nie zawiera symbolu zastępczego ani żadnego rodzaju odwołania w zapytaniu..?

Z drugiej strony, Twoja instrukcja select jest nadal niebezpieczna i podatna na luki.
Prawdopodobnie użyłbym w tym celu przygotowanej instrukcji, podobnie jak w przypadku części insert.

Zawsze chcesz mieć pewność, że dane wejściowe od użytkownika są „bezpieczne” dla bazy danych, jeśli połączysz ciąg zapytania i dodasz do niego dane wejściowe użytkownika, baza danych nie zmieni ciągów, po prostu je uruchomi.

Używaj tylko standardowego query wywołuje metody, gdy samodzielnie piszesz pełne zapytanie, bez żadnych parametrów wejściowych, a zwłaszcza bez parametrów wejściowych przekazanych przez użytkownika!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego otrzymuję, że zapytanie o błąd MySQL było puste?

  2. Używanie PHPExcel do tworzenia automatycznie generowanych plików Excel

  3. Przenoszenie wiersza z jednej tabeli do drugiej (Wstaw listę wartości nie pasuje do listy kolumn)

  4. Dlaczego DISTINCT musi mieć pierwszeństwo w MySQL?

  5. Czy można przenieść rekord z jednej tabeli do drugiej za pomocą jednej instrukcji SQL?