Content management system 如何生成一次性使用链接?有CMS或框架解决方案吗?

Content management system 如何生成一次性使用链接?有CMS或框架解决方案吗?,content-management-system,hyperlink,Content Management System,Hyperlink,我正在为一家作家管理公司制作一个网站。他们每天都会收到来自潜在作者的大量剧本投稿,而且往往是不请自来的。新网站将允许潜在的作者提交他或她的想法的简短日志/样本。这个想法会被发送到管理组的电子邮件帐户。如果管理团队喜欢他们看到的内容,他们希望能够从电子邮件中批准该提交,并向提交者发送一个独特的链接以上载其完整脚本。此链接要么只能工作一次,要么只能工作一段时间,以便只有预期的收件人才能使用它 那么,有人能告诉我某种(我是PHP+mySQL)CMS或框架可以实现这一点吗?我已经搜索了很多,但我似乎找不

我正在为一家作家管理公司制作一个网站。他们每天都会收到来自潜在作者的大量剧本投稿,而且往往是不请自来的。新网站将允许潜在的作者提交他或她的想法的简短日志/样本。这个想法会被发送到管理组的电子邮件帐户。如果管理团队喜欢他们看到的内容,他们希望能够从电子邮件中批准该提交,并向提交者发送一个独特的链接以上载其完整脚本。此链接要么只能工作一次,要么只能工作一段时间,以便只有预期的收件人才能使用它

那么,有人能告诉我某种(我是PHP+mySQL)CMS或框架可以实现这一点吗?我已经搜索了很多,但我似乎找不出正确的方式来表达这个查询到搜索引擎

我有适度的编程经验,但除了一些简单的Wordpress黑客之外,我对PHP的使用不多


谢谢

我将为您提供构建这样一个系统的简单方法的一般指南

我假设作者以某种方式注册到系统中,并且他/她的个人资料包含有效的邮件地址

因此,当他提交样本时,您将在“sample”表上创建一个条目。然后,您可以将示例和链接发送给经理。此链接将指向一个脚本,该脚本将示例的数据库“id”作为参数(此脚本应验证manager是否已登录——如果未登录,则显示登录屏幕,并在成功登录后将其重定向回)

然后,该脚本将了解经理允许作者提交其作品的意图。现在乐趣开始了

有许多可能性:

  • 您可以在适当的“SubmitAuthorizations”DB表中创建一个条目,其中包含写入者的id和授予此授权的日期(即,将行添加到DB的日期)。然后,您只需通过“upload.php?id=42”这样的链接向编写者发送一封邮件,其中id是授权id。该脚本将检查登录的用户是否是正确的编写者,以及他是否在允许的时间范围内(通过比较存储的“授权日期”和当前日期)

  • 下一个是我更喜欢的:没有一个特殊的表来处理一些琐碎的事情(比如说,您永远不想“编辑”授权,也不想“取消”授权,但它仍然可能“过期”)。您只需给编写者一个带有两个参数的链接:授权日期和授权密钥,如:“upload.php?authDate=20091030&key=87a62d726ef7…”

  • 让我解释一下它是如何工作的

    脚本将首先验证编写器是否已登录(如果未登录,则在成功登录后显示带有重定向的登录页面)

    因此,现在是验证请求的时候了:也就是说,检查这是否是“伪造”链接。如何做到这一点?这只是构造此授权密钥的“智能”方法

    您可以执行以下操作:

    key = hash(concat(userId, ";", authDate, ";", seed));
    
    这里的hash()是我们称之为“单向函数”,如MD5、SHA1等。然后concat()只是一个字符串连接函数。最后,seed是一种类似于“主密码”的东西,完全是随机的,不会改变(因为如果你改变它,所有发布的链接都会停止工作),只是为了提高安全性——比方说,黑客正确地猜测你在使用MD5(这很容易)他试图通过散列用户名和日期的一些组合来攻击你的系统

    此外,为了使请求有效,它必须在正确的时间范围内

    因此,如果两个密钥都有效,并且日期在时间范围内,则可以接受上载

    需要注意的几点:

    • 这是一个非常简单的系统,但可能正是您所需要的
    • 对于散列函数,应该避免使用MD5,而是使用类似SHA1的函数
    • 对于发送给编写器的链接,您可以“混淆”参数名,即,将“key”称为“k”,将“authDate”称为“d”
    • 对于日期,您可以选择另一种更“神秘”的格式,如unix时代
    • 最后,您可以使用“base64”之类的代码对参数进行编码(或者简单地应用一些字符替换函数,例如rot13,但也考虑了数字),只是为了使它们更难猜测
    • 为了完整起见,在验证脚本中,您还可以检查编写者是否已经在时间范围内发送了文件,从而使其无法在时间范围内发送许多文件
    我最近在我工作的公司两次实现了类似的东西,有两种完全不同的用途。一旦你有了这个想法,实现起来就非常简单了——整个密钥生成和验证过程的代码可能不到10行

    在其中一个例子中,相当于您的作者的代理在系统中没有帐户(实际上这将是他与系统的第一次接触)——系统上只有他的“个人资料”,由其他人管理。在这种情况下,您还必须在“Upload”脚本的参数中包含“Writer”的id


    我希望这能有所帮助,而且已经足够清楚了。如果我有时间,我会在博客上写一个关于某种语言的工作示例。

    我会给你一个简单的方法来构建这样一个系统的一般指南

    我假设作者以某种方式注册到系统中,并且他/她的个人资料包含有效的邮件地址

    因此,当他提交样本时,您将在“sample”表上创建一个条目。然后,您可以将示例和链接发送给经理。此链接将指向一个脚本,该脚本将示例的数据库“id”作为参数(此脚本sho