Django-如何保护web服务url-API密钥
我使用geodjango创建和提供地图分幅,我通常将其显示为OpenLayers.Layer.TMS 我担心任何人都可能在未经许可的情况下获取web服务URL并将其插入自己的地图,然后消耗大量服务器CPU并侵犯私有数据所有权。另一方面,我希望tile服务不需要登录就可以公开使用,但只能从我的网站上使用 我认为这种违反是可能的,对吗?如果是的话,有什么方法可以避免这种情况?是否可以在客户端浏览器中隐藏url 编辑: 在OpenLayers中启动平铺贴图服务的方式是通过javascript,可以从客户端浏览器读取,如下所示:Django-如何保护web服务url-API密钥,django,web-services,security,Django,Web Services,Security,我使用geodjango创建和提供地图分幅,我通常将其显示为OpenLayers.Layer.TMS 我担心任何人都可能在未经许可的情况下获取web服务URL并将其插入自己的地图,然后消耗大量服务器CPU并侵犯私有数据所有权。另一方面,我希望tile服务不需要登录就可以公开使用,但只能从我的网站上使用 我认为这种违反是可能的,对吗?如果是的话,有什么方法可以避免这种情况?是否可以在客户端浏览器中隐藏url 编辑: 在OpenLayers中启动平铺贴图服务的方式是通过javascript,可以从客
tiledLayer = new OpenLayers.Layer.TMS('TMS',
"{{ tmsURL }}1.0/{{ shapefile.id }}/${z}/${x}/${y}.png"
);
复制/粘贴到另一个网站并访问web服务数据非常容易
如何在url中添加API密钥并定期重新生成?这可能无法回答您的问题,但无法在浏览器中隐藏web请求。对于普通用户来说,查看实际请求将非常困难,但是对于精通网络/计算机的用户(通常是希望利用API的程序员),进行嗅探并最终查看/使用web请求可能非常容易 您尝试执行的操作称为,通常不太推荐。如果您希望API对未经授权的用户完全安全,则必须创建一个更强大的身份验证机制 祝你好运 有一个很好的答案可以帮到你。这些原则也可以在django中进行调整和实现 您可以做的另一件事是将它提高一个级别,而不是在django中实现它,但是使用您的Web服务器 例如,我在nginx+uwsgi+django设置中使用以下内容:
# the ip address of my front end web app (calling my Rest API) is 192.168.1.100.
server {
listen :80;
server_name my_api;
# allow only my subnet IP address - but can also do ranges e.g. 192.168.1.100/16
allow 192.168.1.100;
# deny everyone else
deny all;
location / {
# pass to uwsgi stuff here...
}
}
这样,即使他们得到了URL,nginx也会在URL到达您的应用程序之前将其切断(可能会为您节省一些资源…??)
您可以在中阅读有关HTTP访问的更多信息
还值得注意的是,您可以-我更喜欢上面列出的设置。我不熟悉这个主题,但我可以想象有一个api可以处理您的请求。因此,您可以从服务器查询服务,并将结果显示到用户浏览器。非常有趣!所以我可以定期更改url中的api密钥。你知道一个好的django应用程序可以做到这一点吗?我同意你的看法。默默无闻是我的第一个想法,但我想这不是一个好主意。我有一些关于django的令牌身份验证的信息,也许这是一个更可行的解决方案,这绝对是一个安全/更好的方法:)谢谢你的建议。你的解决方案对我来说似乎是最好的。