0

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

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

公开监视列表的原始按钮如下所示:

<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>

然而,监视列表 ID 是填充结果页面所必需的(例如,该页面返回与数据库中的监视列表 ID 关联的项目列表),因此 ID 需要在 URL 中(或者,它需要在某个地方)才能取回正确的内容,但用户不应该能够在 URL 中看到它。

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

谢谢你的帮助!

4

3 回答 3

2

另一个建议是使用随机散列,例如链接到您的监视列表的 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 并且监视列表仍然可以通过正常链接访问。

于 2013-04-28T17:43:12.857 回答
1

这听起来像你想使用$_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>

为了回应您的其他问题,确保手头的用户看不到其他人的视频,您需要创建一个数据库,每个用户都有一个唯一的用户 ID,当用户观看视频时,您将查询数据库以确保观看的视频与当前用户相关联。您很可能会有一个名为的表,该表user_videouser_idvideo_id

于 2013-04-28T17:27:38.240 回答
0

如果您id在页面中的任何位置(无论是否在 URL 中),它都不再是私有的。保护 URL 参数的最佳方法是生成随机散列并将 URL 保存在数据库中以对抗该散列。

您的监视列表 URL 将类似于/watchlist-download.php?get=e7b3418ab97e75deade429cb8da1dce4然后在数据库中查找哈希并获取原始 URL,在内部对其进行解析并为查看者提供所需的内容。

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

于 2013-04-29T01:30:00.150 回答