В Нов PHP код snippet, вие все още сте уязвими към инжекции.
Вие използвате подготвено изявление във вмъкната част, но всъщност не използвате правилно силните страни на препаратите.
Когато създавате подготвен израз, вие създавате заявка, в която добавяте контейнери вместо необработените стойности:
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Въпросителните знаци са заместителите и по-късно се заменят с помощта на bind_param
метод:
$stmt->bind_param('ss', $email, $pw);
ss
част от извикването за свързване казва на mysql db, че неговите два низа, които се предават на базата данни (s за string
, i за int
и т.н.).
Вие обвързвате параметър ($name
), но няма заместител, нито някакъв тип препратка в заявката..?
Вашият оператор select от друга страна все още не е безопасен и отворен за уязвимости.
Вероятно бих използвал подготвен оператор там, точно както с частта за вмъкване.
Винаги искате да сте сигурни, че въвеждането от потребителя е "безопасно" за базата данни, ако свържете низ на заявка и добавите потребителски вход в него, базата данни няма да избегне низовете, тя просто ще я изпълни.
Използвайте само стандартна query
извиквания на метод, когато сами пишете пълната заявка, без никакви входни параметри и особено без входни параметри, които потребителят е подал!