我想知道在允许用户更改敏感首选项之前是否有任何方法可以对用户进行身份验证.例如,系统偏好设置应用程序使用锁定图标执行此 *** 作:
我怀疑系统偏好设置需要这样做,因为某些偏好文件实际上需要修改root权限.
在我的情况下,我不需要运行任何这样的’sudo-esque’ *** 作,所以我不需要权限提升.我想要做的就是确保想要更改我的应用程序首选项的人实际上是拥有该mac或创建当前mac帐户的人(简而言之,知道当前登录用户的密码).
有任何想法吗?
解决方法 没有支持的API可以执行此 *** 作,即使您找到了解决办法,您的应用也可能会被拒绝从Mac App Store询问用户的密码.此外,通过这样做,您实际上并没有获得任何真正的安全性.首选项存储在沙箱中,具有对拥有它们的用户的写权限.这意味着,即使您的应用程序的UI阻止用户在没有密码的情况下修改首选项,用户仍然可以使用其他应用程序(例如默认命令行工具)来更改应用程序的首选项而无需密码.
您在“系统偏好设置”应用中看到的锁定图标的存在是为了允许用户写入影响系统上所有用户的首选项.这就是为什么他们需要身份验证,更重要的是,权限升级需要解锁.但是,由于您的用户已经拥有在其沙箱中写入应用程序首选项的权限,因此锁定只会让您的用户误以为这些首选项的权限更安全,可能是因为这些首选项会影响多个用户.
实现自己的密码检查的唯一方法是询问用户他们的密码,哈希,然后将哈希值与存储在用户影子文件中的哈希值进行比较(参见http://www.defenceindepth.net/2011/09/cracking-os-x-lion-passwords.html).但是,要访问影子文件,您需要root权限,沙盒应用无法获取.
即使您可以获得密码哈希,您的身份验证机制也可能会损害用户的安全性.身份验证服务API将密码安全地存储在内存中,禁用软件键盘记录程序,并确保密码在完成后不会保留在内存中会遇到很多麻烦.这需要使用沙盒用户不可用的低级API.
Apple还拒绝在授权服务API之外请求用户密码的应用程序.如果某个应用获取了用户的密码,则无法阻止该应用通过网络将该密码发送回应用的作者.
如果Apple创建了一个与身份验证服务并行的API,它会提示用户输入密码,但没有权限提升,那么他们就可以确信应用程序没有获得密码.但是,由于此API不会为用户首选项或数据添加任何真正的保护,并且因为它会给出错误的安全印象,我怀疑他们会添加这样的API.
总结以上是内存溢出为你收集整理的验证用户 – Objective-C/C++ocoa / Sandboxing全部内容,希望文章能够帮你解决验证用户 – Objective-C/C++ocoa / Sandboxing所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)