Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando recebo os dados no script php via $_POST eu consigo aplicar os filtros de string e e-mail, por exemplo, usando
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error_msg .= '<p class="error">O endereço de email digitado não é válido</p>';
}
Minha dúvida é se é preciso e como posso aplicar filtros e evitar ataques com mysql injection, por exemplo, no script abaixo onde recebo dados usando property_exists():
$data = json_decode(file_get_contents("php://input"));
if(property_exists($data, 'user') || property_exists($data, 'email')){
$u = $data->user;
$e = $data->email;
$insert_stmt = $mysqli->prepare("INSERT INTO users(user, email) VALUES(?,?)");
$insert_stmt->bind_param("ss", $u, $e);
$insert_stmt->execute();
$insert_stmt->close();
$mysqli->close();
$msg = "Cadastro realizado";
$retorno = json_encode($msg);
echo $retorno;
}Olha cara pelo que eu sei com bind_param você já evitaria mysql injection, mas caso ache necessário filtre as variaveis $u e $e que são enviadas para o banco.
Eu tentei aplicar os filtros mas como são de tipos diferentes acaba gerando erro. Por exemplo, $u = $_POST[´user´] não é o mesmo de $u = $data->user
o cara se seu receio é mysql injection tanto entrada parametrada com Mysqli ou PDO ajudam em impedir esse ataque se quiser saber mais sobre segurança em aplicações php recomendo este link: http://imasters.com.br/infra/seguranca/seguranca-em-aplicacoes-web-com-php/?trace=1519021197&source=single
Olha cara pelo que eu sei com bind_param você já evitaria mysql injection, mas caso ache necessário filtre as variaveis $u e $e que são enviadas para o banco.