gpt4 book ai didi

django - 限制对 Django View 的访问,只能从服务器本身(本地主机)

转载 作者:行者123 更新时间:2023-12-04 22:34:11 25 4
gpt4 key购买 nike

我想在 Django 中创建一个仅限本地主机的 API,我正在尝试找到一种方法来限制仅从服务器本身(本地主机)访问 View ?我试过使用:

  • 'HTTP_HOST',
  • 'HTTP_X_FORWARDED_FOR',
  • 'REMOTE_ADDR',
  • 'SERVER_ADDR'

  • 但没有运气。

    有没有其他办法?

    最佳答案

    这个问题比仅仅检查一个变量要复杂一些。要识别客户端 IP 地址,您需要

    request.META['REMOTE_ADDR'] -- The IP address of the client.

    然后将其与 request.get_host() 进行比较。但是您可能会考虑到服务器可能在 0.0.0.0:80 启动,因此您可能需要执行以下操作:
    import socket
    socket.gethostbyaddr(request.META['REMOTE_ADDR'])

    并将其与我们说的进行比较
    socket.gethostbyaddr("127.0.0.1")

    但是您需要使用这些 header 和值处理大量边缘情况。

    一个更简单的方法可能是在您的应用程序前面设置一个反向代理,它会发送一些 custom_header,比如 X_SOURCE=internet 。然后你可以设置来自互联网的流量通过代理,而本地流量(在你的本地网络中)直接进入网络服务器。因此,如果您只想从本地网络访问特定 View ,只需检查此标题:
    if 'X_SOURCE' in request.META:
    # request is coming from internet, and not local network....
    else:
    # presumably we have a local request...

    但同样 - 这是“防火墙方法”,它需要更多设置,并确保无法从外部访问应用程序,这不会通过反向代理..

    关于django - 限制对 Django View 的访问,只能从服务器本身(本地主机),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11686893/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com