【问题标题】:Secure Variables passed to the form传递给表单的安全变量
【发布时间】:2020-09-09 01:54:57
【问题描述】:

我正在制作“快速入住表格”,它所要做的就是检查丢失的数据,并询问您在抵达酒店时会被问到的详细信息,因此基本上是入住表格。 根据他们在电子邮件确认中发送的详细信息,它将生成带有图像横幅 Express Checin 的超链接 - 单击此处左右。这将有网址domain.com/checkin_app.php?&cmd=start_app&t=Mr&n=Matt&s=Smith

那些传入url的参数然后用base64编码并显示为

domain.com/checkin_app.php?&cmd=start_app&t=TXI=&n=TWF0dA==&s=U21pdGg=

然后它将转到下一个功能,该功能将显示已解码这些详细信息的表格,并询问您是否要订购报纸、升级房间,或者是否缺少第二位客人的详细信息以更新这些信息。

在提交时,它只会将填写的详细信息发送到接待处以供进一步处理。

保护此类表单或数据传递的最佳方式是什么。

我不想在数据库中存储任何这些详细信息。

请提出优缺点和建议。

【问题讨论】:

    标签: php forms variables url


    【解决方案1】:

    如果您想在没有任何服务器端状态的情况下执行此操作,则几乎必须使用 signature 方案。这意味着,所有数据必须与服务器拥有的秘密一起进行哈希处理,以生成您添加到所有内容的签名:

    ...?cmd=...&...&signature=noIYUfbq2158N238nqw...
    

    可以通过对提交的数据和服务器机密重复相同的哈希过程并与提供的签名进行比较来检查此签名。

    这种签名的一般方法是 HMAC,将要散列的数据标准化为特定格式,例如按字母顺序排序,使用 JSON 序列化为字符串,然后进行哈希处理,因此这是一个可重复的过程。

    我会研究 JWTs 作为现成的解决方案。 JWT 是一个签名数据包,您可以使用它来传输所有这些值。

    【讨论】:

    • 谢谢@deceze,如果我可以使用数据库,但不能使用它们的详细信息,而是使用某种密钥,怎么样?
    • 那么你应该把它当作一个会话,并将所有相关数据存储在与某个随机 id 绑定的数据库中,并将该随机 id 提供给用户。
    • so 将所有数据存储在 db 中,并通过分配给该数据记录的密钥或唯一 id 从 db 中读取它们。这个 url 首先传递详细信息怎么样?可以这样做吗?所以当你点击它时,它会立即将它们添加到数据库中,然后显示这个 id 或 sec_key?
    • 我不确定你在问什么。如果您在客户端传输数据,则客户端可以操作数据。解决方法:签名以防篡改。替代方案:只给客户端一些无意义的 id 并将实际数据存储在与该 id 相关联的服务器端。你如何做到这一点有些无关紧要。同样,默认情况下 sessions 的行为是这样的。
    • 我只能根据我所描述的domain.com/checkin_app.php?&cmd=start_app&t=Mr&n=Matt&s=Smith 获得此详细信息,这是由第三方软件生成的确认信,因此是我的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2018-11-07
    相关资源
    最近更新 更多