我有一个多用户网站,想为每个用户发布一个单独的 icalendar 订阅文件 (.ics)。
我们的 apache 服务器配置为仅提供通过 https 的访问。
我考虑过的一种方法是,当用户第一次询问他们的订阅 URL 时,生成一个长的随 secret 钥并将其包含在 URL 中。然后该 key 的散列将存储在数据库中。示例:https://site.com/calendar/user_id/dQXeCgtiOmZ5lAXoedmujiuA47VmCgA5OIfE6vZ8BhJT3Rxh20b9Ci.ics
我们的 cakephp 应用程序中的所有页面都要求用户登录(显然期望登录页面)。我会将 ics 文件配置为也不需要用户登录,而是仅在提供正确的 key (针对哈希进行测试)时才显示。
这种方法有什么缺点吗?
我应该使用其他方法吗?
我见过有人在订阅 URL 中包含基本身份验证的示例,但这听起来更糟。示例:https://user:password@site.com/calendar/user_id
这是在学校环境中部署的,因此 iCalendar 订阅包含相当普通的内容,例如类(class)表和作业截止日期,但我仍然希望确保它的安全。
最佳答案
将不过期 secret 添加到 url 的缺点是它们可能“泄漏”到其他系统。任何读取 iCalendar 提要的东西都不会真正认为提要 url 本身非常敏感,并且这些 url 可能存储在其他应用程序可能读取的系统部分中。
iCalendar 提要可能被缓存,因此该提要的缓存副本及其 secret 可能存在于本地浏览器缓存、公司网络缓存和其他中介中。
当用户第一次点击这样的 url 时,浏览器工具栏可能会记录该请求并将其发送到外部服务。
这只是几个向量。使用基本身份验证并不糟糕,只是不要将其嵌入到 url 中并要求用户再次输入密码。
不过,我无法为您决定这是否是可以接受的风险。我们确实对某些内容使用 secret 网址。
关于php - 如何确保 icalendar (.ics) 订阅的安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861627/