Запутывание строки, которая впоследствии может быть использована в веб-адресе - PullRequest
0 голосов
/ 23 января 2019

У меня есть небольшой простой сервер во Flask, и я хотел бы иметь возможность перенаправить на страницу пользователя по следующему маршруту:

@app.route("/something/<string:username>", methods=["GET"])

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

Я попытал счастья с несколькими методами, найденными в Stack Overflow, но с выходными строкамиУ меня есть различные проблемы, такие как не-ASCII символы, или символы, которые вызывают у меня проблемы в маршрутизации (например, наличие /, которое сбивает с толку Flask).

В идеале я хотел бы иметь две функции, obfuscate(key, string) иdeobfuscate(key, string), поэтому я смогу использовать вот так:

@app.route("/something/<string:username>", methods=["GET"])
def user_page(username):
    # username is an obfuscated string
    clear_username = deobfuscate(MY_KEY, username)
    return flask.make_response("Hi {}".format(clear_username), 200)
...
...
def create_user(username):
    # username is a clear string
    save_to_database(username)
    return obfuscate(MY_KEY, username)

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

1 Ответ

0 голосов
/ 23 января 2019

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

Как пример здесь показывает:

>>> from itsdangerous import URLSafeSerializer
>>> s = URLSafeSerializer('secret-key')
>>> s.dumps([1, 2, 3, 4])
'WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo'
>>> s.loads('WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo')
[1, 2, 3, 4]

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

Работает как :class:Serializer, но выдает дамп и загружает в безопасную строку URL, состоящую из символов верхнего и нижнего регистраалфавита, а также _, - и ..

...