Как предотвратить подделку URL-запроса с помощью flask request.args.get? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть URL http://localhost:8000/savings?sv=30

В Flask Я получаю значение, используя шаблоны Jinja для отображения значения sv на экране:

{% set sv = request.args.get('sv', '') %}

<p>{{ sv }}</p>

Это Можно ли запретить пользователю редактировать URL для отображения другого значения?

1 Ответ

0 голосов
/ 25 апреля 2020

Для всех, кому интересно, я решил использовать кодирование / декодирование, чтобы скрыть значение sv от пользователей.

Я воспользовался советом Мартина Питера, чтобы скрыть значение, а не шифровать его: Простой способ кодирования строки в соответствии с паролем?

import zlib
from base64 import urlsafe_b64encode as b64e, urlsafe_b64decode as b64d

def obscure(data: bytes) -> bytes:
    return b64e(zlib.compress(data, 9))

def unobscure(obscured: bytes) -> bytes:
    return zlib.decompress(b64d(obscured))

где эта ссылка отправляется пользователю:

        link = 'https://localhost:8000/savings?sv=' + bytes.decode(obscure(str.encode(amount)))

, который затем декодируется при нажатии на ссылку:

@onboard.route('/savings', methods=['GET', 'POST'])
def savings():
    savings = request.args.get('sv')
    savings = str.encode(savings)
    savings = unobscure(savings)
    savings = bytes.decode(savings)
    return render_template('onboard/savings.html', savings=savings)
...