6

您可能首先会认为这是不可能的,因为 XSS 限制。但我正在尝试从托管 a 的应用程序访问此内容WebBrowser,而不是从站点中的 javascript 代码访问此内容。

我理解不可能也不应该通过非黑客手段从 javascript 访问此内容,因为这将是一个很大的安全问题。但是从托管WebBrowser. 如果我想强化我的应用程序用户的 Facebook 信息,我可以在其中Navigate("facebook.com")做任何我想做的事情。这是一个托管一个WebBrowser,而不是网页的应用程序。

此外,如果您使用 Google Chrome 访问任何包含 iFrame 的网页,该 iFrame 的来源位于另一个域中,然后右键单击其内容并单击“检查元素”,它将向您显示内容。更简单的是,如果您导航到另一个域中包含 iFrame 的任何网页,您将看到其内容。如果您可以在 上看到它WebBrowser,那么您应该能够以编程方式访问它,因为它必须位于内存中的某个位置。

有什么办法,不是来自 DOM 对象,因为它们似乎基于与 javascript 相同的引擎,因此受到 XSS 限制的限制,而是来自一些更底层的对象,例如MSHTMLor SHDocVw,来访问此文本?

4

2 回答 2

6

这对你有用吗?

foreach (HtmlElement elm in webBrowser1.Document.GetElementsByTagName("iframe"))
{
     string src = elm.GetAttribute("src");
     if (src != null && src != "")
     {
          string content = new System.Net.WebClient().DownloadString(src); //or using HttpWebRequest
          MessageBox.Show(content);
     }
}
于 2011-09-28T19:13:23.100 回答
0

您只需要一种从代码中请求内容的方法吗?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webRequest.URL);
request.UserAgent = webRequest.UserAgent;
request.ContentType = webRequest.ContentType;
request.Method = webRequest.Method;

if (webRequest.BytesToWrite != null && webRequest.BytesToWrite.Length > 0) {
    Stream oStream = request.GetRequestStream();
    oStream.Write(webRequest.BytesToWrite, 0, webRequest.BytesToWrite.Length);
    oStream.Close();
}

// Send the request and get a response
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

// Read the response
StreamReader sr = new StreamReader(resp.GetResponseStream());

// return the response to the screen
string returnedValue = sr.ReadToEnd();

sr.Close();
resp.Close();

return returnedValue;
于 2011-09-21T19:58:11.743 回答