Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Security 将DropBox中的OAuth凭据安全地存储在数据库中供以后使用_Security_Encryption_Oauth_Dropbox Api - Fatal编程技术网

Security 将DropBox中的OAuth凭据安全地存储在数据库中供以后使用

Security 将DropBox中的OAuth凭据安全地存储在数据库中供以后使用,security,encryption,oauth,dropbox-api,Security,Encryption,Oauth,Dropbox Api,我正在构建一个web应用程序,它将使用DropBox API将数据保存到用户文件夹。该站点由两部分组成:ASP.NET MVC前端和Windows服务。当时,我正计划将oauth字符串和用户Id从授权请求转储到数据库,并在服务和网站调用中使用它,但是我应该如何存储这些信息呢?我应该加密还是不加密?若有,有何建议?例如,如果数据库已加密,如何存储加密密钥 您希望始终访问用户的投递箱帐户,还是仅当用户登录到您的系统时才访问?我假设是前者,因为您要存储o-auth令牌。在这种情况下,请参阅下面的加密讨

我正在构建一个web应用程序,它将使用DropBox API将数据保存到用户文件夹。该站点由两部分组成:ASP.NET MVC前端和Windows服务。当时,我正计划将oauth字符串和用户Id从授权请求转储到数据库,并在服务和网站调用中使用它,但是我应该如何存储这些信息呢?我应该加密还是不加密?若有,有何建议?例如,如果数据库已加密,如何存储加密密钥

您希望始终访问用户的投递箱帐户,还是仅当用户登录到您的系统时才访问?我假设是前者,因为您要存储o-auth令牌。在这种情况下,请参阅下面的加密讨论,了解您无法真正加密它的原因。但是,我建议您采取更安全的路线,在用户登录时或登录后不久(即不存储持久身份验证令牌)只访问下拉框

安全方法 当用户登录时,从dropbox获取oauth令牌,使用它执行他们想要的任何操作,如果需要,在注销后保留它以继续执行任务(后台同步或其他)。但是,一旦最后一个任务完成,请删除该令牌。这意味着,如果您的服务器受到威胁,则只会暴露登录用户或最近注销的用户。这是一种缓解,但这是你能得到的最好的

我相信您可以使用o-auth实现这一点,而无需每次都明确提示用户输入新令牌。若并没有,我知道你们可以用opendID来做,尽管我可以看到drop box不允许这样做

最后,如果两者都不起作用,您可以将o-auth密钥存储在从用户密码派生的密钥下,例如PBKDF2(大约5000次迭代)。当他们登录时,你解密它,使用它,然后删除明文副本。这样做的缺点是1)密码重置需要一个新的o-auth令牌,因为您不再拥有他们的密钥;2)用户必须登录您的站点并为您提供一个密码,以便您获得密钥。他们不能使用openid

加密 如果您想要持续访问oauth tokem,那么就不能真正进行有意义的加密。正如你所说,你会把钥匙存放在哪里?对于web服务,没有好的答案。对于最终用户系统,答案是从用户的密码中派生密钥,您不能存储该密码(这是lastpass所做的)。您不能这样做,因为您希望在终端(wepapp)用户未登录时也能访问数据

好的,系统管理员的密码呢?由于服务器一直在运行,这是毫无价值的,因为妥协仍然会泄露密钥。更糟糕的是,重新启动会关闭你的应用程序,因为它需要系统管理员的密码来解密它的数据,而且当系统在凌晨3点崩溃时,这些密码不太可能生效

他们制作存储密钥并使用密钥执行加密操作,因此攻击者可以获得密钥,因为它从不离开HSM。但是,攻击者可以要求TPM解密o-auth字符串。你能做的最好的事情就是限制这个速率,这样一次攻击每小时只能获得1000个令牌(显然,这个速率需要比合法使用更大)。考虑到HSM很昂贵,并且由于需要专用系统而使托管变得昂贵,这是不值得的


在理想情况下,您可以使用a来持有密钥,并且只有在系统未受到破坏的情况下,才让它释放数据。不幸的是,TPM目前只支持验证是否加载了正确的程序(例如,引导加载程序、内核、用户登录程序)。如果程序在加载后被破坏,他们什么也不做,这就是这里的威胁向量。这可能会在未来5到10年内发生变化,但这对您现在没有帮助。

谢谢您的回复。。。这给了我很多思考。我正在处理的项目需要对dropbox文件夹(不是完整站点)的权限,并且需要能够使用Windows服务写入该文件夹。。。只存储一小段时间的密码对我来说不起作用。硬件加密也不是一个选项,因为,即使这是在一个专用服务器上,它实际上是一个虚拟机托管的网站。。。我想知道,像“如果这个然后那个”这样的网站是如何做到的?他们有权限把东西放进我的dropbox。。。我是不是想得太多了?对于这类事情,答案通常是不要被拥有。您明智地希望使用的静止数据加密在云服务中没有得到广泛应用,这在很大程度上是出于一个很好的原因:您没有比存储数据更安全的密钥材料存储位置。dropbox能否为您提供特定文件夹的细粒度权限?我记得读到过google drive可以,并且认为他们从dropbox克隆了这个功能。如果是这样的话,至少可以降低风险是的,dropbox可以提供细粒度的权限,这就是我目前使用的权限(仅访问一个文件夹,特定于应用程序)。我想我唯一能做的就是尽我所能进行加密,并尽可能多地锁定。。。除非来自IFTTT或其他使用dropbox auth的地方的人在接下来的几天里回来告诉我他们是如何工作的,否则我将接受这个答案。谢谢