c# - 通过非安全通道加载内容

标签 c# asp.net asp.net-mvc security ssl

我有一个仅针对 HTTPS 配置的 ASP.NET MVC 站点。

此站点上的一个页面需要显示来自远程、未启用 SSL 的网站的内容。

我无法通过 ajax 加载内容,因为这意味着非安全内容与我的安全内容混合在一起,浏览器将指示该站点包含混合内容。

因此,我认为我可以使用 Web API 使用 HttpClient 类在服务器端加载内容,然后通过 AJAX 将其传送到客户端:

public async Task<string> GetNewsAsync()
{
    var newsFeed = WebConfig.GetAppSetting("NewsRssAddress");
    var feedContent = "";

    try
    {
        using (var client = new HttpClient())
        using (var response = await client.GetAsync(newsFeed))
        using (var content = response.Content)
        {                                 
            feedContent = await content.ReadAsStringAsync();
        }
    }
    catch(Exception ex)
    {
        Mailer.SendError(ex);
        throw;
    }
    return feedContent;
}

但是,这仍然会抛出 WebException:

System.Net.WebException:基础连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。

不要这样做!
输入此内容后,我开始认为我正在尝试做的只是错误做法和错误,并且没有办法将不安全的内容加载到安全站点中,有点真的很有道理,我的意思是,内容可以是任何东西!

碰巧,我尝试从中加载的网站是我公司的另一个网站,只是另一个网站上没有 SSL。

据我所知,这些是我的选择:

  1. 不要加载内容。期间。
  2. 尝试为其他网站获取 SSL 证书。
  3. 处理混合内容警告(我不会这样做!)

想法?

最佳答案

我认为您在其中混淆了一些概念。在您的网站上实现 SSL 就是为了向访问者保证您就是您所说的那个人,并且他们与 的通信在传输过程中已加密。 SSL 实现不保证站点内容的完整性;它可能是完全恶意的,因为您有一个 SQL 注入(inject)漏洞,并且您在您的站点上打开匿名 FTP 以进行引导。它充满了恶意软件和山羊图片,但 SSL 仍然完全按照它的意思 - 通过连接安全地提供服务!

页面内容的填充方式与您通过 HTTPS 提供服务的方式无关。您绝对可以在服务器端从通过 HTTPS 请求的资源发出 HTTP 请求。在这里试一试:https://asafaweb.com

你是否应该是另一个问题;您必须假设外部资源请求可能会被拦截(或者站点可能会独立于传输层而受到损害)并且您希望在重新显示内容之前应用适当的白名单和内容验证。

关于c# - 通过非安全通道加载内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157648/

相关文章:

c# - 扩展wpf的功能

c# - 使用 UI 控件的单元测试方法

c# - 如何创建可插入的 ASP.Net 网站?

c# - 等待 ClientScript.RegisterStartupScript 完成

c# - 如何在 ASP.NET MVC Razor 中有条件地显示字段?

asp.net-mvc - ASP.NET MVC RouteValueDictionary 和复杂对象

c# - 运算符 '==' 不能应用于操作数 'method group' 或 'string'

c# - 保持文件打开,当应用程序崩溃时不要丢失数据

c# - XSLT 选择模板

asp.net - GridView 中的新行