Php 过滤后使用cookies运行数据库查询是否仍然容易受到SQL注入或类似攻击?

Php 过滤后使用cookies运行数据库查询是否仍然容易受到SQL注入或类似攻击?,php,sql,cookies,Php,Sql,Cookies,例如: 数据库连接和筛选 成功登录后设置cookie,检查cookie并每次重新更新 这仍然容易受到任何类型的注入攻击吗?cookie存储在客户端的计算机上,因此不易受到攻击。所谓的“饼干中毒攻击”。所以要小心对待内容。这就是您对filter()例程所做的操作 然而,它仍然可以改进。如果您可以检查cookie是否已被修改,而不必访问您的数据库,该怎么办?这似乎比实际情况更困难 一个简单的方法是向cookie的内容添加某种校验和,这是可以检查但黑客看不到的。黑客必须首先弄清楚你在做什么,然后才能开

例如:

数据库连接和筛选

成功登录后设置cookie,检查cookie并每次重新更新


这仍然容易受到任何类型的注入攻击吗?

cookie存储在客户端的计算机上,因此不易受到攻击。所谓的“饼干中毒攻击”。所以要小心对待内容。这就是您对filter()例程所做的操作

然而,它仍然可以改进。如果您可以检查cookie是否已被修改,而不必访问您的数据库,该怎么办?这似乎比实际情况更困难

一个简单的方法是向cookie的内容添加某种校验和,这是可以检查但黑客看不到的。黑客必须首先弄清楚你在做什么,然后才能开始更改进入SQL语句的数据。这是接受cookie中的任何内容并将其放入SQL语句中,还是只接受您可以验证为未修改的内容之间的区别。

可能的重复内容
//Initialize MySQLi connection
$db = new mysqli($_CONFIG['mysql']['hostname'], $_CONFIG['mysql']['username'], $_CONFIG['mysql']['password'], $_CONFIG['mysql']['database']);
if ($db->connect_errno) {
    die("MySQLi error: ".$db->connect_error);
}

//filter injections
function filter($var)
{
    global $db;
    return $db->real_escape_string(stripslashes(htmlspecialchars($var)));
}
if(login) {
// after successful login
$cookiehash = md5(sha1($_SESSION['user_id'] . $recentIP));
$db->query('UPDATE users SET loginHash = "'.filter($cookiehash).'" WHERE id = '.filter($_SESSION['user_id']).'') or die(mysqli_error($db));
setcookie("customCookie",$cookiehash,time()+3600*24*365,'/','.'.$_SERVER['HTTP_HOST'].'');

}


// if the cookie is set, update expiration and set session id
    CheckCookieLogin() {
            global $db;
            if (!empty($_COOKIE['customCookie'])) {
            $cookie = $_COOKIE['customCookie']; 
            $query = $db->query('SELECT * FROM users WHERE loginHash = "'.filter($cookie).'"');

            if($query->num_rows > 0) {
            $_SESSION['user_id'] = 1;
            // reset expiry date
            setcookie("customCookie",$cookie,time()+3600*24*365,'/','.'.$_SERVER['HTTP_HOST'].'');
            }

        }
    }