【发布时间】:2015-07-21 16:56:47
【问题描述】:
我有一些用户输入
$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 注入安全吗(因为我没有单独准备每个用户输入?
【问题讨论】:
-
您根据
$sql->bind_param('issi', $user_id, $section, $text, $done);绑定变量。每一个的来源和内容都无关紧要。绑定本身也不会改变它们。它只是确保它们的值与 SQL 查询分开传输。 -
可能更适合代码审查codereview.stackexchange.com 另外,不要将 XSS 漏洞利用/注入排除在外。
标签: php mysql sql-injection