目标C语言 如何在Safari中使用iOS中预设的cookie或标题打开URL



在我的应用程序中,我有一个屏幕,用户单击不同类型的文件来查看和下载它们。然而,只有用户通过网站登录后才能访问此屏幕。

我使用以下方法用我的URL启动Safari浏览器:

UIApplication.sharedApplication().openURL(NSURL(string: url)!)

然而,用户被重定向到登录屏幕,因为他还没有被授权使用该网站。

我的问题是,如何将cookie或header传递到Safari并使用它们启动URL ?

你不能直接这么做。openURL只是这样做的,没有更多。

您需要在URL中传递所需的凭据。目标服务器可以从URL中读取它们,然后在响应中设置所需的cookie。

如果你实现了,确保它不会被滥用来设置任意cookie或执行会话固定攻击。一种安全实现方法是使用一次性标识符:

  1. 在iOS应用中,使用一个有效的验证cookie联系服务器,并请求一个一次性的长随机密钥,服务器需要存储一段时间。
  2. ?key=<that one-time key>将用户重定向到URL
  3. 让服务器验证密钥匹配并为用户设置cookie,并删除密钥。

在URL查询中传递任何安全数据都要小心,因为这被认为是一种安全风险。

原因如下:

  1. url存储在web服务器日志
  2. url存储在浏览器历史记录
  3. url在Referrer header
  4. 中传递

参考:https://blog.httpwatch.com/2009/02/20/how-secure-are-query-strings-over-https/

我知道这不是你想要的,但是更安全的解决方案将是与WKWebView一起使用会话级cookie。查看此SO答案获取更多信息https://stackoverflow.com/a/26577303/14009088

最新更新