混淆之后可以在网址中使用的字符串
Obfuscating a string that can afterwards be used in a web address
我在 Flask 中有一个简单的小型服务器,我希望能够使用以下路由路由到用户页面:
@app.route("/something/<string:username>", methods=["GET"])
当它是一个明确的用户名时,这不是问题,但是我想添加简单的混淆,以便在给定密钥时生成一个新字符串,该字符串仍然可以在网址中使用。
我尝试了在 Stack Overflow 中找到的几种方法,但输出字符串存在各种问题,例如非 ASCII 字符,或者在路由中给我带来问题的字符(例如 /
混淆烧瓶)。
理想情况下,我希望有两个函数,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 来弄清楚它,并且是双向的,这样我就可以弄清楚原始字符串是并打印出来。
我最终用 itsdangerous 解决了这个问题,它是 Flask 的一个依赖项,所以无论如何我都有它在我的服务器上。
如示例 here 所示:
>>> from itsdangerous import URLSafeSerializer
>>> s = URLSafeSerializer('secret-key')
>>> s.dumps([1, 2, 3, 4])
'WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo'
>>> s.loads('WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo')
[1, 2, 3, 4]
可以肯定的是,我不会像文档字符串所说的那样感到惊讶:
Works like :class:Serializer
but dumps and loads into a URL safe string consisting of the upper and lowercase character of the alphabet as well as _
, -
and .
.
我在 Flask 中有一个简单的小型服务器,我希望能够使用以下路由路由到用户页面:
@app.route("/something/<string:username>", methods=["GET"])
当它是一个明确的用户名时,这不是问题,但是我想添加简单的混淆,以便在给定密钥时生成一个新字符串,该字符串仍然可以在网址中使用。
我尝试了在 Stack Overflow 中找到的几种方法,但输出字符串存在各种问题,例如非 ASCII 字符,或者在路由中给我带来问题的字符(例如 /
混淆烧瓶)。
理想情况下,我希望有两个函数,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 来弄清楚它,并且是双向的,这样我就可以弄清楚原始字符串是并打印出来。
我最终用 itsdangerous 解决了这个问题,它是 Flask 的一个依赖项,所以无论如何我都有它在我的服务器上。
如示例 here 所示:
>>> from itsdangerous import URLSafeSerializer
>>> s = URLSafeSerializer('secret-key')
>>> s.dumps([1, 2, 3, 4])
'WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo'
>>> s.loads('WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo')
[1, 2, 3, 4]
可以肯定的是,我不会像文档字符串所说的那样感到惊讶:
Works like
:class:Serializer
but dumps and loads into a URL safe string consisting of the upper and lowercase character of the alphabet as well as_
,-
and.
.