国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

對于Python的框架中一些會話程序的管理

2020-02-23 00:49:12
字體:
來源:轉載
供稿:網友

 Django, Bottle, Flask,等所有的python web框架都需要配置一個SECRET_KEY。文檔通常推薦我們使用隨機的值,但我很難發現他有任何文字說明,因為這樣容易被破解(本地攻擊或者文本閱讀在web app中更容易受攻擊)。攻擊者可以使用SECRET_KEY偽造cookies,csrf token然后使用管理員工具。不過這很難做到,不過他可以搞一些小破壞,比如執行惡意代碼。這也是我下面將要介紹的。

記得以前使用PHP找到一個可以讀服務器上任意文件的bug(不包含本地文件),你將會被迫選擇遠程執行代碼(RCE)。你就需要審查大部分的app資源文件來找到其他的bugs或者有用的信息(比如說用戶密碼,或者數據庫信息等)。在這個情況下,我們能說PHP是更安全的嗎?
在攻擊一個Python網站框架的時候,知道你設置的SECRET_KEY字段的攻擊者,能夠簡單的將LFR攻擊升級到RCE攻擊。我(作者)是從攻擊一系列的網站框架之后得出如上結論的。在這些網站框架中,都有雷同的,使用Pickle作為將經過簽名的Cookie序列化的方式。

在Flask框架中,Flask在config['SECRET_KEY']被賦予某個值,session_cookie_name(default='session')存在于cookie中的時候,將Cookie反序列化,甚至在沒有session的情況下。(這樣多么好,攻擊者可以僅僅通過向config file添加SECRET_KEY的方式制造后門,并且,天真的用戶將認為這非常'重要')
 

從 werkzeug library 里面提取出來的反序列方法是這樣的:
 

def unserialize(cls, string, secret_key):    if isinstance(string, unicode):      string = string.encode('utf-8', 'replace')    try:      base64_hash, data = string.split('?', 1)    except (ValueError, IndexError):      items = ()    else:      items = {}      mac = hmac(secret_key, None, cls.hash_method)      # -- snip ---      try:        client_hash = base64_hash.decode('base64')      except Exception:        items = client_hash = None      if items is not None and safe_str_cmp(client_hash, mac.digest()):        try:          for key, value in items.iteritems():            items[key] = cls.unquote(value)        except UnquoteError:          # -- snip --      else:        items = ()    return cls(items, secret_key, False)

反序列方法檢查簽名,然后在簽名正確的情況下unquote()cookie的值。unquote()方法看起來非常無辜,但是事實上,這是一個默認的pickle.
 

#: the module used for serialization. Unless overriden by subclasses#: the standard pickle module is used.serialization_method = pickledef unquote(cls, value):  # -- snip --    if cls.quote_base64:      value = value.decode('base64')    if cls.serialization_method is not None:      value = cls.serialization_method.loads(value)    return value  # -- snip --

Bottle: 在默認的bottle設定中時沒有真正的secret key的,但是也許有人想要用signed cookie的功能來加密他自己的cookie.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 疏附县| 宁晋县| 电白县| 江门市| 彭州市| 介休市| 和政县| 阿坝| 汝州市| 大渡口区| 石泉县| 祥云县| 新竹市| 监利县| 扬中市| 冀州市| 昌平区| 福泉市| 双峰县| 陈巴尔虎旗| 永仁县| 交口县| 衡东县| 安岳县| 夏邑县| 翁源县| 莱州市| 枣庄市| 建昌县| 莫力| 合阳县| 阜新| 绥棱县| 沧州市| 和平区| 吴川市| 南平市| 海晏县| 个旧市| 通渭县| 佛山市|