V části Nový kód PHP úryvku, stále jste zranitelní vůči injekcím.
Používáte připravené prohlášení ve vložené části, ale ve skutečnosti nepoužíváte síly přípravků správně.
Při vytváření připraveného příkazu vytvoříte dotaz, do kterého místo nezpracovaných hodnot přidáte zástupné symboly:
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Otazníky jsou zástupné symboly a později jsou nahrazeny pomocí bind_param
metoda:
$stmt->bind_param('ss', $email, $pw);
ss
část volání bind říká mysql db, že její dva řetězce, které jsou předány do databáze (s pro string
, i pro int
atd).
Vázáte parametr ($name
), ale v dotazu nemá žádný zástupný symbol ani žádný typ odkazu..?
Na druhou stranu váš příkaz select je stále nebezpečný a otevřený zranitelnostem.
Pravděpodobně bych tam použil připravený příkaz, stejně jako u vložené části.
Vždy se chcete ujistit, že vstup od uživatele je pro databázi „bezpečný“, pokud spojíte řetězec dotazu a přidáte do něj uživatelský vstup, databáze řetězce neunikne, pouze ji spustí.
Používejte pouze standardní query
volání metody, když píšete celý dotaz sami, bez jakýchkoliv vstupních parametrů, a zejména bez vstupních parametrů, které uživatel předal!