在Django中存储敏感数据

时间:2019-06-01 21:39:03

标签: python django django-models django-forms django-views

我正在建立一个项目,在该项目中我将能够保存API密钥,然后该密钥将用于在我的网站上执行一些操作。

很显然,除了我的代码将使用这些键执行某些任务之外,没有人可以访问该键。

实际上,密钥存储在我的数据库中,并且没有进行加密,但是现在我想使该系统尽可能安全,以便即使有人可以访问我的凭据,他也无法使用它。

问题是我对安全性和加密不了解。我的第一个想法是加密密钥,但是我真的不知道该怎么做。

基本上,这就是它的工作方式:密钥是使用表单提交的->密钥必须加密并保存在我的数据库中->稍后,当我需要执行任务时,这些密钥应该按顺序解密做我需要的事

我的方法正确吗?而我该如何在Django中完成呢?

这是我当前的视图:

def homepage(request):
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = ApiForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            send = form.save()
            send.save()
            messages.success(request, f"Success")

    else:
        form = ApiForm()

    return render(request,
                  "main/home.html",
                  context={"form":form})

这是表格:

class ApiForm(forms.ModelForm):

    key = forms.CharField(widget=forms.TextInput(
        attrs={
            'placeholder': 'Enter here your api key',
            }
        ), #max_length=9
    )

    secret = forms.CharField(widget=forms.TextInput(
        attrs={
            'placeholder': 'Enter here your secret key',
            }
        ), 
    )


    class Meta:
        model = MyModel
        fields = ("key", "secret")

    def save(self, commit=True):
        send = super(ApiForm, self).save(commit=False)
        if commit:
            send.save()
        return send

请记住,这些API密钥将由将执行某些操作的外部Python scrypt使用,因此它们需要由该脚本解密。

0 个答案:

没有答案