隐藏GET参数


Hide GET parameters

我想隐藏ID GET参数从我的URL加载后,但保留数据。

基本上,我给用户提供了一个选择,让私人页面公开,但不希望人们能够看到监视列表的ID,因为他们可以改变号码,看到任何人的监视列表,而不仅仅是用户决定公开的一个特定的监视列表。

使Watchlist公开的原始按钮如下所示:

<a href="watchlist-download.php?id=<?php $watchlist_id; ?>" 
   class="btn btn-primary btn-block download-pdf" title="Download Watchlist PDF">
   <i class="icon-share icon-white"></i> Share Watchlist
</a>

Watchlist ID需要填充结果页面(例如,页面返回数据库中与Watchlist ID关联的项目列表),因此ID需要在URL中(或者,它需要在某处)以获取正确的内容,但是用户不应该能够在URL中看到它。

我不确定这是否真的可以实现。如果您需要更多的信息/代码片段,请询问!我不确定人们需要什么才能解决这个问题,所以如果你让我知道你需要什么/什么是相关的(如果有的话!),我会把它贴出来。

谢谢你的帮助!

另一个建议是使用随机散列,例如链接到监视列表的md5。您可以在创建监视列表时生成一个。

要在php中生成唯一的md5散列,可以使用:

$unique_hash = md5(uniqid(rand(), TRUE));

假设您有一个包含监视列表的数据库表:

id_watchlist | name | hash

然后例如下面的内容:

1 | watch 1 | 41ad0f218d400e4a1bcfdf9e762163e7
2 | watch 2 | e82fd1f16c23fd04e7893afc41e6a358

然后使用哈希值而不是id来获得相应的监视列表。

<a href="watchlist-download.php?hash=<?php $watchlist_hash; ?>" 
   class="btn btn-primary btn-block download-pdf" title="Download Watchlist PDF">
   <i class="icon-share icon-white"></i> Share Watchlist
</a>
例如:

http://www.example.com/watchlist_download.php?hash=e82fd1f16c23fd04e7893afc41e6a358

所以最后它不可能仅仅改变url中的id,并且监视列表仍然可以通过正常链接访问。

听起来你想用$_POST而不是$_GET

<form method="post" action="watchlist-download.php">
<input type="hidden" value="<?php echo $watchlist_id ?>"
    <button type="submit" value="Go">Share Watchlist</button>
</form>

要回应你的其他问题,确保用户在手不能看到别人的视频,你将需要创建一个数据库,每个用户将有一个唯一的 userID,当一个用户去一个视频,你将查询数据库,以确保所查看的视频与当前用户相关联。最有可能的是,您将有一个名为user_video的表,它将存储user_id以及video_id

如果您将id放在页面的任何地方(无论是否在URL中),它不再是私有的。保护URL参数的最佳方法是生成一个随机哈希,并根据该哈希将URL保存在数据库中。

你的监视列表URL将看起来像/watchlist-download.php?get=e7b3418ab97e75deade429cb8da1dce4,然后在数据库中查找哈希并获取原始URL,在内部解析它并给查看者它想要的。

如果此哈希值仅根据内容所有者的要求生成,则还可以防止CSRF攻击。