2016-09-24 52 views
5

我一直和现在可能几乎每个使用Django Rest Framework创建REST API的Django Framework用户。我使用代码验证使用django-rest-framework-jwt,它在用户通过我们的其余API登录时返回令牌。如何在Django Rest Framework中注册和登录API?

所以问题是如何保护我们的API端点的任何注册或登录视图。任何高级别的XSS脚本都可能具有恶意循环来创建注册。我们如何在Django Rest Framework中保护它?

+2

感谢您的提问。我也在寻找这个答案。 –

+0

在应用程序级别执行此操作不是最佳解决方案。理想情况下,您应该使用类似fail2ban的东西来检测已知的攻击模式并在防火墙级别阻止它们。这种方式暴力尝试没有得到应用程序一旦检测到。 –

+0

@MthetheDDaly是的,我查找了fail2ban。但目前的解决方案,我发现移动和后端开发人员可以共享一个密钥。所以在这些API中,移动应用会根据一些文本发送一些加密密钥,而后端开发人员可以使用相同的文本解密文本。 – Aniket

回答

3

正如您所说的,您不能像JWT那样拥有一个身份验证系统来保护您的网页,如登录和注册。 但是还有很多其他的事情可以做。下面我已经简要介绍了其中的两个,以便让你开始并休息,以便详细研究。

  • 首先要解决的问题XSS -

一些浏览器来阻止似乎是一个XSS攻击内容的能力。他们通过在页面的GET或POST参数中查找JavaScript内容来工作。如果JavaScript在服务器的响应中重播,则该页面将无法呈现,而是显示错误页面。 X-XSS-Protection头用于控制XSS过滤器的操作。

实施

Django提供中间件和设置添加的设置> base.py 中间件:

django.middleware.security.SecurityMiddleware 

设置:

SECURE_BROWSER_XSS_FILTER = True 
This sets header to X-XSS-Protection: 1; mode=block 

可以做,以防止一些其他的事情重复登录或注册页面的脚本是 -

  • 蛮力攻击

安全问题

自动化程序可能攻击破解用户的用户名和密码或服务器慢下来。

这些攻击通常采取几种形式之一: 1.一个IP地址尝试一个用户名与许多密​​码。 2.许多IP地址尝试使用多个密码的用户名。 3.一个IP地址尝试使用几个通用密码的许多用户名。 4.许多IP地址尝试使用一个或几个通用密码的许多用户名。 5.攻击域上的任何随机url以降低服务器响应速度。

实施

Django的REST框架用于节流

REST_FRAMEWORK = { 
    ... 
    'DEFAULT_THROTTLE_CLASSES': (
     'rest_framework.throttling.AnonRateThrottle', 
     'rest_framework.throttling.UserRateThrottle', 
     'rest_framework.throttling.ScopedRateThrottle', 
    ), 
    'DEFAULT_THROTTLE_RATES': { 
     'anon': '60/minute', 
     'app1': '10000/day', 
     'app2': '10000/day', 
    }, 
    ... 
} 

另一种解决方案提供了内置的设置是Django的后卫或Django的ratelimit用于防止仅针对失败的登录尝试。

希望它有帮助。