为什么 flask-session 是纯文本的?
Why is flask-session in plain text?
我创建了一个服务器端会话文件,我是 Web 应用程序的新手。我不明白为什么用文本文件打开的会话文件里面有纯内容。我有一个密钥设置,但是为什么它没有加密?
from flask import Flask, render_template, request, redirect, url_for, session, flash
from flask_sessions import Session
app = Flask(__name__)
app.config['SECRET_KEY'] = 'keykeykey'
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
app.config['SESSION_USE_SIGNER'] = True
server_session = Session(app)
并且在登录时文件路径是
app.route('/login', methods=['GET', 'POST'])
def login_page():
session['email'] = email
return redirect(url_for('home_page'))
注销时路由为
@app.route("/logout")
def logout():
session.pop('email', None)
return redirect(url_for("home_page"))
当会话开始时,在 dir/flask-sessions/2029240f6d1128be89ddc32729463129
中创建了一个文件,每次生成两个文件,当我用记事本打开它时,我可以看到纯文本的电子邮件 ID
Mø`.€•i }”(Œ
_permanent”ˆŒ
csrf_token”Œ(fb90d22be1adc1237c52730fadf95d1e07936cdd9e”Œemail”Œemail@email.com”u.
结尾email@email.com
是表格的输入。
我的问题是
- 为什么存储在我的服务器中的内容没有加密?
- 当我这样做时
session.pop()
为什么文件没有被删除?
编辑:
我想这个问题是因为我使用 from cachelib import FileSystemCache
而不是 from werkzeug.contrib.cache import FileSystemCache
?那是问题吗?我怎样才能克服这个问题,因为最新版本的 werkzeug
没有 .contrib
?
尽我所知尝试回答。
1)为什么内容没有加密?
只要您的服务器是安全的,您就不必真正担心存储在服务器中的会话。该漏洞是在浏览器中存储为 cookie 的会话。为了绕过它,'SECRET_KEY' 用于让服务器在将会话变量存储在浏览器之前对其进行签名。这就是为什么您仍然可以在服务器上看到纯文本会话的原因。不过,它将在浏览器 cookie 数据中签名。
2) 当我执行 session.pop() 为什么文件没有被删除?
为了理解 session.pop 的作用,我做了一些练习。
一开始,我的 Flask 会话是这样的:
Session is: <SecureCookieSession {'id': '27260b14-405d-440a-9e38-daa32d9a7797', 'loggedin': True, 'username': 'Rajat Yadav'}>
当我弹出会话字典映射中的所有键时,我留下了这个:
New Session is: <SecureCookieSession {}>
清楚的是 key:value 对在我们弹出会话时被删除。可以肯定的是,pop 不会删除完整的字典对象,而只会删除其中的 key:value 对。
对于您关于文件未被删除的问题,我相信删除字典对象应该可以解决问题。
尝试:
del session
如果这会删除文件,请告诉我。
我创建了一个服务器端会话文件,我是 Web 应用程序的新手。我不明白为什么用文本文件打开的会话文件里面有纯内容。我有一个密钥设置,但是为什么它没有加密?
from flask import Flask, render_template, request, redirect, url_for, session, flash
from flask_sessions import Session
app = Flask(__name__)
app.config['SECRET_KEY'] = 'keykeykey'
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
app.config['SESSION_USE_SIGNER'] = True
server_session = Session(app)
并且在登录时文件路径是
app.route('/login', methods=['GET', 'POST'])
def login_page():
session['email'] = email
return redirect(url_for('home_page'))
注销时路由为
@app.route("/logout")
def logout():
session.pop('email', None)
return redirect(url_for("home_page"))
当会话开始时,在 dir/flask-sessions/2029240f6d1128be89ddc32729463129
中创建了一个文件,每次生成两个文件,当我用记事本打开它时,我可以看到纯文本的电子邮件 ID
Mø`.€•i }”(Œ
_permanent”ˆŒ
csrf_token”Œ(fb90d22be1adc1237c52730fadf95d1e07936cdd9e”Œemail”Œemail@email.com”u.
结尾email@email.com
是表格的输入。
我的问题是
- 为什么存储在我的服务器中的内容没有加密?
- 当我这样做时
session.pop()
为什么文件没有被删除?
编辑:
我想这个问题是因为我使用 from cachelib import FileSystemCache
而不是 from werkzeug.contrib.cache import FileSystemCache
?那是问题吗?我怎样才能克服这个问题,因为最新版本的 werkzeug
没有 .contrib
?
尽我所知尝试回答。
1)为什么内容没有加密?
只要您的服务器是安全的,您就不必真正担心存储在服务器中的会话。该漏洞是在浏览器中存储为 cookie 的会话。为了绕过它,'SECRET_KEY' 用于让服务器在将会话变量存储在浏览器之前对其进行签名。这就是为什么您仍然可以在服务器上看到纯文本会话的原因。不过,它将在浏览器 cookie 数据中签名。
2) 当我执行 session.pop() 为什么文件没有被删除?
为了理解 session.pop 的作用,我做了一些练习。 一开始,我的 Flask 会话是这样的:
Session is: <SecureCookieSession {'id': '27260b14-405d-440a-9e38-daa32d9a7797', 'loggedin': True, 'username': 'Rajat Yadav'}>
当我弹出会话字典映射中的所有键时,我留下了这个:
New Session is: <SecureCookieSession {}>
清楚的是 key:value 对在我们弹出会话时被删除。可以肯定的是,pop 不会删除完整的字典对象,而只会删除其中的 key:value 对。 对于您关于文件未被删除的问题,我相信删除字典对象应该可以解决问题。 尝试:
del session
如果这会删除文件,请告诉我。