Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可使flask登录系统不';是否不使用客户端会话/cookie?_Python_Session_Flask_Flask Login - Fatal编程技术网

Python 可使flask登录系统不';是否不使用客户端会话/cookie?

Python 可使flask登录系统不';是否不使用客户端会话/cookie?,python,session,flask,flask-login,Python,Session,Flask,Flask Login,我正在开发一个由医疗客户使用的烧瓶应用程序。他们的IT部门在安全方面非常紧张,以至于他们在网络范围内禁用cookie和脚本 幸运的是,wtf表单能够通过表单输入的服务器端验证解决其中一个问题 然而,我在登录系统上挂断了。我已经实现了flask登录,但这显然需要客户端数据,因为在禁用这些功能的浏览器中进行测试时,我无法登录 有没有办法创建一个没有客户端数据的登录 谢谢你的帮助。没有。这在纯HTTP上简直是不可能的。HTTP是一种无状态协议,这意味着为了保持状态,客户机必须能够在每个请求中识别自己

我正在开发一个由医疗客户使用的烧瓶应用程序。他们的IT部门在安全方面非常紧张,以至于他们在网络范围内禁用cookie和脚本

幸运的是,wtf表单能够通过表单输入的服务器端验证解决其中一个问题

然而,我在登录系统上挂断了。我已经实现了flask登录,但这显然需要客户端数据,因为在禁用这些功能的浏览器中进行测试时,我无法登录

有没有办法创建一个没有客户端数据的登录


谢谢你的帮助。

没有。这在纯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我没有完成这个项目,因为它被放弃了:(