这是一个众所周知的示例,如何防止sqlinjection。有两个文件,例如login.php和profile.php,但对于以太坊输入正确的登录名,通过或不正确的数据,它没有任何作用。不回应任何情况。 SQL Server通过MAMP。 这是代码:
<?php
$con = new mysqli("localhost", "root", "root", "phpsec");
if ($con->connect_error){
echo $con->connect_error;
}
if (isset($_POST["submit"])) {
$pre_stmt = $con->prepare("SELECT * FROM userinfo WHERE email = ? AND pass = ?");
$pre_stmt->bind_param("ss",$_POST["email"],$_POST["pass"]);
$pre_stmt->execute();
$result = $pre_stmt->get_result();
if($result->num_rows > 0){
$row = $result->fetch_assoc();
header("location:profile.php?email=".$row["email"]);
} else{
echo "login fail";
}
}
?>
和profile.php:
<?phpecho "Welcome ".$_GET["email"]; ?>
我在哪里做错了什么?
答案 0 :(得分:2)
您可以使用php中的预备语句来防止您的页面进行sql注入
在执行sql语句时尝试输入此代码。
<?php
// prepare and bind
$stmt = $conn->prepare("INSERT INTO example(firstname, lastname, email) VALUES (?, ?,
?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// set parameters and execute
$firstname = "parth";
$lastname = "gandhi";
$email = "gandhi@example.com";
$stmt->execute();
?>
在第一个参数s中的bind_param方法中,代表字符串。如果要使用整数,则可以使用“ i”,对于十进制“ d”。
感谢您阅读我的解决方案。