相关疑难解决方法(0)

浏览器不会在支付网关向我们网站的发布请求上设置 ASP.NET_SessionId cookie

我们在 Web 应用程序的支付过程中遇到了一个奇怪的问题,导致会话数据丢失。

在这个过程中,在我们的结帐页面用户被重定向到支付提供商的页面后,只要他/她在那里完成,就会被重定向回我们的网站(到我们指定的网址)。最后一个重定向是通过浏览器对支付提供商的 html 代码的评估完成的,该代码基本上由一个发布到我们网站的表单和几行在页面加载时发布该表单的 javascript 代码组成。此时浏览器发出 post 请求,但没有设置“ASP.NET_SessionId”cookie,该 cookie 存在于先前对完全相同的域(我们的应用程序的域)发出的请求中。更奇怪的是,它设置了我们使用的另一个名为“AcceptCookie”的 cookie。它只是简单地选择删除“ASP.NET_SessionId”cookie。

为了说明这种情况,我截取了一些屏幕截图。(在这些屏幕截图中,橙色和绿色矩形包含完全相同的值。)

  1. 这是当用户按下“签出”按钮时(向我们的应用程序)发出的请求。在此请求之后,用户被重定向到支付提供商的页面。

退房要求

  1. 这是用户在那里完成后由支付提供商提供的最后一页。如您所见,它只是一个简单的表单,会在页面加载时自动发布到我们的域中。

支付提供商的最终回应

  1. 但是这个发布请求不包括“ASP.NET_SessionId”cookie,这会导致获取新的会话 ID 和丢失以前的会话数据。同样,只缺少“ASP.NET_SessionId”,而不是另一个名为“AcceptCookie”的。

将用户带回我们网站的发布请求(在上一步中使用 javascript 制作)

最后我们认为在旧版本的浏览器上不会出现这个问题。在 Firefox 52 上它就像一个魅力,但在 Firefox 71 上会发生上述问题。

有任何想法吗?

注意:这是一个 ASP.NET MVC 应用程序,其 targetFramework="4.5.2"

祝你今天过得愉快。

asp.net cookies session

15
推荐指数
1
解决办法
6417
查看次数

如何在 ASP.NET 4.6.1 及以下版本中支持 SameSite Cookie

我使用 asp.net MVC 开发了一个网站

我们确实对站点进行了扫描,它给出了一个 CSRF,要求将站点 cookie 设置为同一站点。在 web.config 中尝试了下面的代码,但似乎它只能从 4.7.1 开始工作 -

我们有什么办法可以在 .Net 4.6 中实现这一点,非常需要帮助:)

  1. cookie 同一站点=“无”
<httpCookies cookieSameSite="None" />
Run Code Online (Sandbox Code Playgroud)
  1. 重写规则
<rewrite>
      <outboundRules>
        <rule name="Add SameSite" preCondition="No SameSite">
          <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
          <action type="Rewrite" value="{R:0}; SameSite=strict" />
          <conditions>
          </conditions>
        </rule>
        <preConditions>
          <preCondition name="No SameSite">
            <add input="{RESPONSE_Set_Cookie}" pattern="." />
            <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=strict" negate="true" />
          </preCondition>
        </preConditions>
      </outboundRules>
    </rewrite>
Run Code Online (Sandbox Code Playgroud)

cookies .net-4.6 .net-4.6.1 samesite

5
推荐指数
0
解决办法
3120
查看次数

谷歌浏览器版本 84.0.4147.125(官方版本)(64 位)在从第三方回调函数重定向时破坏应用程序会话

// 在使用第三方网关托管表单之前创建会话

public function ezi_test() {

        if (isset($_SESSION['form_data'])) {
            unset($_SESSION['form_data']);
        }

        $this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata_creation_bef','log_data'=>json_encode($_REQUEST)));
        parse_str($_REQUEST['data1'], $_REQUEST);
        $_SESSION['paynow']['tnc']['email_id'] = isset($_REQUEST['email_id']) ? $_REQUEST['email_id'] : '';
        $this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata_creation','log_data'=>json_encode($_REQUEST)));

        $_SESSION['form_data'] = $_REQUEST
}
Run Code Online (Sandbox Code Playgroud)

// 在第三方回调上检索会话 public function ezi_hosted_pa​​yment() {

    if (isset($_SESSION['ezi_hosted'])) {
        unset($_SESSION['ezi_hosted']);
    }

    if (isset($_SESSION['form_data'])) {
        $form_data = $_SESSION['form_data'];
        unset($_SESSION['form_data']);
    }

    $this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_log','log_data'=>json_encode($_REQUEST)));

    $this->common->maintain_log(array('collection_type'=>3,'org_id'=>'','log_path'=>'gateway_log/ezidebit/hosted_payment_formdata','log_data'=>json_encode($form_data)));

    $final = array_merge($_REQUEST, $form_data);
    $_SESSION['pg_response'] = $_REQUEST;
    $this->ezi_gateway_paynow_sub($final);
}
Run Code Online (Sandbox Code Playgroud)

php redirect google-chrome function callback

5
推荐指数
1
解决办法
1141
查看次数

如何在 ASP.NET 中将 SameSite cookie 属性减少回无?

为了避免 CSRF(跨站点请求伪造),大多数浏览器(自 2019 年末以来)自动考虑任何未明确定义 SameSite 属性的 cookie 将被视为 Lax,而不是之前的默认值 None。

最近(2020 年 2 月,自 Chrome 80 起)浏览器也忽略了定义 SameSite=None 且不安全的 cookie。

如何在我的 Web.config 中更改我的会话 cookie 以自动更改为无(以保持我的 SSO 集成工作)?

asp.net csrf samesite

4
推荐指数
1
解决办法
7573
查看次数