【问题标题】:adding random characters to $_GET variable [closed]向 $_GET 变量添加随机字符[关闭]
【发布时间】:2013-09-15 03:17:15
【问题描述】:

我只是想知道是否可以将随机字符添加到我传递到第二页的变量中。我想要这个,因为如果用户更改了 url 中的值,那么系统就会搞砸,因为我根据消息 ID 将数据插入数据库。我无法使用会话,因为第一个会话覆盖了其他会话。

如果我有类似 view_inbox.php?messageid=2 的内容,那么用户可以将其更改为 view_inbox.php?message=4

那么是否有可能有一些随机字符,比如

view_inbox.php?messageid=GXLSsd2sdcds? id 来自数据库。

echo"<a href='view_inbox.php?messageid=".$row['id']."'>".$row['from_user']."</a>";

view_inbox.php

$id = $_GET['messageid'];

【问题讨论】:

  • "我无法使用会话,因为第一个会话覆盖了其他会话。"这没有任何意义,而且会话听起来是一种更好的方法。 ...$_SESSION['messageid']=2; ...
  • 随机字符将如何 a) 帮助您和 b) 阻止某人摆弄它?我认为你需要重新考虑你真正的问题。
  • 通常,在向用户显示数据之前,通过完整性检查输入变量来避免 URL 操作,即检查 url 中的 ID 是否是允许用户查看的消息,如果不是则显示错误消息。
  • @Dagon 就像在第一页inbox.php 将列出所有消息,当用户选择消息查看详细信息时,它将显示第一个。但是在第一个消息之后,如果用户选择了另一条消息,那么消息详细信息是相同的。
  • 那么您在选择消息时没有正确更改会话变量。为什么不解决这个问题,而不是尝试更糟糕的方法

标签: php mysql get


【解决方案1】:

有几种方法。

  1. 您应该检查允许用户访问哪些行/实体的安全规则。将这些规则放在代码中的通用过程/函数中,以便您可以一致地检查它们。

  2. 您还可以“混淆”或加密 ID,以服务器可以反转但对客户端来说并不容易/显而易见的方式。操作可能包括乘以素数(例如 23)模 2^32,XOR 乘以常数,以 base-64 输出,可能在前面加上小写的“x”。

对于第二种方法:

function encodeKey ($key) {
   $multiplied = $key * 23;
   $packed = pack( "N", $multiplied);
   $base64 = base64_encode( $packed);
   return $base64;
}
function decodeKey ($text) {
   $packed = base64_decode( $text);
   // then unpack, divide etc.
   return $key;
}

【讨论】:

  • 谢谢,但你能给我举个例子吗?我在第一页和第二页做什么?我对此一无所知。
猜你喜欢
  • 2021-12-01
  • 2017-07-11
  • 2016-04-06
  • 2012-11-07
  • 1970-01-01
  • 2020-11-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多