我有一个动态页面,它应该从数据库中获取数据。所以我想到的方法是在顶部用这个PHP代码创建动态页面
<?php $pid = $_GET["pid"]; ?>
然后在文件中它连接到数据库并根据页面ID($ pid)显示正确的内容。所以在主页上,我想添加链接以显示正确的页面。例如,&#34;广告&#34;的数据。页面保存在pid为100的行的数据库中。所以我添加了链接到&#34;广告&#34;主页上的页面如下:
<a href="http://site/page.php?pid=100">Advertise</a></li>
所以我的问题是,任何人都可以通过更改pid来查看链接上发送的值并进行播放。是否有一种简单的方法可以屏蔽此值,或者将值更安全地发送到page.php
?
答案 0 :(得分:2)
您正在寻找的一般概念是Access Control。您有一个资源(在这种情况下,是一个页面及其内容),并且您希望控制谁可以访问它(用户,组等),并且可能< strong>如何他们也可以访问它(例如,只读,读写,只写在本月的第一个星期一,等等)。
您需要确定的第一件事是您需要访问控制权的资源,以及您不需要访问控制权的资源。听起来我觉得其中一些页面应该是公共访问&#34; (因此它们列在某种索引页面上),而其他的应该以某种方式受到限制。
其次,您需要提出一个访问策略 - 这可以针对一个小项目进行非正式描述,但是较大的项目通常会有一些用于定义此策略的结构化系统。 对于每种资源,您的政策应回答以下问题:
一旦您回答了这些问题,您就可以开始考虑实施了。就目前而言,我认为您将访问控制与标识混合在一起。您的pid
标识一个页面(例如,第100页),但它没有做任何限制访问的事情。如果您的页面使用可预测的编号方案进行标识,则任何人都可以轻松修改请求中的数字(对于GET
个请求都是如此,例如当您在地址栏中键入URL时,{{1}请求,例如提交表单时)。
为了安全地控制访问,需要有一个键,通常是一个非常难以猜测的字符串,这在授予访问权限之前是必需的。在非常简单的系统中,将此密钥直接插入URL中是完全正确的,只要您仍然可以保护密钥不被未经授权的用户。这正是Google Drive&#34;获取分享链接的方式。功能有用。更复杂的系统将使用服务器端会话或API密钥来控制访问 - 但最终,它仍然是客户端(用户或用户)的秘密,难以猜测的字符串。浏览器)发送到服务器以及他们对资源的请求。
您可以将识别视为您的街道地址,这可以唯一地标识您的房屋,但不是,也不是秘密。访问控制是您家的关键。只有你和你给予钥匙的人才能真正进入你的房子。如果您的锁具质量很高,则很难锁定。
编写代码很容易,设计软件很难。在您确定最适合您的解决方案之前,您需要提前考虑您决定的后果。例如,您是否预计需要更改密钥&#34;将来这些页面?如果是这样,那么当发生这种情况时,您必须向您的授权用户(仍然应该有权访问的用户)提供新密钥。用户帐户系统将页面访问控制与页面标识分离,因此您可以删除一个用户的访问权限,而不会影响其他人。
另一方面,您还需要考虑受众的性质。也许您的用户不想创建帐户?这对您的受众来说非常具体。
我感觉你仍然是网络开发的新手,并且你自己也在学习。学习自己最难的部分是学习学习内容和学习内容。 - Stack Overflow太具体了,教科书太笼统了。所以,我将给你留下一个简短的概念词汇表,这些概念似乎与你当前的问题最相关:
答案 1 :(得分:1)
如果可以的话,$ _POST总是更安全,但是如果你必须在查询字符串中使用某些东西,那么使用散列或GUID比使用显然是自动增量值的东西更安全。这使得猜测ID会更难。在页面之间可以有其他方式超过值($ _SESSIONs,cookies等),但它实际上是关于你想要实现的目标。
答案 2 :(得分:0)
将它发送到php不是问题,应该没问题。
之后php用它做什么......这就是你的安全感。
我要做的第一件事是确保它是一个整数。
$pid=(is_int($_GET['pid']))? $_GET['pid'] : 1; //1 is the default pid, change this to whatever you want.
现在你知道你正在处理一个整数,之后使用$ pid,你应该好好去。