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。
什么是ee
、yy
和ii
?请使用清晰的变量名,kConfigurationPlistName
和 kPlistFormType
的值是什么?这是否正确设置了 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
如何重新显示 IsLoaded 的 ViewController