【问题标题】:Tamper with http requests programmatically以编程方式篡改 http 请求
【发布时间】:2013-04-03 14:11:12
【问题描述】:

我需要登录网站,我可以通过 url.com/ssorequest?parameters=123 等 URL 来完成。如果这是在我登录的地址中输入并被重定向到门户网站。

现在我应该通过 http post 请求以编程方式执行此操作,但我无法让它工作,我被重定向到登录表单而不是门户,即我没有登录。

我使用 Fiddler 来找出这两种方法之间的区别。我发现一些幕后的 get-request 是不同的。浏览器的 get-requests 将 cookie 数据发送到服务器,而 fiddler 的 post-request 则不会。

当我使用 fiddler 重复浏览器第一次调用时,它也不会发送 cookie 数据。所以它只有在我通过浏览器窗口执行时才有效。除非我在 fiddler 中使用断点并篡改包含 cookie 数据的请求。

问:为什么它在使用 http post 和从 Fiddler 完成请求时的行为与浏览器不同?

问:有没有办法在我的 C# 应用程序中以编程方式篡改发出的请求,而无需编写我自己的 Fiddler 应用程序?

【问题讨论】:

    标签: c# httpwebrequest http-post


    【解决方案1】:

    您很可能遇到过anti-forgery cookie。它的工作原理是确保您使用第一次请求并在浏览器中加载的页面登录,并且 cookie 仅对一个请求有效,因此如果您运行相同的请求,提琴手将无法登录再次。

    使用 C#,您首先必须请求登录页面并在 cookie 容器中获取该页面提供的 cookie。下次,当您将页面连同数据一起发布时,您必须确保 cookie 与请求一起附加。

    编辑:

    第 1 步:浏览网站上的任何页面。这将启动会话。它还会为您提供会话 cookie。

    第 2 步:请求登录页面。将第一步中获得的 cookie 与登录页面一起发送,以便它可以识别会话。这一步很关键。在这个阶段,根据站点正在使用的安全系统,可能有两种情况之一。它要么将安全 cookie 与会话 cookie 一起发送,要么将在表单中添加一个隐藏变量以及一个用作安全令牌的值。确保您获得此令牌/cookie。

    第 2 步:将登录信息连同在第 1 步中获得的 cookie/令牌一起发布在登录页面(或表单操作所指向的任何页面)上。如果是令牌,请将其与登录信息一起包含在您的帖子数据中信息,或者如果是 cookie,请将其添加到请求中。

    【讨论】:

    • 但是如果我在 fiddler 中创建一个全新的 get-request(就像从浏览器中完成的那样),它应该像浏览器一样对待吗? (在提琴手的第二个 get-request 中,第一个请求没有任何痕迹)。它只是一个新请求,但由于某种原因它的行为不一样......
    • 只有一个区别。当您通过浏览器创建请求时,它会维护会话,而 fiddler 则不会。它不知道以前的请求。为了使用 fiddler 或从您的 C# 代码成功登录,重要的是您还要从之前获取登录页面的请求中发送 cookie。
    • 所以我去登录网站(在那里我得到一个会话 id cookie)。请求下一个 url 并发送 cookie。并请求第三个 url 并发送我从第二个请求得到的响应?问题在于第二个 url,它需要 url 中的会话 ID 以及包含相同 id 的 cookie。当我在提琴手中给它这个信息时,我得到一个回复​​,说它是一个非法的 SSL 参数......
    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 2011-03-10
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多