混淆以后可以在网址中使用的字符串

时间:2019-01-23 09:12:36

标签: python-2.7 obfuscation

我在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 :(得分:0)

我最终以其危险解决了该问题,这是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]

可以肯定地说,我不会感到意外,就像文档字符串所说的那样:

  

:class:Serializer相似,但是将由字母表的大写和小写字母以及_-.组成的安全字符串转储并加载到URL中。