国产探花免费观看_亚洲丰满少妇自慰呻吟_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.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 进贤县| 轮台县| 塔城市| 岢岚县| 望都县| 新乡市| 玛沁县| 大连市| 阳信县| 娄底市| 沙坪坝区| 清苑县| 高邮市| 锡林郭勒盟| 南漳县| 阳谷县| 法库县| 白玉县| 东乡县| 沂南县| 阿克苏市| 永修县| 会理县| 松原市| 新津县| 普安县| 江门市| 五指山市| 乐东| 博乐市| 竹山县| 汉寿县| 南平市| 南汇区| 东海县| 安阳市| 大埔县| 安乡县| 沙河市| 温州市| 全州县|