如何使用PHP建立安全的Web链接?

时间:2011-07-11 21:31:22

标签: php security hyperlink

我正在为学校开发一个带有原始PHP的Web应用程序。当用户访问学生的个人资料页面时,地址栏上的网络链接会显示如下http://localhost/utc/studentprofile.php?studentid=11100103。但我希望看起来像这样 - http://localhost/utc/studentprofile.php?studentid=.I1vlXKbsAAljiXXX4ylPpWER1D8re93AA--

我可以使用base64_encode来做,但如果我在用户试图查看学生的个人资料时这样做,它就不会显示任何信息。

请有人帮忙告诉我如何做到这一点?

先谢谢

3 个答案:

答案 0 :(得分:4)

base64不是加密,它是一种编码方法。假设没有德语人说法语,那就像用法语将密码翻译成德语一样安全。

要正确保护此功能,您需要使用mcrypt库进行正确的加密。由于加密数据未与其他人共享,因此使用的加密/解密密钥可以硬编码到您的脚本中。

获取通过加密您的ID值生成的二进制垃圾,然后对其进行base64编码,以便将其安全地放入URL中。然后将其传递给base64_decode并在稍后将其从URL中拉出时再次进行mcrypt。

答案 1 :(得分:1)

在使用之前,您需要在studentid上调用base64_decode。

http://php.net/manual/en/function.base64-decode.php

然而,这仍然不安全。

答案 2 :(得分:1)

您在对该问题的评论中添加了更多信息:

  

我有一个页面,其中显示列表中所有学生的姓名,如果我点击它们中的任何一个,它会将我带到该特定学生的个人资料页面,因为我已编码如此 - “>当该学生的个人资料页面显示在地址栏上,我找到了这样的链接 - http://localhost/utc/studentprofile.php?studentid=11100103我希望该链接看起来像http://localhost/utc/studentprofile.php?studentid=Adz2457cxfgga&&sas,而不是显示确切的学生ID。

然后Base64编码不是这样做的,因为它几乎没有保护学生的ID。

如果你想避免透露学生的身份证,那么就没有比不透露更安全的方法了。您还有机会为学生档案页面提供更易读的网址:

在服务器端创建一个简单的映射数据库表。给每个学生一个独特的“句柄”(例如,我的可能是“tjcrowder”,除非以前也有我名字的牛饲料商人去过学校,在这种情况下我可能是“tjcrowder2”)。将句柄基于您在个人资料页面上显示的信息(例如,我假设这些页面列出了学生的姓名)。

然后您的链接变为

http://localhost/utc/studentprofile.php?studentid=tjcrowder

甚至更好

http://localhost/utc/studentprofile.php?tjcrowder

甚至更好,抛出一个URL重写,以便

http://localhost/utc/students/tjcrowder

studentprofile.php中,执行数据库查询以获取句柄并查找学生ID,然后检索学生的个人资料信息。

不错的可读网址,没有透露学生证。