我正在研究备份例程,它允许我们的生产数据库使用从数据库中某些列中剥离的敏感数据进行备份,以导出到我们的测试服务器。
该例程应该需要最少的人工干预,并且希望只是一个简单的可定制 SQL 脚本,而无需使生产数据库脱机。
数据库服务器是 SQL Server 2008。
本文档:防止敏感信息出现在任务切换器中,它描述了一种在applicationDidEnterBackground中显示视图控制器的方法,以便在任务切换器中隐藏关键信息:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Your application can present a full screen modal view controller to
// cover its contents when it moves into the background. If your
// application requires a password unlock when it retuns to the
// foreground, present your lock screen or authentication view controller here.
UIViewController *blankViewController = [UIViewController new];
blankViewController.view.backgroundColor = [UIColor blackColor];
// Pass NO for the animated parameter. Any animation will not complete
// before the snapshot is taken. …Run Code Online (Sandbox Code Playgroud) 场景如下:应该临时存储一个加密密钥,以便应用程序的多个实例可以(顺序)访问它。使用后,当然应该从系统中删除密钥。然而,这带来了一个问题。我承认只要存储了密钥,系统就容易受到攻击,但我希望系统在存储密钥之前和之后都是安全的。
简单地将密钥写入文件并在之后覆盖它在所有情况下都不起作用:某些文件系统将更改写入磁盘的不同部分,而不是同一位置。在这种情况下,之后仍然可以检索密钥。我不能依赖具有全盘加密的用户。
那么最合乎逻辑的选择似乎是使用另一个将密钥保存在内存中的进程,但是操作系统可能会在某些点将内存写入磁盘,从而导致与上述相同的问题。
可以加密密钥,但这并不安全。临时存储密钥的全部意义在于,用户无需在每次运行程序时都输入它。这意味着用于加密密钥的密钥也必须存储在某处,或者必须基于已知数据。如果存储了密钥,那么当然我们现在有安全存储此密钥的问题。如果是基于已知数据,则意味着可以在必要时再次生成密钥,因此加密几乎没有用。
我知道有些操作系统提供 API 来保护数据,但这通常依赖于根据用户帐户信息生成加密密钥。即使这是特定于会话的,在会话结束之前数据也不会是安全的(这可能是在密钥应该被擦除之后很久)。
这个问题有什么解决办法吗(不依赖特殊硬件,不需要全盘加密等)?如果没有,在这种情况下我能做的最好的事情是什么?
编辑澄清:当密钥存储在内存中时,它不需要是安全的;此时,用户应保证无法进行物理访问,并且系统没有病毒。使用密钥后,应将其从系统中删除,以便之后具有物理访问权限的任何人或任何程序都可以检查所有内存和磁盘,而不再找到密钥的单个(可用)痕迹。
引用Django文档:
@sensitive_post_parameters('pass_word', 'credit_card_number')
def record_user_profile(request):
UserProfile.create(user=request.user,
password=request.POST['pass_word'],
credit_card=request.POST['credit_card_number'],
name=request.POST['name'])
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,pass_word和credit_card_number POST参数的值将被隐藏,并在错误报告内的请求表示中用星号(******)替换,而name参数的值将被公开。
要在错误报告中系统地隐藏请求的所有POST参数,请不要向sensitive_post_parameters装饰器提供任何参数:
@sensitive_post_parameters()
def my_view(request):
...
Run Code Online (Sandbox Code Playgroud)
作为测试,我将以下代码添加到了Django 1.6应用程序中:
views.py:
@sensitive_post_parameters('sensitive')
def sensitive(request):
if request.method == 'POST':
raise IntegrityError(unicode(timezone.now()))
return render(request, 'sensitive-test.html',
{'form': forms.SensitiveParamForm()})
Run Code Online (Sandbox Code Playgroud)
forms.py:
class SensitiveParamForm(forms.Form):
not_sensitive = forms.CharField(max_length=255)
sensitive = forms.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)
当我通过提交此表单时POST,我可以sensitive在Sentry报告中看到两个字段(包括)的值清除为当天。
我在这里做错了什么?我正在使用Django 1.6和Raven 3.5.2。
在此先感谢您的帮助!
DVCS(Github,BitBucket等)如何确保私有项目代码的完整性?
当然,当您将代码上传到他们的在线存储库时,这些公司声称没有知识产权,但是如何确保项目的隐私,以便只有具有写入/提交访问权限的人才能真正查看数据?
如果您决定将项目移至私人服务器或其他主机,会发生什么?您的项目是否会被"删除"或仅从公共索引"删除"?
您如何确定您托管项目的公司的首席执行官将无法查看您的数据?
这些公司是否经过某种定期认证?或者整个交易基于信任和理解?
我已将我的项目上传到 GitHub 公共存储库。但是其中一个文件包含我的密码信息。我已经做了几次提交。如何从初始提交中隐藏我的密码?
没有单独的密码文件。所以在这种情况下我不能使用 .gitignore 。密码被硬编码在处理应用程序主要逻辑的 app.py 文件中。所以,我不能使用 BFG Repo-Cleaner。是否可以通过覆盖先前的提交来删除文件并添加新文件?
我已经在文件中进行了更改并推送了一个 repo。但是,以前的提交仍然显示了我的密码信息。另外,我对创建一个新的 repo 和删除旧的 repo 不感兴趣(除非我别无选择)。
如果我得到一些帮助,我会很高兴。
提前致谢。
github ×2
background ×1
backup ×1
bitbucket ×1
cryptography ×1
database ×1
django ×1
dvcs ×1
git ×1
heroku ×1
ios8 ×1
repository ×1
security ×1
sentry ×1
sql ×1
sql-server ×1