问题标签 [session-cookies]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - CSRF 漏洞/cookie 问题
只是想从知道的人那里得到意见。我正在考虑 CSRF 漏洞,以及我所知道的最流行的对抗它的方法。该方法是在返回的 html 中创建一个令牌,并添加一个具有相同值的 cookie。因此,如果脚本尝试发布帖子,他们会希望have to guess the token thats embedded in the web page
它成功。
但是,如果他们针对的是特定网站,为什么他们不能只使用一个脚本
- 在页面上调用 get (即使脚本无法访问 cookie 也会返回)
- 解析 html 并获取令牌
- 调用包含该令牌的帖子(返回的 cookie 将被发回)
- 他们在用户不知情的情况下成功提交了表单
脚本不需要知道 cookie 的内容,它只是利用了 cookie 一直来回发送的事实。
我在这里想念什么?这不可能吗?如果你仔细想想,我认为这很可怕。
在此行下方不需要阅读即可回答问题:)
这个漏洞基于这样一个事实,即身份验证是基于 cookie 完成的,我认为这是当前进行身份验证的主要方式。
我能想到的另一个解决方案是在页面级别进行身份验证。因此,当他们登录时,返回的 html 中将包含该令牌。他们单击的每个链接都包含该令牌,因此当 Web 服务器收到请求时,它可以识别用户/会话。它的问题是,如果他们使用除此之外的任何导航,他们将是“未经身份验证”(例如输入 url),它在 url 中看起来也不好看,因为它可能看起来像这样:
https://www.example.com/SuperSecretPage/1/123j4123jh12pf12g3g4j2h3g4b2k3jh4h5g55j3h3
但我确实明白,如果安全更重要,那么漂亮的 URL 就排在第二位。
我对cookies一无所知,但是如果用户代理对他们的cookies更加小心怎么办?
例如,如果发送的 cookie 取决于选项卡怎么办?我们现在都使用标签冲浪,对吧?那么如果 cookie 的范围是选项卡呢?因此,如果我在选项卡 1 上打开了我的银行网站并且我在选项卡 2 上冲浪,则在选项卡 2 上调用获取/发布的任何脚本都只会发送在选项卡 2 中累积的 cookie。
或者如果cookies被存储/域。因此,当我在 example.com 上时,任何返回的 cookie 都会进入 example.com cookie 集合。然后当我在 www.mybankingsite.com 上时,所有的 cookie 都会被放入 mybankingsite.com 集合中。因此,如果我访问 example.com 并运行一个调用 get/post 的脚本,用户代理将只发送 example.com cookie。这与发送请求域的 cookie 不同。例如,如果脚本在 example.com 的网页中调用 mybankingsite.com 的获取,则用户代理将不会发送 mybankingsite.com cookie。
我知道我无法控制用户代理的工作,但我只是在探索可能性
asp.net - 防止多个用户使用同一个浏览器登录同一个域
所以这是一个 ASP.NET 问题,两个用户使用同一台机器,相同的浏览器。
- 用户 1 登录域。
- 用户 1 更改了一些数据而不保存它。
- 用户 2 在单独的选项卡中登录域。
- 用户 1 切换回他的选项卡并保存数据。
- 用户 1 实际将数据保存到用户 2 中!!
这是由以下机制引起的:
- 同一浏览器中的不同选项卡似乎共享相同的会话 ID。
- 我们将用户身份验证存储在 cookie 中,并且 cookie 在选项卡之间共享(同一域)
因此,当用户 1 请求保存时,由于 cookie 已更新为用户 2,因此将其识别为用户 2。
所以我想知道是否有任何其他方法可以防止这种情况发生,除了: 1. 使用 cookieless 会话,以便会话嵌入在 uri 中。2. 始终在页面中包含一个隐藏字段以指示哪个用户拥有该页面。
问候,
glassfish - GlassFish v3 JSESSIONID 多个子域和 TLD
我们正在构建一个 Web 应用程序来服务多个区域网站 TLD。此外,Web 应用程序还支持数以千计的动态子域。示例包括:
虽然我们可以理解不同的域 TLD 会导致新会话,但上述后两个示例开始出现问题,这也会导致新会话实例。例如,如果用户:
- 转到:www.example.co.uk 创建一个新会话,然后...
- 点击链接:fred123.example.co.uk 创建一个新会话,然后...
- 点击一个链接:sam99.example.co.uk 一个新的会话被创建...
3 次点击 ==>> 3 次会议!!!!
问题似乎是由于 GlassFish v3 自动将 JSESSIONID 的域设置为主机请求的 FQDN。
需要的是至少将主机名部分从域值中剥离,以具有如下域值:
有谁知道如何实现这一点。我发现了以下问答,但在我们的案例中,子域 TLD 并不完全匹配:
因此,静态配置 sun-web.xml 或使用 Servlet 3.0 解决方案的解决方案似乎没有帮助。此外,创建过滤器响应包装器也不起作用,因为 JSESSIONID cookie 是在应用程序服务器的较低级别分配的,并且不会暴露给 Web 应用程序以进行拦截。
我认为我仅有的另外两个选择是:
a) 修补将 JSESSIONID cookie 域值设置为 FQDN 的 GlassFish v3 代码,以便发生一些剥离或
b) 在 Sun Web Server 7.0 反向代理层中做一些事情,我们必须重写 set-cookie 标头中返回的 JSESSIONID cookie 域值,但是我无法找到有关如何执行此操作的示例
任何人都可以帮助解决这个问题吗?任何线索/帮助将不胜感激!
php - 我怎样才能使 PHP 会话/cookie 无限期
我正在使用一个登录系统来设置下面的会话变量/cookie。Chrome 可以让您轻松查看 cookie,显然将其标记为“当我关闭浏览器时”过期的 PHPSESSID。果然,当我登录时,关闭浏览器,然后打开一个新的浏览器会话,我就不再登录了。
无论浏览器是否关闭,我怎样才能使用户保持登录状态?我想让用户保持登录状态(如果可能的话,永久保持登录状态),除非故意注销。
php - 如何从 PHP 中的另一个会话实例中读取会话值?
我在 PHP 中做一些事情,我必须读取另一个会话实例的会话值。例子
浏览器1:$_SESSION['value']="user1";
Browser2: $_SESSION['value']="user2";
Browser1 需要从某个请求中获取“user2”值。该请求还将包括 cookie(key, value)。
我怎样才能做到这一点?
谢谢,瓦尔
asp.net - Previous Next ASP.NET 应用程序和会话超时重定向
我有一个应用程序,我试图在会话超时时重定向,因此在我的母版页中,我正在检查重定向的会话变量是否为空,但问题是我有来自母版页和派生的 Page_Load 的其他页面(派生)页面我也在那里引用了一些会话变量,我观察到派生页面(内容)的 PAGE_LOAD 事件首先触发,母版页 PAGE_LOAD 稍后触发,因此错误弹出“未设置对象引用”。
顺便说一句,我正在 LOGIN_BUTTON_PRESSED EVENT 上编写以下代码。
请通过示例提出解决此问题的解决方案。
django - 在 django 中,如果用户注销,是否会删除所有会话数据?
我需要跟踪有关用户的一些信息,但希望将其保留一段固定的时间,比如一周。
如果我通过 request.sessions 设置此值,并且用户注销,如果他们稍后重新登录,我可以检索它吗?这一切都假设我的会话通常设置为在 30 天内到期,如果用户 neVer 注销。
在考虑上述问题的同时,我决定将数据存储在一个表中,但我仍然想知道上面的答案以供参考。由于不可靠,我还决定不使用 cookie。
php - 基于 Cookie 的菜单选择
我是 PHP 新手,想知道如何设置和使用 Cookie 来存储页面之间的用户菜单选择。
基本上,当用户说单击名为“关于我们”的菜单选项时,我想以某种方式通过 cookie 存储此选择,然后我可以在其他地方使用?
仅供参考,我正在使用 jquery .click 函数来确定选择了哪个菜单选项,即
谢谢。
django - 如何在 Django 中设置 HttpOnly cookie?
如何在 Django 中设置 HttpOnly cookie?
是否值得努力防止 XSS?
php - 使用 PHP 在一个实例中进行多个会话?
我有一个项目,我想在一个浏览器中创建两个会话 cookie。第一个会话将唯一标识一个人,第二个会话将在用户之间共享会话内的事件。我一直在为此使用数据库,但希望在会话结束时数据消失。系统内没有登录。
除了创建 cookie 系统来复制功能之外,有没有办法做到这一点?
例如,我们将有两个会话 cookie:
name=someRandomUUID
和session=valueSharedBetweenUsers.
我不想name
与多个用户共享会话,但session
会话会。想法?