python-2.7 - 混淆之后可以在网址中使用的字符串
问题描述
我在 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 来弄清楚它,并且有两种方式,以便我可以弄清楚原始字符串是什么并将其打印出来。
解决方案
我最终用 itsdangerous 解决了这个问题,这是 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 安全字符串中.
。
推荐阅读
- vba - 查找所选单元格上方的第一个非空白行
- php - 在 Woocommerce 存档页面中将“销售”徽章替换为“缺货”
- python-3.x - 尝试网络抓取时服务器拒绝我的访问(Python,请求)
- linux - 如何在 Linux 上安装 Mingw-w64 交叉编译器 GNU 7.3.0
- python - 如何更改 Seaborn 中子图的比例?
- javascript - return an object with key and value using map
- eclipse - 双击文件时出现 Eclipse TFS 错误 - org.eclipse.ui.PartInitException:无法打开外部编辑器
- javascript - 从与字符串混合的数组中提取数字 - Javascript
- javascript - 添加表单锁定时间限制
- python - 依赖库已被删除,但仍存在于运行 Django 应用程序的 Ubuntu Server 中