我正在为学校开发一个带有原始PHP的Web应用程序。当用户访问学生的个人资料页面时,地址栏上的网络链接会显示如下http://localhost/utc/studentprofile.php?studentid=11100103。但我希望看起来像这样 - http://localhost/utc/studentprofile.php?studentid=.I1vlXKbsAAljiXXX4ylPpWER1D8re93AA--
我可以使用base64_encode来做,但如果我在用户试图查看学生的个人资料时这样做,它就不会显示任何信息。
请有人帮忙告诉我如何做到这一点?
先谢谢
答案 0 :(得分:4)
base64不是加密,它是一种编码方法。假设没有德语人说法语,那就像用法语将密码翻译成德语一样安全。
要正确保护此功能,您需要使用mcrypt
库进行正确的加密。由于加密数据未与其他人共享,因此使用的加密/解密密钥可以硬编码到您的脚本中。
获取通过加密您的ID值生成的二进制垃圾,然后对其进行base64编码,以便将其安全地放入URL中。然后将其传递给base64_decode并在稍后将其从URL中拉出时再次进行mcrypt。
答案 1 :(得分:1)
答案 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,然后检索学生的个人资料信息。
不错的可读网址,没有透露学生证。