【问题标题】:Sql query in php and viewing secured dataphp中的sql查询和查看安全数据
【发布时间】:2016-09-07 16:30:53
【问题描述】:

我创建了一个简单的消息系统。注册用户可以编写、查看/阅读消息。 我在查看消息时遇到了麻烦。它查看数据库中的所有消息。

在我的 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'])?>

我想要在这里不要更改数据库结构,但更改应该在我的代码上。我想安全地查看特定用户的消息。

【问题讨论】:

  • 你的代码真的是这样吗(每一行都以&lt;?开头)?
  • @Dagon,是的,它正在工作,我只是粘贴不包括

标签: php mysql sql


【解决方案1】:

只要$message_id 值来自通过$_GET['message_id'] 的URL,(并且您没有其他一些安全机制——您发布的代码中没有),那么任何用户都可以在浏览器的位置框中编辑 URL,从而查看任何消息。用户通过浏览器通过$_GET$_POST$_REQUEST 等提供的数据始终是不安全的。

您的数据库结构很好。但要安全地查看消息,您将需要某种用户身份验证和 PHP 会话。

【讨论】:

  • 嗨@CXJ,我正在考虑加密 $message_id 的值,然后在加载登录页面时对其进行解密。然而,它不是最好的选择。您介意在此处发布一些资源,以便指导我吗?或者任何安全机制?这是我的第一个项目之一。
  • @xkevin 您需要数据验证权限检查。如果 id 为空和/或丢失,不做任何事情,中止。 如果 当前登录的用户没有查看请求的 id 的权限,什么都不做,中止。您只需要在输出任何内容之前添加这些检查。
  • @deceze,感谢您的评论。我有想法,我喜欢这个 stackoverflow.com,当我的思想被阻塞并且不知道我刚刚在这里问的代码时。我的项目现在正在运行。用户只能查看他/她的消息。当用户尝试更改 id 时,它会将他重定向到另一个页面并退出。谢谢!我希望我能给你+1。
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多