合并变量对 SQL 注入安全吗?
Is merging variables safe against SQL injection?
我有一些用户输入
$place = $_POST["errorreport_place"];
$os = $_POST["errorreport_os"];
$browser = $_POST["errorreport_browser"];
$text_user = $_POST["errorreport_text_user"];
$section = $_GET["section"];
和一些不是由用户创建的会话变量(它们来自数据库)
$user_id = $_SESSION["user_id"];
$username = $_SESSION["username"];
现在我将所有这些用户创建的变量合并到一个文本字符串中
$text = "ERROR REPORTED BY $username (ID: $user_id)<br /><br />Place: $place<br />Operating System: $os<br />Browser: $browser<br />Text:<br />$text";
然后我将这些数据插入数据库(但使用准备好的语句)
$done = 0;
$sql = $db->prepare("INSERT INTO errorreports (user_id, section, text, done) VALUES (?, ?, ?, ?)");
$sql->bind_param('issi', $user_id, $section, $text, $done);
$sql->execute();
现在我的问题是:这种方法对 SQL 注入是否安全(因为我没有单独准备每个用户输入?
你的方法是安全的。插入前的串联,在使用准备好的语句时,并不重要。准备好的语句将准备整个 $text
值作为一个完整的字符串用于插入 - 它仍然与查询本身分开。
您的方法是安全的,因为您使用的是准备好的语句。 $sql = $db->prepare("INSERT INTO errorreports (user_id, section, text, done) VALUES (?, ?, ?, ?)");
SQL 当您将数据与查询混合时,可能会发生注入。准备好的语句确保查询和数据分别发送到服务器
我有一些用户输入
$place = $_POST["errorreport_place"];
$os = $_POST["errorreport_os"];
$browser = $_POST["errorreport_browser"];
$text_user = $_POST["errorreport_text_user"];
$section = $_GET["section"];
和一些不是由用户创建的会话变量(它们来自数据库)
$user_id = $_SESSION["user_id"];
$username = $_SESSION["username"];
现在我将所有这些用户创建的变量合并到一个文本字符串中
$text = "ERROR REPORTED BY $username (ID: $user_id)<br /><br />Place: $place<br />Operating System: $os<br />Browser: $browser<br />Text:<br />$text";
然后我将这些数据插入数据库(但使用准备好的语句)
$done = 0;
$sql = $db->prepare("INSERT INTO errorreports (user_id, section, text, done) VALUES (?, ?, ?, ?)");
$sql->bind_param('issi', $user_id, $section, $text, $done);
$sql->execute();
现在我的问题是:这种方法对 SQL 注入是否安全(因为我没有单独准备每个用户输入?
你的方法是安全的。插入前的串联,在使用准备好的语句时,并不重要。准备好的语句将准备整个 $text
值作为一个完整的字符串用于插入 - 它仍然与查询本身分开。
您的方法是安全的,因为您使用的是准备好的语句。 $sql = $db->prepare("INSERT INTO errorreports (user_id, section, text, done) VALUES (?, ?, ?, ?)");
SQL 当您将数据与查询混合时,可能会发生注入。准备好的语句确保查询和数据分别发送到服务器