在c#中发送到表单-传递防伪造令牌

本文关键字:伪造 令牌 表单 | 更新日期: 2023-09-27 18:10:40

我想通过我的c#应用程序发布一个表单。

我的问题是给定的令牌无效,post失败。

当我查看浏览器并读取GET响应时,它给出了正确的令牌。我试图在我的应用程序中做同样的事情,但由于某种原因,我得到的渲染令牌无效。

我想从服务器获得第一个实际的获取,以获得第一个表单数据。我做错了吗?

   HttpWebRequest req = (HttpWebRequest)WebRequest.Create(linkToArticle);
   req.Credentials = CredentialCache.DefaultCredentials;
   HttpWebResponse response = (HttpWebResponse)req.GetResponse();
   Stream receiveStream = response.GetResponseStream();
   StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
   string rawHtml = readStream.ReadToEnd();
   string token = getToken(rawHtml);
   response.Close();
   readStream.Close();
    var loginData = new NameValueCollection();
    loginData.Add("__RequestVerificationToken", token);
    loginData.Add("cbTerms", "on");
    Console.WriteLine("token: "+ token);
    Console.WriteLine("id: "+ id);

    client.UploadValues("/Form/?aid="+id, "POST", loginData);

在c#中发送到表单-传递防伪造令牌

您还需要一个名为__RequestVerificationToken的cookie,其中包含令牌值。这可以确保发布表单的用户就是显示表单的用户。

你可以在这篇文章中阅读更多关于这个过程的信息:http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

这篇文章展示了如何实现你想要的:

http://adam.kahtava.com/journal/2009/11/25/what-are-anti-cross-site-request-forgery-tokens-and-what-are-they-good-for/