Ajax Django中api密钥的存储位置
我目前正在通过Mongolabs构建使用外部MongoDb的web应用程序。 api基于URL中使用的个人密钥。如文件所述,例如: 以下是完整资源URL的示例: * 因此,问题是如何安全地存储这样的api密钥2E81PUmPFI84t7UIc_5YdldAp1ruUPKyeAjax 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
正在阅读关于跨站点请求伪造的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。有道理