【发布时间】:2014-07-12 09:39:35
【问题描述】:
我是 PHP 和 SQL 的初学者。我在这里问了一个与 sql 注入无关的问题,用户 MarcB 说此代码容易受到注入。
function create_group($name, $description, $invites){
global $link;
$name = mysqli_real_escape_string($link, $name);
$description = mysqli_real_escape_string($link, $description);
$names = mysqli_query($link, "SELECT `group_name` FROM `groups` WHERE `group_name` = '$name'");
$descriptions = mysqli_query($link, "SELECT `group_description` FROM `groups` WHERE `group_description` = '$description'");
if(mysqli_num_rows($names) == 0 && mysqli_num_rows($descriptions) == 0) {
mysqli_query($link, "INSERT INTO `groups` (`group_name`, `group_description`) VALUES ('$name', '$description')");
} else {
echo 'Group with that name/description already exists.';
}
$result = mysqli_query($link, "SELECT `group_id` FROM `groups` WHERE `group_name` = '$name'");
foreach($result as $resul) {
foreach($resul as $resu) {
$group_id = $resu;
}
}
foreach($invites as &$invite) {
$idres = mysqli_query($link, "SELECT `user_id` FROM `users` WHERE `username` = '$invite'");
foreach($idres as $idarr) {
foreach($idarr as $id) {
mysqli_query($link, "INSERT INTO `group_members` (`group_id`, `user_id`, `confirmed?`) VALUES ('$group_id', '$id', 0)");
}
}
}
echo 'Group created!';
}
我认为我属于(相当多的)初学者并且知道什么是 sql 注入,但发现很难发现不是非常明显的漏洞(例如纯粹通过 GET 发送的用户名和密码请求)。
我想知道是否有人可以向这些人提供提示并帮助我编写这段代码。显然,后者不如前者重要,因为我和其他许多人都想知道如何自己发现它们。
提前谢谢你。我希望这对其他人有帮助。
【问题讨论】:
-
切换一切以使用准备好的语句/绑定变量,这不再是一个问题
-
但是您的
$invites值从何而来? -
@MarkBaker 他们来自发布请求,所以我应该添加一个 mysqli_real_escape_string;我不敢相信我没有发现这一点。另外,我现在只是研究一下准备好的语句和绑定变量(我是一个大初学者)
标签: php sql security find code-injection