在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);
您还需要一个名为__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/