我正在创建自动电子证书的想法.使用fpdf PHP类创建自定义证书非常容易.我的设置方法是给定URL
http://www.example.com/makepdf.php?name=myname&class=classname
您会从$_GET变量中获得包含学生姓名和他们上课的PDF证书.当然,这意味着任何人都可以操纵URL来轻松创建自定义证书. (他们无论如何都可以在Photoshop中执行此操作,但是这样做的目的是使证书的处理不完全是琐碎的.)一旦课程结束,我想向所有人发送邮件合并,并为其证书提供一个唯一的URL.
您将如何解决这个问题?我应该只创建一组随机数并将其与数据库中的学生/车间对关联吗?是否有解决此问题的标准方法?
解决方法:
几个解决方案脱颖而出:
>存储名称&数据库中的类,并使用数字ID引用它们,而不是在请求中传递数据
>将信息保留在请求中,但添加安全的哈希,以防止篡改数据
哈希机制将如下所示:
生成证书的链接时,您具有$name和$class.您将创建第三个GET变量,该变量是$name,$class和仅程序知道的秘密字符串的哈希.像这样:
$salt = "this is my secret";
$hash = md5($name . $class . $salt);
$url = "http://www.mysite.com/certificate.php?name=" . urlencode($name) . "&class=" . urlencode($class) . "&hash=" . $hash;
现在,当用户点击您的证书生成页面时,您必须验证哈希:
$salt = "this is my secret";
$expected = md5($_GET['name'] . $_GET['class'] . $salt);
if ($expected != $_GET['hash']) {
die("You are not authorized");
} else {
// User is OK; generate the certificate
}
标签:get,php
来源: https://codeday.me/bug/20191023/1916026.html