Django-rest-framework и django-rest-framework-jwt APIViews и валидация Заголовки авторизации - PullRequest
0 голосов
/ 11 декабря 2018

Я использую DRF и DRF-jwt для защиты своих API.В настоящее время у меня есть несколько CBV, написанных так:

class Organization(APIView):
    permission_classes = (IsAuthenticated,)
    @method_decorator(csrf_exempt, name='dispatch')
    class OfficeVisitsOverview(APIView):
        def post(self, request, *args, **kwargs):
            cursor = connection.cursor()
            (before, today) = getDateRange()
            cursor.execute("SELECT format(COUNT(*), 'N0') \
                            FROM Medi_OfficeVisit \
                            WHERE ( cast(VisitDate as date) BETWEEN '{0}' AND '{1}' ) \
                    ".format(before, today))
            data = dictfetchall(cursor)
            connection.close()
            return JsonResponse({"numberOfOVs": data[0][""]})

Насколько я понимаю, APIView и класс разрешений IsAuthenticated удостоверяются, что есть токен авторизации, отправляемый с заголовком запроса.Как вы можете быть уверены, что никто не изменил JWT?Как я узнаю, что Secret_Token в моем приложении Django используется каждый раз для декодирования / кодирования / проверки / проверки JWT, который принимается / отправляется с каждым запросом?Достаточно ли этого уровня безопасности для того, чтобы мои API были открыты для публики?

1 Ответ

0 голосов
/ 11 декабря 2018

Аутентифицируется только для того, чтобы убедиться, что текущий request.user.is_authenticated имеет значение True.Ответственность за проверку заголовков, проверку токенов и т. Д. И установку User.is_authenticated лежит на бэкэнде аутентификации.Это тот, который вы добавили в файл настроек при настройке rest-framework-jwt.Это приложение, созданное специально для безопасной аутентификации, так что да, этого достаточно.Но вам все равно придется позаботиться о других аспектах, таких как SSL, внедрение SQL и т. Д. (Поиск безопасности Django).Предупреждение!Не используйте .format для создания запросов SQL, так как это прямой способ внедрения SQL.Если впоследствии вы будете использовать некоторые параметры, предоставленные пользователем, для вашего запроса, вы будете в опасности.Передайте параметры в качестве второго аргумента к cursor.execute или используйте ORM, чтобы избежать этого.

...