如何模糊GET变量?

bsa*_*mek 3 php get

我想要创建自动电子证书.使用fpdf PHP类创建自定义证书非常容易.我设置它的方式是给定一个URL

http://www.example.com/makepdf.php?name=myname&class=classname

您将获得一个PDF证书,其中包含学生姓名以及他们从$ _GET变量中获取的课程.当然,这意味着任何人都可以操纵URL来轻松创建自定义证书.(他们无论如何都可以在Photoshop中执行此操作,但想法是操纵证书并非完全无关紧要.)一旦课程结束,我想向每个人发送邮件合并,并为其证书提供唯一的URL.

你会如何解决这个问题?我应该创建一组随机数并将它们与数据库中的学生/研讨会对相关联吗?有没有标准的方法来解决这个问题?

pix*_*x0r 6

情侣解决方案脱颖而出

  • 将名称和类存储在数据库中,并使用数字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;
Run Code Online (Sandbox Code Playgroud)

现在,当用户访问您的证书生成页面时,您必须验证哈希:

$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
}
Run Code Online (Sandbox Code Playgroud)