我创建了一个简单的消息系统。注册用户可以编写、查看/阅读消息。 我在查看消息时遇到问题。它查看数据库中的所有消息。
在我的 inbox.php -> 上可以读取/回复消息。 每条消息的链接都有一个变量来获取特定的消息ID。 示例:www.web.com/user/message.php?message_id=1234
现在链接已加载。它将加载消息/回复。我使用此代码来获取 message_id 的值。 $message_id= intval($_GET['message_id']);
不幸的是,如果我删除/更改链接上message_id的值(例如www.web.com/user/message.php?message_id=),它会加载用户的所有消息。
在我的数据库中,父帖子 ID 是 'message_parent_post_id' = '0'; 如果是子帖子,“message_parent_post_id”列应等于父帖子 ID。
if($message_id= intval($_GET['message_id'])){
$sql = "SELECT * FROM tblmessage WHERE message_id= '{$message_id}'";
$the_message = db::select_row($sql);//For ParentPostid#
$message_post_id = $the_message ['message_id']; }
//加载消息,问题就在这里
查看第一条消息(父帖子)
<?=date('M d, Y h:m a',strtotime($the_message ['message_date_added']))?>
<br />
<? echo nl2br($the_message ['message_message'])?>
查看回复(子帖子)
<? $sql = "SELECT * FROM tblmessage WHERE message_parent_post_id = '{$message_post_id}' ORDER BY message_date_added DESC";?>
<? $u_message = db::select($sql); ?> //children posts
<? foreach ($u_message as $messages){ ?>
<?=date('M d, Y h:m a',strtotime($messages['message_date_added']))?><br />
<?=nl2br($messages['message_message'])?>
我想要的不是更改数据库结构,但更改应该在我的代码上。我想安全地查看特定用户的消息。
最佳答案
只要 $message_id
值通过 $_GET['message_id']
来自 URL,(并且您没有其他安全机制 --您发布的代码中不存在任何内容),那么任何用户都可以直接在浏览器的位置框中编辑 URL,从而看到任何消息。用户通过浏览器通过 $_GET
、$_POST
、$_REQUEST
等提供的数据始终不安全。
你的数据库结构很好。但要安全地查看消息,您将需要某种用户身份验证和 PHP session 。
关于php - php 中的 SQL 查询并查看安全数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37176754/