2013-03-19 79 views
0

如何检测在WebView中显示包含非SSL资产的SSL URL的任何尝试?就像浏览器给你一个混合的SSL警告。iOS UIWebView检测混合SSL内容

我在UIWebViewUIWebViewDelegate上看不到任何明显的属性。我可以继承NSURLProtocol,并以某种方式将非SSL连接传回给UIWebView。有没有更简单的方法来做到这一点?

+0

想要阻止非SSL资产? – Hejazi 2013-03-19 18:03:45

+0

@Hejazi他可能想警告用户。一个典型的问题是您使用的是框架,您的URL看起来像HTTPS,但其中一个框架不是HTTPS,因此在查看主要URL时,用户可能认为对话是安全的,但实际上并非如此。如果您需要安全连接,最好确保关键内容的安全。 – Rob 2013-03-19 18:05:56

+0

我需要将事实传回WebView级别 – russau 2013-03-19 18:06:43

回答

1

一个解决方案是创建自定义URL缓存并将其设置为默认值,以便您可以捕获所有HTTP请求,然后您可以检查混合SSL内容。

下面是一个例子:

@interface MonitoringURLCache : NSURLCache 
@end 

@implementation MonitoringURLCache 
- (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest *)request { 
    NSURL *requestURL = [request URL]; 
    NSURL *pageURL = [request mainDocumentURL]; 

    if ([[pageURL scheme] isEqualToString:@"https"] && [[requestURL scheme] isEqualToString:@"http"]) { 
     NSLog(@"Non safe resource: %@ referenced from page: %@", requestURL, pageURL); 
    } 

    return [super cachedResponseForRequest:request]; 
} 
@end 

/// Register your custom cache 
MonitoringURLCache *cache = [[MonitoringURLCache alloc] init]; 
[NSURLCache setSharedURLCache:cache]; 

/// Make a request to a website with mixed SSL content 
NSURL *url = [NSURL URLWithString:@"https://some-website-with-mixed-ssl-content/"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webview loadRequest:request]; 
+0

这听起来与问题中的NSURLProtocol概念类似。我怎么能把这个回传给WebView?在MonitoringURLCache内部,我不会有关于发起some-website-with-mixed-ssl-content请求的上下文。也许我可以找到一个referer头部将它们拼凑起来。 – russau 2013-03-19 18:46:22

+0

您可以从'[request mainDocumentURL]'知道网站的URL。 – Hejazi 2013-03-19 18:51:06

+0

oooo,https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/Reference/Reference.html#//apple_ref/occ/instm/NSURLRequest/mainDocumentURL。我喜欢。 – russau 2013-03-19 19:03:27