Python 可使flask登录系统不';是否不使用客户端会话/cookie?
我正在开发一个由医疗客户使用的烧瓶应用程序。他们的IT部门在安全方面非常紧张,以至于他们在网络范围内禁用cookie和脚本 幸运的是,wtf表单能够通过表单输入的服务器端验证解决其中一个问题 然而,我在登录系统上挂断了。我已经实现了flask登录,但这显然需要客户端数据,因为在禁用这些功能的浏览器中进行测试时,我无法登录 有没有办法创建一个没有客户端数据的登录Python 可使flask登录系统不';是否不使用客户端会话/cookie?,python,session,flask,flask-login,Python,Session,Flask,Flask Login,我正在开发一个由医疗客户使用的烧瓶应用程序。他们的IT部门在安全方面非常紧张,以至于他们在网络范围内禁用cookie和脚本 幸运的是,wtf表单能够通过表单输入的服务器端验证解决其中一个问题 然而,我在登录系统上挂断了。我已经实现了flask登录,但这显然需要客户端数据,因为在禁用这些功能的浏览器中进行测试时,我无法登录 有没有办法创建一个没有客户端数据的登录 谢谢你的帮助。没有。这在纯HTTP上简直是不可能的。HTTP是一种无状态协议,这意味着为了保持状态,客户机必须能够在每个请求中识别自己
谢谢你的帮助。没有。这在纯HTTP上简直是不可能的。HTTP是一种无状态协议,这意味着为了保持状态,客户机必须能够在每个请求中识别自己
您可以通过HTTPS进行HTTP基本身份验证,然后在服务器端访问该身份验证。由于客户端数据不为零,您可以在html页面中呈现的每个链接的GET参数中传递会话令牌
或者,您可以只创建带有隐藏令牌输入的POST视图(实际上可能更安全)。您当然可以在不使用cookie的情况下创建POST视图。您只需在每个请求上获得授权即可
这是一个例子。如果您没有100%的时间使用HTTPS,那么您应该使用安全的方法。另一种方法,它让我想起了使用
trans-sid
的PHP的好时光,将会话id传递到url中,并将会话存储在后端,以防止url参数变大(对于大型会话存储)
您可以使用@app.url\u默认值
和@app.url\u值\u预处理器
信号的组合来实现这一点,也称为
这取决于您对url_的正确使用,因为这是会话id的附加位置。让我们做一个简短的概念验证:
@app.url_defaults
def add_session_id(endpoint, values):
if 'session_id' in values:
# Allows to manually override the session_id, might not be wanted.
return
if g.session_id:
values['session_id'] = g.session_id
@app.url_value_preprocessor
def pull_session_id(endpoint, values):
g.session_id = values.pop('session_id', None)
现在,您所需要做的就是将会话存储在有用的地方(例如使用DB、or,并在此处使用g.session\u id=session\u id\u设置会话id
)
在每个后续请求中,g.session\u id应该是相同的session id,因为的url\u应该将?session\u id=yoursessionid
附加到url。您的身份验证应该检查是否存在g.session\u id
,并相应地采取行动
请注意,如果会话保持较小,您可能会将整个会话存储在url参数中而不是id中。它们可能是解决方法,例如在http html响应中传递令牌。您可以在GET参数中传递会话,但这与将所有资源公开一样安全。不完全是这样,或者解释一下w为什么它会不那么安全。它根本就不安全。它对帐户不提供任何保护,并且使攻击者很容易意外地访问您的帐户。然后,每当有人复制/粘贴链接时,任何用户单击该链接都会(必要)访问复制它的用户的帐户。这是伪装成安全的非安全性。你可以将令牌绑定到ip,也可以在POST中执行所有操作。DHCP基本上不可能做到这一点。无线网络上的漫游客户端在每次移动其笔记本电脑时都会启动。如上所述,你可以设计所有sit至于DHCP,我认为OP面临的限制是由于一些私人公司的网络,因为计算机可能通过固定IP连接到网络。所以这取决于情况。OP说他的客户是一个安全意识很强的医疗客户,除此之外没有其他。虽然他们可能只使用有线终端,但这也是可能的ble他们控制了公司的笔记本电脑、平板电脑等。你找到了这个问题的解决方案吗?我很想听听细节,因为我也面临着同样的问题,它无法通过登录屏幕并不断循环…@Jignesh我没有完成这个项目,因为它被放弃了:(