Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 即使在密钥链安全之后,在代码中设置凭据仍然可能受到损害_Ios_Swift_Security_Keychain - Fatal编程技术网

Ios 即使在密钥链安全之后,在代码中设置凭据仍然可能受到损害

Ios 即使在密钥链安全之后,在代码中设置凭据仍然可能受到损害,ios,swift,security,keychain,Ios,Swift,Security,Keychain,我想在我的iOS应用程序中存储用户名、密码、身份验证令牌,这样我就可以连接到数据库、执行操作等。我注意到推荐的方法是钥匙链。这样做的原因是,如果恶意黑客通过越狱或其他方式获得了您的ipa,他可以读取您的代码并查看用户名/密码 但我的问题是,一旦用户登录,我将他们的用户名和密码保存在keychain中,我会在代码中设置凭据,那么这是如何安全的?如果黑客得到一个ipa并打开代码,他们会看到我在哪里设置密码,或者是否有一个地方可以存储密码,这样就没有人能真正看到它 我已经读了很多关于钥匙链有多安全的文

我想在我的iOS应用程序中存储
用户名、密码、身份验证令牌
,这样我就可以连接到数据库、执行操作等。我注意到推荐的方法是钥匙链。这样做的原因是,如果恶意黑客通过越狱或其他方式获得了您的ipa,他可以读取您的代码并查看用户名/密码

但我的问题是,一旦用户登录,我将他们的用户名和密码保存在keychain中,我会在代码中设置凭据,那么这是如何安全的?如果黑客得到一个
ipa
并打开代码,他们会看到我在哪里设置密码,或者是否有一个地方可以存储密码,这样就没有人能真正看到它

我已经读了很多关于钥匙链有多安全的文章,我绝对同意这一点,但是在钥匙链中设置值必须在代码本身中完成,这让我担心如果有人得到了代码并且可以看到它


参考资料:

您可以通过检测应用程序是否在越狱手机上运行来添加额外的保护层

此外,密钥链在数据加密时为密码或私钥提供保护

应用程序只能访问自己的密钥链项目,或与应用程序所属的组共享的密钥链项目


用户提供的数据(如用户名和密码)仅存储在钥匙链中(以及使用钥匙链时存储在内存中),因此它相当安全。您需要随应用程序提供的数据(如API密钥)只能被隐藏;无法保护它免受坚决的攻击者攻击。推荐的模式是,您的应用程序对服务器使用用户提供的凭据,并且您的服务器代码持有任何必需的API密钥,以便对应用程序的行为发出请求。另外,请查看GitHub。我在对iOS应用程序进行安全评估时使用它。你不应该储存密码;并且在存储令牌时要小心。@jww为了公平起见,您需要在应用程序和存储数据的上下文中评估密钥链的安全性;钥匙链转储程序要求对设备进行物理访问,并且设备被越狱。如果一个设备是由密码保护的,那么它就可以合理地防止窃贼的钥匙链转储程序攻击。如果存储的密码是用户自己的密码,则所有者没有理由在自己的设备上使用钥匙链转储程序,使用钥匙链会给用户带来极大的便利。@Paulw-我想这取决于安全策略和风险逆境。对于我在美国金融公司工作的公司来说,如果你存储密码,那么你很可能无法通过安全评估。他们有禁止这种做法的标准操作程序。对于公司来说,坏人如何获得敏感信息并不重要,比如安装设备。正如我所说,你必须在应用程序和需求的环境中进行评估。我认为说“您不应该存储密码”太宽泛了,因为这是一项适用于您所在行业/公司的政策。例如,在澳大利亚,银行应用程序通常将凭证存储在钥匙链中,通过PIN或TouchID进行访问(我认为它是令牌而不是密码,但它仍然是凭证)。这里的银行将评估风险与便利性,以便制定政策。