Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Django-如何保护web服务url-API密钥_Django_Web Services_Security - Fatal编程技术网

Django-如何保护web服务url-API密钥

Django-如何保护web服务url-API密钥,django,web-services,security,Django,Web Services,Security,我使用geodjango创建和提供地图分幅,我通常将其显示为OpenLayers.Layer.TMS 我担心任何人都可能在未经许可的情况下获取web服务URL并将其插入自己的地图,然后消耗大量服务器CPU并侵犯私有数据所有权。另一方面,我希望tile服务不需要登录就可以公开使用,但只能从我的网站上使用 我认为这种违反是可能的,对吗?如果是的话,有什么方法可以避免这种情况?是否可以在客户端浏览器中隐藏url 编辑: 在OpenLayers中启动平铺贴图服务的方式是通过javascript,可以从客

我使用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的令牌身份验证的信息,也许这是一个更可行的解决方案,这绝对是一个安全/更好的方法:)谢谢你的建议。你的解决方案对我来说似乎是最好的。