Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ajax Django中api密钥的存储位置_Ajax_Django_Mongodb_Mlab - Fatal编程技术网

Ajax Django中api密钥的存储位置

Ajax Django中api密钥的存储位置,ajax,django,mongodb,mlab,Ajax,Django,Mongodb,Mlab,我目前正在通过Mongolabs构建使用外部MongoDb的web应用程序。 api基于URL中使用的个人密钥。如文件所述,例如: 以下是完整资源URL的示例: * 因此,问题是如何安全地存储这样的api密钥2E81PUmPFI84t7UIc_5YdldAp1ruUPKye 正在阅读关于跨站点请求伪造的Django文档,但仍然不知道密钥记录在哪里。我会从环境变量将其加载到设置文件中。查看一下有两种方法可以做到这一点 一种方法是将一个local\u settings.py文件导入主settings

我目前正在通过Mongolabs构建使用外部MongoDb的web应用程序。 api基于URL中使用的个人密钥。如文件所述,例如:

以下是完整资源URL的示例:

* 因此,问题是如何安全地存储这样的api密钥2E81PUmPFI84t7UIc_5YdldAp1ruUPKye


正在阅读关于跨站点请求伪造的Django文档,但仍然不知道密钥记录在哪里。

我会从环境变量将其加载到设置文件中。查看一下

有两种方法可以做到这一点

一种方法是将一个
local\u settings.py
文件导入主
settings.py
文件并放入
.gitignore
中,使其不在git中。然而,有些人认为这不是一个好的做法,因为这可能会吸引人们把风险投资公司没有的复杂东西放进去,所以人们实际上有不同的环境。不过,我对此很满意

try:
    from local_settings import *
except ImportError:
    pass  # No local_settings file

另一种方法(不喜欢第一种方法的人推荐)是通过环境变量进行设置,并在
settings.py
中读取这些变量

MONGO_API_KEY = os.environ['MONGO_API_KEY']

不过,您必须以某种方式传递环境变量。例如,通过uwsgi的环境设置,或通过导出在bash中设置,或通过另一种方式。

一种替代方法是使用库
加密的库
django fernet字段

用法很简单。在模型中,您需要添加一个新字段:

from django.db import models
from fernet_fields import EncryptedTextField

class MyModel(models.Model):
    apikey = EncryptedTextField()
默认情况下,该字段将使用设置中的
SECRET\u密钥
进行加密。因此,如果您更改或丢失它,您将无法访问您的数据

为了提高安全性,您可以将
密钥
保存为环境变量,然后将其传递到设置文件

import os

SECRET_KEY = os.environ.get('APP_SECRET_KEY', 'unsafe-secret-key')

只需将其保存在settings.py中,无需提供任何额外的安全性。如果有人能阅读你的源代码,你就已经陷入了深深的麻烦。通常情况下,这些API密钥是要保密的,因此如果你的项目是开源的,那么将其放在代码库中的某个位置并不理想。这就是我从环境变量加载它的原因。我从来没有说过要将它们作为字符串写入settings.py.Ah ok。有道理