¿Podría haber alguna vulnerabilidad de inyección de SQL en el código a continuación, ya que solo solicita a la base de datos el nombre de usuario y el hash bcrypt?
¿La vulnerabilidad de este código sería mayor en el algoritmo de hash bcrypt, la inyección de SQL o ambos?
¿Alguien también me puede dar algunos consejos sobre cómo sanear el código y explicar cómo funciona el algoritmo de bcrypt?
<!Doctype html>
<html>
<head>
<title>password validation</title></head>
<body>
<fieldset>
<legend>enter password</legend>
<form action =passval.php method = "post">
<table>
<tr>
<td>Email:</td><td><input type="id" name ="id" /><br /></td>
</tr>
<tr>
<td>Password:</td><td><input type = "password" name="password" /> <br /></td>
</tr>
</table>
<input type = "submit" name ="submit" value ="insert" />
</form>
</fieldset>
<br />
<?php
// connect to the server
$conn = new mysqli('localhost', 'root', '', 'social');
// check connection
if(mysqli_connect_errno()) {
exit("connection failed" . mysqli_connect_error());
} else {
echo "connection established";
}
if($_POST && isset($_POST['submit'], $_POST['password'], $_POST['id'])) {
$pass = ($_POST["password"]);
$id =($_POST["id"]);
echo $pass;
//$hash = $bcrypt->hash($pass['password']);
$bcrypt = password_hash($pass, PASSWORD_BCRYPT, array('cost' => 12));
$input = $pass;
$query = "SELECT pass FROM social WHERE email = '$id'";
$result = $conn->query($query);
while($row = mysqli_fetch_array($result))
{
//echo $row['pass'];
//echo "<br />";
echo "success";
if (password_verify($input, $row['pass'])) {
echo "matching pass" . header("Location: inserh.php");
} else{
echo "not a mathch";
}
}
}
$conn->close(); // close the connection