在iOS 9中禁用应用内浏览器的ATS?

时间:2015-08-19 23:00:13

标签: ios https uiwebview ios9

iOS 9引入了App Transport Security (ATS)以鼓励使用安全连接。

这很棒,但是如果我的应用程序有内置的Web浏览器,用户应该可以使用它连接到任何网站怎么办?例如,Facebook应用程序允许故事包含指向外部网站的链接。当用户点击这样的链接,而不是启动Safari时,它会启动应用内浏览器。

如果没有enabling the global NSAllowArbitraryLoads flag,我怎么能得到同样的行为?

我想要强制执行https使用的所有好处,但想要在我的内部浏览器中禁用此检查。在一个理想的世界中,Apple允许我在我的UIWebView上指定一个属性,以允许它加载不安全的URL,而不是全部或全部。我无法将每个域列入白名单,因为我不知道我的用户将加载哪些URL。我正在寻找与iOS 8兼容的解决方案。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您需要通过将NSAllowsArbitraryLoads设置为true来禁用ATS。如果您有可以支持HTTPS的特定网址(例如您在UIWebView之外的应用中使用的自己的服务器或API服务器),那么您可以创建例外并设置对于那些例外,NSExceptionsAllowsInsecureHTTPLoads为false

答案 1 :(得分:1)

而不是启用UIViewController *webBrowser; if ([SFSafariViewController class] != nil) { webBrowser = [[SFSafariViewController alloc] initWithURL:url]; } else { webBrowser = [[ABCWebBrowserController alloc] initWithURL:url]; } [self presentViewController:webBrowser animated:YES completion:nil]; ,更安全的解决方案是conditionally use SFSafariViewController,它允许任意加载。

如果该类存在,则显示它,否则,呈现您自己的UIViewController(包含UIWebView)。

<div class="input_fields_wrap">
    <div class="row">
        <div class="form-group col-xs-12 col-sm-3 form-group-sm">
            {!! form::label('first_name[]', 'First Name: ') !!}
            {{--{!! form::text('first_name[]', null, ['class' => 'form-control', 'placeholder' => 'First Name']) !!}--}}
            <input type="text" name="first_name[]" value="" class="form-control" placeholder="First Name">
        </div>
        <div class="form-group col-xs-12 col-sm-3 form-group-sm">
            {!! form::label('middle_name[]', 'Middle Name[s]: ') !!}
            {{--{!! form::text('middle_name[]', null, ['class' => 'form-control', 'placeholder' => 'Middle Name[s]']) !!}--}}
            <input type="text" name="middle_name[]" value="" class="form-control" placeholder="Middle Name[s]">
        </div>
        <div class="form-group col-xs-12 col-sm-3 form-group-sm">
            {!! form::label('last_name[]', 'Last Name: ') !!}
            {{--{!! form::text('last_name[]', null, ['class' => 'form-control', 'placeholder' => 'Last Name']) !!}--}}
            <input type="text" name=last_name[]" value="" class="form-control" placeholder="Last Name">
        </div>
    </div>
</div>
<button class="btn btn-success add_field_button"><i class="fa fa-user"></i> Add Another Person (Max 5)</button>