这是我的数据库讲师表名人员为指定的用户是可以删除自己的表使用登录
ID FirstName LastName Email
100 alex alex -
102 ali ali -
这是我的表USER_SUBJECT
ID Subject
100 AAA
100 BBB
102 AAA
102 CCC
这是我drop_subject.php
<html>
<head></head>
<body>
<?php
$conn = mysql_connect('localhost','root','password');
mysql_select_db('lecturer');
$query = 'SELECT persons.ID , persons.FirstName , user_subject.subject
FROM persons
INNER JOIN user_subject
ON persons.ID = user_subject.ID
ORDER BY persons.ID';
$result = mysql_query($query) or die(mysql_error());
?>
<table width="400" border="0" align="center" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF"> </td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Drop subject</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>ID</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Subject</strong></td>
</tr>
<?php while($row = mysql_fetch_assoc($result)) { ?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input type="checkbox" name="data[]" value="<?php echo $row['ID'];?>" /></td>
<td bgcolor="#FFFFFF"> <?php echo $row['ID']; ?> </td>
<td bgcolor="#FFFFFF"> <?php echo $row['subject']; ?> </td>
</tr>
<?php } ?>
<tr>
<td colspan="3" align="left" bgcolor="#FFFFFF"><input type="submit" value="Delete Checked Rows" /></td>
<td colspan="2" align="right" bgcolor="#FFFFFF"><a href="user_subject.php?pressed=subject">Back</a></td>
</tr>
<?php
if(isset($_POST['data'])) {
$del_query = "DELETE FROM user_subject WHERE No IN (";
foreach($_POST['data'] as $data) {
$del_query .= "'" . (int) $data . "',";
}
$del_query .= "'')";
mysql_query($del_query) or die(mysql_error());
header("Location:" . $_SERVER['PHP_SELF']);
}
mysql_close()
?>
</table>
</form>
</tr>
</table>
</body>
</html>
问题是,当我想删除主题,如果我作为阿里访问我能够删除子亚历克斯的项目。
我想要做的就是喜欢当亚历克斯进入drop_subject.php系统只显示自己的数据是ID 100主题AAA和ID 100主题BBB,他能够放弃自己只受
我应该如何限制特定用户访问他们自己的数据库而不是每个人的数据库?
您的代码易受SQL注入攻击!看看'$ del_query。=“'”这一行。 (int)$ data。 “”,”;'。想象一下,如果某人发布了以下数据会发生什么:'123'); DROP TABLE user_subject; --'。你真的应该弄清楚。 – Dan
是的,我同意修复允许SQL注入的部分,这是一个很好的做法。你可以阅读http://www.php.net/manual/en/security.database.sql-injection.php – ChunLin
@dan:'(int)'123'); DROP TABLE ..'会导致只是'123' ...字符串被类型转换为一个int,并且sql位将被删除。 –