Наличие промежуточного программного обеспечения не может заблокировать запрос на попадание на маршруты - PullRequest
0 голосов
/ 03 апреля 2019

Я написал промежуточное программное обеспечение для управления сеансами. Я вижу, что промежуточное программное обеспечение работает в соответствии с ожиданиями, когда дело доходит до перенаправления на нужную страницу в соответствии с состоянием сеанса.

Но проблема в том, что маршруты, которые я написал только для пробуждения, когда сеанс активен, все еще получают попадание независимо от состояния сеанса, даже после перенаправления.

Eg. Безопасный домашний маршрут должен быть доступен только при установленном сеансе, промежуточное программное обеспечение выполняет свою работу, перенаправляя страницу на страницу входа в систему, но на сервере я вижу, что домашний маршрут по-прежнему был нажат

Я мог бы снова написать блок кода как

if sessionActive:
  // Code Goes Here Which Should Run For Active Session State
else:
  // Return with Forbidden Message

Я предполагаю, почему я должен писать вышеуказанный кусок кода, когда промежуточное программное обеспечение установлено?

PFB, код Middleware:

# Middleware Class to Handle Session & JWT default operations
# Written By: XXXX
# Date Written: Jan 1, 2019

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import redirect, render
from libraries.PostgreSQLConnector import PostgreSQLConnector
import jwt


class SessionHandler( object ):

  '''
  Main Function to process request header authenticity
  Params: Object <request>
  Return Type: Object
  '''
  def process_request( self, request ):
    response = self.get_response( request )
    path = request.path_info
    PUBLIC_URLS = ('/authme/',)
    if path in PUBLIC_URLS:
      return response
    else:
      return self.regressChecking( request, path )

  def regressChecking( self, request, path ):
    response  = self.get_response( request )
    stoken = request.session.get('token', False)
    if 'ctoken' in request.COOKIES and stoken:
      if request.COOKIES['ctoken'] == stoken:
        if not path.startswith("/admin") and request.method != 'POST':
          return self.validatePagePermission( request, stoken, path )
        return response
    else:
        response_redirect = HttpResponseRedirect('/authme/')
        response_redirect.delete_cookie('csrftoken')
        response_redirect.delete_cookie('ctoken')
        return response_redirect


  def validatePagePermission( self, request, token, path ):
    if request.method == "GET":
      token_dump = jwt.decode( token , "SECRET", algorithms="HS256")
      userID = token_dump['user_id']
      status = self.validateUserPerm( path, userID )
      if status:
        return self.get_response( request )
      return HttpResponse("You are not allowed to access this page")


  def validateUserPerm( self, SLUG, USERID ):
    psy = PostgreSQLConnector( )
    QUERY = '''select count(id) as is_present from system_user_form_level_permission where form_id_fk_id IN
     (select id from system_app_form where form_name_html LIKE '%s') AND app_assignment_id_fk_id IN
     (select id from system_apps_assignment where user_id_fk_id = %d )''' % ( SLUG, USERID )
    r = psy._custom( QUERY , "select")
    if len(r['data']) != 0:
      return True
    return False

  def __init__( self, get_response ):
    self.get_response = get_response

  def __call__(self, request):
    response =  self.process_request(request)
    return response

Пожалуйста, предложите, если есть недостаток в промежуточном программном обеспечении? Или нам все еще нужно явно вставить код проверки сеанса до того, как начнется безопасный код?

1 Ответ

0 голосов
/ 03 апреля 2019

get_response вызывает нижестоящий код, то есть URL-адреса и представления. Вы должны организовать перемещение вызова внутри вашего блока if.

...