如何阻止来自未知域/IP 对我的 REST API 的调用?

Posted

技术标签:

【中文标题】如何阻止来自未知域/IP 对我的 REST API 的调用?【英文标题】:How can I block calls from unknown domains/IP to my REST API? 【发布时间】:2020-02-09 10:38:26 【问题描述】:

我想阻止来自未知来源的对我的 Django REST API (www.backend_django.com) 的调用,例如,我在域“www.example.com”下有一个网站,我只想允许该网站访问能够向我的 API 发出请求。

为了做到这一点,我用以下方式配置了 Django-Cors-Headers:

DEBUG = False
ALLOWED_HOSTS = ["www.backend_django.com", "backend_django.com"]

CORS_ORIGIN_ALLOW_ALL = False 
CORS_ORIGIN_WHITELIST = (
    'https://backend_django.com',
    'https://www.backend_django.com',
    'https://example.com',
    'https://www.example.com', )

CSRF_TRUSTED_ORIGINS = [
    'backend_django.com',
    'example.com']

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'social_django.middleware.SocialAuthExceptionMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
]

为了测试它,我使用我的计算机从 Postman 进行了调用,并且仍然成功地向 API 发出了请求。

我是否在设置中设置了一些不好的东西?我该如何存档?

【问题讨论】:

【参考方案1】:

CORS 限制不会阻止其他主机直接向您的 API 发出请求。

如果您需要精细的限制,那么您可以使用 django-iprestrict 之类的东西。

如果您需要限制整个后端应用程序,通过网络服务器设置 .htaccess 或类似设置会更容易。

【讨论】:

以上是关于如何阻止来自未知域/IP 对我的 REST API 的调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用CORS保护REST API?

使用来自单个域管理员帐户的O365 REST API访问其他用户日历

来自rest api的keycloak登录已被CORS阻止

来自 ASP NET Web API 的 CORS 阻止 Ajax POST 调用 - 对预检请求的响应未通过访问控制检查

如何根据域名阻止对我的 api-gateway url 的任何请求?

如何使用 CORS 保护 REST API?