php - php 中的 SQL 查询并查看安全数据

标签 php mysql sql

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

在我的 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=),它会加载用户的所有消息。

这是我使用的代码以及我的数据库结构。 tblmessage

在我的数据库中,父帖子 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/

相关文章:

Java IllegalArgumentException 索引处查询中存在非法字符

使用创建架构的 Mysql 备份

mysql - 多对多映射的 SQL 查询

java - 如何在 SQLite 中以与插入相反的顺序选择表行?

php - Slim Framework ^3 多个路由文件

javascript - 在 Google Chrome 中将 '?' 编码为 '%3F' 时出错

php - 如何从laravel Controller 调用laravel文件夹外的php文件

PHP连接远程Parse MongoDB; cURL 在命令行上工作,但 PHP file_get_contents 不工作

sql - 如何选择Sql Server中不存在的记录

mysql - 列更改时触发更新