No Novo código PHP snippet, você ainda está vulnerável a injeções.
Você está usando uma instrução preparada na parte de inserção, mas na verdade não está usando os pontos fortes de preparações corretamente.
Ao criar uma instrução preparada, você cria uma consulta na qual adiciona espaços reservados em vez dos valores brutos:
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Os pontos de interrogação são os espaços reservados e são posteriormente substituídos pelo
bind_param
método:$stmt->bind_param('ss', $email, $pw);
O
ss
parte da chamada de ligação diz ao banco de dados mysql que suas duas strings que são passadas para o banco de dados (s para string
, eu para int
etc).Você está vinculando um parâmetro (
$name
) mas não possui placeholder nem nenhum tipo de referência na consulta..? Sua instrução select, por outro lado, ainda é insegura e aberta a vulnerabilidades.
Eu provavelmente usaria uma instrução preparada lá, assim como na parte de inserção.
Você sempre quer ter certeza de que a entrada do usuário é "segura" para o banco de dados, se você concatenar uma string de consulta e adicionar a entrada do usuário nela, o banco de dados não escapará das strings, ele apenas a executará.
Use apenas
query
padrão chamadas de método quando você mesmo escreve a consulta completa, sem nenhum parâmetro de entrada e, especialmente, nenhum parâmetro de entrada que o usuário passou!