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