PHP防止使用OOP进行SQL注入

时间:2018-06-23 05:34:45

标签: php html sql sql-injection

这是一个众所周知的示例,如何防止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"]; ?>

我在哪里做错了什么?

1 个答案:

答案 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”。

感谢您阅读我的解决方案。