viewcontroller 使用 NULL baseURL 参数和 loadHTMLString baseURL 方法:数据定理

Posted

技术标签:

【中文标题】viewcontroller 使用 NULL baseURL 参数和 loadHTMLString baseURL 方法:数据定理【英文标题】:viewcontroller using a NULL baseURL argument with the loadHTMLString baseURL method : data theorem 【发布时间】:2016-06-29 14:49:34 【问题描述】:

我面临的问题是“MyViewcontroller 使用带有 loadhtmlString baseURL 方法的 NULL baseURL 参数:数据定理”- 我已经成功完成了我的任务并且一切正常。

问题出现在 OSWAP 安全扫描漏洞中,它显示上述错误。

我的代码 sn-p:-

  NSString *aHtmlString = kEmptyString;

    // Getting the bool from configuration plist
    NSString *thePlistPath = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"];
    NSDictionary *theURLdata = [[NSDictionary alloc] initWithContentsOfFile:thePlistPath];
    is

ServerFAQAvailable = [[theURLdata valueForKey:kIsServerFAQAvailableKey] boolValue];

if (one || two || three) 
   aHtmlString = [self loadFAQFor];
 else 
  aHtmlString = [self loadFAQForwithout];

NSURL *baseURL = [NSURL fileURLWithPath:thePlistPath];

[self.faqWebView loadHTMLString:aHtmlString baseURL:baseURL]; 

更新:

if (one || two || three) 
       aHtmlString = [self loadFAQFor];
     else 
      aHtmlString = [self loadFAQForwithout];
    
    NSURL *baseURL = [NSURL fileURLWithPath:@"about:blank"];

    [self.faqWebView loadHTMLString:aHtmlString baseURL:baseURL];

仍然显示扫描问题

【问题讨论】:

我将首先记录thePlistPath(可能还有theURLdata)的值,并验证您在thePlistPath 指向的位置确实有一个文件。如果你不这样做,那么[NSURL fileURLWithPath:thePlistPath]; 可能会返回 nil,theURLdata 也可能会返回 nil。 什么是eeyyii?请使用清晰的变量名,kConfigurationPlistNamekPlistFormType 的值是什么?这是否正确设置了 thePlistPath 的值还是 Nil ? @MostafaTorbjørnBerg 嗨,这是 loadFAQFore 中基于条件的变量,我正在构建 html .js 和 .css 文件 只有两天,我在接下来的 48 小时内有空。任何需要更多信息的人都可以随时询问。任何提示都会有帮助。 你试过在baseURL参数中传递[NSURL new]吗? 【参考方案1】:

问题在于baseURL: 参数。 html 字符串不需要 BaseURL,它通常用于相对链接。如果您要做的只是显示一些 html,您确定需要它吗?

标记的安全问题是有道理的(我的理解是粗略的):如果 webview 的 baseURL 设置为本地文件系统,那么通过该 webview 加载的页面(最终)可以访问本地资源。

尝试为 baseURL: 传递 nil 应该会消除此警告。

【讨论】:

Related url 是什么意思?能否请您提供详细信息 某种意义上的相对路径?...,这也是相对路径吧[NSURL fileURLWithPath:@"about:blank"] 您对提供相对路径有什么建议 @Spynet ("about:blank" --我不确定 UIWebView 是如何处理的。)无论如何,相对链接是相对于基本 URL 的。在普通互联网上,如果网页从“website.com/about”开始,则 BaseURL 将是 website.com,而相对链接将是“/services”——不需要完整地址。但是 URL 可以是文件和本地目录的基本 URL。在这种情况下,webview 获得了读取本地文件的特殊权限。如果该 html 链接到外部页面,则 UIWebView 仍将拥有该权限,并且(显然)该页面可以读取本地文件——这就是安全问题。 如果你想要相对的本地目录链接,为了解决安全问题,你可以实现 webview 委托并拦截点击的链接,重新创建完整的相对路径。如果您只想显示本地 html,则不需要基本 URL 并将其设置为 nil。【参考方案2】:

baseURL应该是[[NSBunld mainBunld] bunldPath],你可以这样试试..

NSString *path = [[NSBundle mainBundle]bundlePath];
NSString *htmlPath = [[NSBundle mainBundle] pathForResource:self.htmlName ofType:@"html"];
NSString *htmlContent = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:htmlContent baseURL:[NSURL fileURLWithPath:path]];

【讨论】:

最后我找到了正确的答案是 [NSURL URLWithString:@"about:blank"],谢谢各位的帮助

以上是关于viewcontroller 使用 NULL baseURL 参数和 loadHTMLString baseURL 方法:数据定理的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView 在从另一个 ViewController 调用的方法中为 null

为啥数据给我null?

如何重新显示 IsLoaded 的 ViewController

[rtsp @ 0x55ba1dae9200] UDP timeout, retrying with TCP的解决办法

代码规范

代码规范