代码之家  ›  专栏  ›  技术社区  ›  Valerio Zhang

django rest framework和django rest framework jwt apiews和验证授权头

  •  1
  • Valerio Zhang  · 技术社区  · 6 年前

    我使用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和permission类是经过身份验证的,确保有一个授权令牌与请求头一起发送。你怎么能确定没有人修改JWT?我怎么知道我的django应用程序中的secret_令牌每次都被用来解码/编码/验证/验证随每个请求一起接收/发送的jwt?这样的安全性足以让我的api对公众开放吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Alexandr Tatarinov    6 年前

    通过身份验证只需确保current request.user.is_authenticated为true。身份验证后端负责检查头、验证令牌等,并设置user.is_authenticated。这是您在设置rest framework jwt时在设置文件中添加的。这是一个完全为了安全身份验证而创建的应用程序,所以是的,这就足够了。但您仍然需要考虑其他方面,如ssl、sql注入等(搜索django安全性)。 警告!不要使用.format创建SQL查询,因为这是SQL注入的直接方式。如果以后使用某些用户提供的参数进行查询,则会有危险。将参数作为第二个参数传递给cursor.execute或使用orm来避免这种情况。