我正在使用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?我如何知道我的Django应用程序中的Secret_Token每次都被用来解码/编码/验证/验证每个请求所接收/发送的JWT?这样的安全性足够让我的API向公众开放吗?
发布于 2018-12-12 04:55:32
身份验证只会确保当前的request.user.is_authenticated为真。身份验证后端负责检查报头、验证令牌等,并设置User.is_authenticated。这是您在设置rest-framework-jwt时在设置文件中添加的。这是一个专门为安全身份验证而创建的应用程序,所以,是的,这就足够了。但您仍然需要注意其他方面,如SSL、sql注入等(搜索Django安全性)。警告!不要使用.format创建SQL查询,因为这是SQL注入的直接方式。如果您稍后使用用户提供的一些参数进行查询,您将处于危险之中。将参数作为第二个参数传递给cursor.execute或使用ORM来避免这种情况。
https://stackoverflow.com/questions/53731404
复制相似问题