Ako zabezpečiť Nadmnožinu '/login/' parametra

0

Otázka

Nedávno som integrované nadmnožinu s mojím webovú aplikáciu tak, že pri používateľa, ktorý je overený podľa mojej webovej aplikácie môžete zadať nadmnožinu a zobraziť/upraviť/vytvoriť informačné panely založené na svoju úlohu len kliknutím na odkaz nie je potrebné, dokonca aj prihlasovacie údaje. Pre to som musel obísť prihlasovacie údaje, ktoré som uvedených tento článok.

Vlastné SecurityManager som použil obísť prihlásiť sa

class CustomAuthDBView(AuthDBView):

    @expose('/login/', methods=['GET', 'POST'])
    def login(self):
        redirect_url = self.appbuilder.get_url_for_index
        user_name = request.args.get('username')
        user_role = request.args.get('role')
        if user_name is not None:
            user = self.appbuilder.sm.find_user(username=user_name)
            if not user:
                role = self.appbuilder.sm.find_role(user_role)
                user = self.appbuilder.sm.add_user(user_name, user_name, 'last_name', user_name + "@domain.com", role, password = "password")
            if user:
                login_user(user, remember=False)
                return redirect(redirect_url)

        else:
            print('Unable to auto login', 'warning')
            return super(CustomAuthDBView,self).login()

class CustomSecurityManager(SupersetSecurityManager):
    authdbview = CustomAuthDBView
    def __init__(self, appbuilder):
        super(CustomSecurityManager, self).__init__(appbuilder)

Takže podľa vyššie kód pomocou adresy url http://localhost:8088/login?username=John bude prihlásenie užívateľa Ján interne alebo ak užívateľ Ján neexistuje účet je vytvorený s niektorými úloha, ktorý je založený na úlohy používateľa v mojej webovej aplikácie

Teraz problém je niekto, kto môže odhadnúť túto url http://localhost:8088/login?username=USER_NAME môžete vytvoriť svoj účet v nadmnožinu, tak ako sa chrániť alebo zabezpečenie tejto '/login' koncový bod

1

Najlepšiu odpoveď

0

Môžete použiť rozhranie API tak, že sa nechcete vystaviť podrobnosti žiadosti cez URL.

from flask_appbuilder.api import BaseApi, expose
from . import appbuilder

    class LoginApi(BaseApi):

    resource_name = "login"
    
    @expose('/loginapi/', methods=['GET','POST'])
    #@has_access
    
    def loginapi(self):
        if request.method == 'POST':
            username = request.json['username']
            password = request.json['password']



appbuilder.add_api(LoginApi)
2021-11-24 10:09:07

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................