[ 
https://issues.apache.org/jira/browse/CB-1695?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13502029#comment-13502029
 ] 

Andrew Grieve commented on CB-1695:
-----------------------------------

Shaz - I'm a bit worried that this change will slow down the initial app start 
(having to load an extra webview in serial). Did you measure this?

I'm not sure I know a better way, but thought it's worth discussion at least :)

One option:
First CDVWebView - have no UA change
Other UIWebView - append "non-CDV" to the UA by leaving  NSUserDefaults set. 
Subsequent CDVWebViews - have GUID appended (or have them with no UA change, 
but GUID appended would allow per-webview whitelists)

-This won't work unless the Cordova webview is the first webview to be created. 
-Perhaps there's a way to detect if the app has created its own UIWebView 
before starting a Cordova one?
-E.g. Could go back to requiring the URLProtocol to be registered on app 
start-up so that it can look for Safari-like UAs passing by.


Another option:
Have only CDVWebViews have a modified UA, and just cache the UA in our own 
NSUserDefaults key. 
-This means slow start at first, but at least faster for other launches
-We'll have to invalidate this cached value if the UA ever changes... For OS 
upgrades for sure, but maybe also for locale changes?


Another option:
-Maybe there isn't a speed problem :)



One other thing I'm thinking about though - Requests made by plugins.
-1: We can: have plugins set the user-agent to the WebView's
-2: Have plugins explicitly check the whitelist before sending requests.

1: might be safer if we're worried about having the whitelist apply to 
redirects as well.


                
> [iOS]: CDVURLProtocol should not apply whitelist to non-Cordova view 
> controllers/requests
> -----------------------------------------------------------------------------------------
>
>                 Key: CB-1695
>                 URL: https://issues.apache.org/jira/browse/CB-1695
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: iOS
>    Affects Versions: 2.2.0
>         Environment: Xcode 4.5 / OS X 10.7.5 (Lion) / Commit 
> ef67dcf7bce56c69299bb89ab16c1803d0edd895
>            Reporter: Kevin Hawkins
>            Assignee: Shazron Abdullah
>             Fix For: 2.3.0
>
>
> Registered NSURLProtocol objects respond to NSURLRequests across an 
> application.  As such, CDVURLProtocol handles all requests that would pass 
> through any UIWebView in the application, and applies Cordova's whitelist 
> rules accordingly to each http(s) request.
> This is an unreasonable overreach of authority, in an app where Cordova is 
> only one component of the app.  Consider the case where I have my own 
> UIWebView (think ChildBrowser), and I want to load arbitrary web content.  
> This web content has no access to the Cordova sandbox on the device, and as 
> such should not be subject to the security restrictions that limit requests 
> to whitelisted/trusted hosts.
> The logic in [CDVURLProtocol canInitWithRequest:] that validates the view 
> controller against the global CDVViewController registry, for /!gap_exec 
> calls, should be extended to make the same check against http(s) calls, and 
> allow them without whitelist comparison for requests that originate outside 
> of any registered CDVViewController instances.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to