php - 如何防止网站中的sql注入(inject)

标签 php mysql

我的 php 文件中有以下代码:

        session_start();
        include "connect.php";
        if (isset($_POST['email']) && isset($_POST['password'])) {
            $email = htmlspecialchars(mysqli_real_escape_string($conn, $_POST['email']));
            $password = htmlspecialchars(mysqli_real_escape_string($conn, $_POST['password'])); 

        function process() {

            include "connect.php";
            if  (isset($_POST['email']) && isset($_POST['password'])) {
                $email = $_POST["email"];
                $password = $_POST["password"];
            }

            mysqli_select_db($conn, "users");
            $sql = "SELECT * FROM users WHERE email='$email' AND password='$password'";
            $result = mysqli_query($conn, $sql);
            $count = mysqli_num_rows($result);

            if ($count >= 1) { 
            $_SESSION['id'] = $id;
            $_SESSION['email'] = $email;
            $_SESSION['password'] = $password;
            header('location:index.php');
    } else {
        echo "Email/Password is incorrect";
    }
}
        if ($email != "" or $password != "") {
            if (isset($_POST['submit'])) {
                process();
            } else {
                echo "Error: " . mysql_error();
            }

}
}

我该如何防止登录页面中的 SQL 注入(inject)? 我在互联网上搜索,大多数网站都说我必须使用 mysqli_real_escape_string() 函数,但是当我再次在我的网站中使用 sql 注入(inject)时,这似乎并没有改变一切。 请帮忙:)

最佳答案

是的,使用 PDO 并使用 try/catch block 准备语句。使用prepare时,每个参数都作为安全参数传递,消除了注入(inject)风险。

关于php - 如何防止网站中的sql注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914426/

相关文章:

php - 将值转义到数据库中或之后

mysql根据条件将行转换为列

mysql - NodeJS UTF8 字符串显示为 ??而不是表情符号

php - 将复选框值存储在数据库中

php - rowCount WHERE AND OR 与 MySQL 和 PHP

php - PHP 中的位运算?

php - MySQL 使用数字状态代码与文本

PHPUnit 代码覆盖率不适用于配置

sql - MySQL "CREATE TABLE IF NOT EXISTS"-> 错误 1050

Mysql存储过程多选