Thanks for asking, Tommy.  Shazron’s original security caveat was:
"Any backgrounded app can potentially access this local web server when
your app is running.”

My PR made 2 changes:
1. restrict requests to localhost
2. provide for and require that a security token be included in the request

I needed to update the security caveat as part of the PR, but I didn’t
want to oversell the fix!
Up until now, I thought localhost packets worked just like any other
packets and would be visible to a network sniffer.
However, after reading your question and doing a little searching, it
seems that is incorrect.
From http://en.wikipedia.org/wiki/Localhost#Name_resolution:

"The processing of any packets sent to a loopback address is implemented
in the link layer of the TCP/IP stack. Such packets are never delivered to
any network interface controller (NIC) or device driver"

I guess we can drop that sentence from the security caveat.
I’ll submit a PR.

Tony

On 11/19/14, 7:30 PM, "Shazron" <shaz...@gmail.com> wrote:

>I'm not sure - Tony wrote that part maybe he can explain the intricacies.
>
>On Wed, Nov 19, 2014 at 4:23 PM, tommy-carlos williams
><to...@devgeeks.org>
>wrote:
>
>> Shazron,
>>
>> I just noticed this in the README for the plugin:
>>
>> "However, since requests are made over http, your app's activity may be
>> visible to others on the name wi-fi network.”
>>
>> Is this actually true? Why would traffic to localhost leave the device
>>and
>> be visible over the wifi?
>>
>>
>>
>> --
>> tommy-carlos williams
>>
>> On 20 November 2014 at 08:18:28, Homer, Tony (tony.ho...@intel.com)
>>wrote:
>>
>> Ugh. Thanks for the additional information, Shazron.
>>
>> I had previously proposed adding a hook (by which I meant a delegate
>> method) to CDVPluginResult (that would be called from -
>> (CDVPluginResult*)initWithStatus:(CDVCommandStatus)statusOrdinal
>> message:(id)theMessage) so that LocalWebServer could (blindly) detect
>>and
>> transform urls.
>>
>> It seems like it would help with this case, but not be generally useful
>> for anything else…
>>
>> Tony
>>
>> On 11/19/14, 3:23 PM, "Shazron" <shaz...@gmail.com> wrote:
>>
>> >Ideally a general solution like you proposed should work, but I forgot
>>to
>> >mention that in this case, since we are talking about WKWebView, we
>>can't
>> >use NSURLProtocol since it is not supported in that framework [1][2]
>> >
>> >The only other general way I can see is to require explicit support in
>> >plugins, they may have to call something in the
>> >commandDelegate/viewController to transform a url, that can be set by
>> >another plugin, in this case LocalWebServer (my revised proposal was a
>> >'push' this is a 'pull').
>> >
>> >
>> >[1] https://issues.apache.org/jira/browse/CB-7049
>> >[2] http://www.openradar.me/18492325
>> >
>> >On Wed, Nov 19, 2014 at 12:00 PM, Homer, Tony <tony.ho...@intel.com>
>> >wrote:
>> >
>> >> If we are just talking about CB-8032, then I can see that this
>>approach
>> >>is
>> >> cleaner for the file plugin.
>> >>
>> >> Regarding local web server plugin in general - what about other
>>plugins
>> >> such as camera?
>> >> Doesn¹t there need to be a general solution that will provide
>> >> compatibility between local web server plugin and any plugin that
>> >>returns
>> >> a file protocol URL?
>> >>
>> >> Tony
>> >>
>> >> On 11/19/14, 12:19 PM, "Shazron" <shaz...@gmail.com> wrote:
>> >>
>> >> >I commented on Ian's comment on CB-8032:
>> >> >
>> >>
>> >>
>> 
>>https://issues.apache.org/jira/browse/CB-8032?focusedCommentId=14216403&p
>> >>a
>> >>
>> 
>>>>>ge=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#co
>>>>>mm
>> >>>en
>> >> >t-14216403
>> >> >
>> >> >My goal was to have a loose coupling of this functionality (CDVFile
>> >>need
>> >> >not know about LocalWebServer at all) -- and Ian's comment of this
>> >>change
>> >> >is that would impact all CDVFileSystem instances makes this not an
>> >>ideal
>> >> >solution, what if you have two Cordova WebView instances, etc.
>> >> >
>> >> >My revised proposal requires CDVFileSystem to have a delegate that
>>can
>> >>be
>> >> >set. Any class can set it to override the nativeURL behaviour, and
>> >> >CDVFileSystem will call this method in the delegate if available. It
>> >> >achieves the same goal without the potentially undefined behaviour
>>of
>> >>an
>> >> >Obj-C Category.
>> >> >
>> >> >The LocalWebServer gets the currently installed File plugin,
>>enumerates
>> >> >all
>> >> >available filesystems, and sets this delegate on each, to its own
>> >> >implementation.
>> >> >
>> >> >Tony - I think this is approach is cleaner, and is more
>>maintainable.
>> >> >
>> >> >On Wed, Nov 19, 2014 at 6:20 AM, Ian Clelland
>><iclell...@chromium.org>
>> >> >wrote:
>> >> >
>> >> >> On Tue Nov 18 2014 at 2:00:34 PM Jesse <purplecabb...@gmail.com>
>> >>wrote:
>> >> >>
>> >> >> > Shaz's solution has less impact and seems more elegant.
>> >> >> >
>> >> >> > // if ([self respondsToSelector:@selector(nativeFullPath:)]) {
>> >> >> >
>> >> >> > If no-one ( generically ) has provided the nativeFullPath
>>method,
>> >>then
>> >> >> use
>> >> >> > it as is, otherwise call it.
>> >> >> > No need for any (direct) dependency between File + LocalServer.
>> >> >> >
>> >> >>
>> >> >> My first instinct, looking at the code, was that it was wrong,
>> >>exactly
>> >> >> because there *is* a dependency. You don't normally add code to a
>> >>base
>> >> >> class to change its behaviour when there is a category defined on
>>it.
>> >> >> Normally that goes the other way: when you add a category to a
>>base
>> >> >>class,
>> >> >> all of the code that's relevant to that category is *in the
>> >>category*,
>> >> >>and
>> >> >> the base class needs to know nothing at all about it, including
>>its
>> >> >> existence.
>> >> >>
>> >> >> As I said in the PR, it may be that this really is the cleanest
>>and
>> >>best
>> >> >> way to go forward with this; I just wanted to have this discussion
>> >>and
>> >> >> figure it out with the community before committing to any
>> >> >> hard-to-change-later technical debt. It does become an API
>>surface,
>> >>and
>> >> >>we
>> >> >> will have to maintain whatever we adopt.
>> >> >>
>> >> >> Ian
>> >> >>
>> >> >>
>> >> >> >
>> >> >> > @purplecabbage
>> >> >> > risingj.com
>> >> >> >
>> >> >> > On Tue, Nov 18, 2014 at 10:42 AM, Andrew Grieve
>> >><agri...@chromium.org
>> >> >
>> >> >> > wrote:
>> >> >> >
>> >> >> > > Having the localserver plugin add behaviour to file plugin
>>feels
>> >> >>like
>> >> >> the
>> >> >> > > dependency is in the wrong direction to me.
>> >> >> > >
>> >> >> > > How about having CDVFile.m do something like:
>> >> >> > >
>> >> >> > > CDVPlugin* p = [commandDelegate
>> >>getCommandInstance:@"LocalServer"];
>> >> >> > > if (p != nil) {
>> >> >> > > nativeURL = [p transformURL:nativeURL]; // do some local
>> >> >>declaration
>> >> >> to
>> >> >> > > make this not complain about unrecognized selector
>> >> >> > > }
>> >> >> > >
>> >> >> > > Would probably also need an "untransformURL" to go the other
>> >> >>direction
>> >> >> as
>> >> >> > > well.
>> >> >> > >
>> >> >> > > On Tue, Nov 18, 2014 at 12:05 AM, Shazron <shaz...@gmail.com>
>> >> wrote:
>> >> >> > >
>> >> >> > > > Filed https://issues.apache.org/jira/browse/CB-8032 with
>>pull
>> >> >> request
>> >> >> > > > included.
>> >> >> > > >
>> >> >> > > > On Mon, Nov 17, 2014 at 2:47 PM, Shazron <shaz...@gmail.com>
>> >> >>wrote:
>> >> >> > > >
>> >> >> > > > > Sorry I should have looked into the File API code first
>>(no
>> >> >> > JavaScript
>> >> >> > > > > changes, that would not work).
>> >> >> > > > >
>> >> >> > > > > Essentially I need to "override" this line from my plugin:
>> >> >> > > > >
>> >> >> > > >
>> >> >> > > https://github.com/apache/cordova-plugin-file/blob/
>> >> >> > 82f803ea0d61cde051dcffd27b21dc0ed92a0fdf/src/ios/
>> >> >> > CDVAssetLibraryFilesystem.m#L74
>> >> >> > > > > (plus the CDVLocalFileSystem equivalent).
>> >> >> > > > >
>> >> >> > > > > Since Obj-C categories can't really "override" methods
>> >>(behavior
>> >> >> > > > > undefined), and I don't want to do some runtime swap
>> >> >>implementation
>> >> >> > > > voodoo,
>> >> >> > > > > I would replace the line above with something like:
>> >> >> > > > >
>> >> >> > > > > NSString* nativeURL = [NSString stringWithFormat:@
>> >> >> > > > > "assets-library:/%@",fullPath];
>> >> >> > > > > if ([self respondsToSelector:@selector(nativeFullPath:)])
>>{
>> >>//
>> >> >> some
>> >> >> > > > > unique selector name perhaps
>> >> >> > > > > nativeURL = [self nativeFullPath:fullPath]; // this code
>> >> >>won't
>> >> >> > > > > compile, pseudo-code for now. Will call my category method
>> >> >>defined
>> >> >> in
>> >> >> > > my
>> >> >> > > > > plugin for CDVAssetLibraryFileSystem
>> >> >> > > > > }
>> >> >> > > > > dirEntry[@"nativeURL"] = nativeURL;
>> >> >> > > > >
>> >> >> > > > > Backwards compatible.
>> >> >> > > > >
>> >> >> > > > >
>> >> >> > > > > On Mon, Nov 17, 2014 at 1:44 PM, Shazron
>><shaz...@gmail.com>
>> >> >> wrote:
>> >> >> > > > >
>> >> >> > > > >> Local Web Server Checklist:
>> >> >> > > > >> 1. We have random port usage
>> >> >> > > > >> 2. We have the token/cookie check
>> >> >> > > > >> 3. We have the localhost check
>> >> >> > > > >> 4. The app is now installed under
>> >>http://localhost:RANDOM_PORT
>> >> >> /www/
>> >> >> > > > >>
>> >> >> > > > >> It'll be easy (relatively) to add support for:
>> >> >> > > > >> http://localhost:RANDOM_PORT/asset-library/
>> >> >> > > > >> http://localhost:RANDOM_PORT/file-system/
>> >> >> > > > >>
>> >> >> > > > >> The only issue now is changing FileEntry.toURL(). I'm
>> >>thinking
>> >> >>of
>> >> >> > some
>> >> >> > > > >> runtime 'magic' in the local web server where it detects
>>the
>> >> >>File
>> >> >> > > > plugin,
>> >> >> > > > >> and change the implementation of FileEntry.toURL() (or
>> >>through
>> >> >> > > injecting
>> >> >> > > > >> JavaScript, probably easier).
>> >> >> > > > >>
>> >> >> > > > >>
>> >> >> > > > >> On Wed, Oct 29, 2014 at 5:11 PM, Andrew Grieve <
>> >> >> > agri...@chromium.org>
>> >> >> > > > >> wrote:
>> >> >> > > > >>
>> >> >> > > > >>> We could restrict access to the webserver by stuffing a
>> >>cookie
>> >> >> into
>> >> >> > > the
>> >> >> > > > >>> webview with an access token, then have the server just
>> >>500 on
>> >> >> any
>> >> >> > > > >>> request
>> >> >> > > > >>> missing the cookie. We should also be able to restrict
>> >> >>external
>> >> >> > > > requests
>> >> >> > > > >>> just by listening on 127.0.0.1 instead of 0.0.0.0
>>(doesn't
>> >> >>look
>> >> >> > > > >>> like GCDWebServer supports this, but we can hack it in).
>> >> >> > > > >>>
>> >> >> > > > >>> The problem of port conflicts is annoying though. Maybe
>>we
>> >>try
>> >> >> > random
>> >> >> > > > >>> ports
>> >> >> > > > >>> until one works? Is there any need to use the same port
>>for
>> >> >> > multiple
>> >> >> > > > >>> runs?
>> >> >> > > > >>>
>> >> >> > > > >>> The CORS thing is sad, because it also means things like
>> >> >>Camera
>> >> >> > > plugin
>> >> >> > > > >>> will
>> >> >> > > > >>> be broken (can't use resulting URL in <img>).
>> >> >> > > > >>>
>> >> >> > > > >>> Although we might just do (this is different than the
>> >>current
>> >> >> > mapping
>> >> >> > > > in
>> >> >> > > > >>> the plugin):
>> >> >> > > > >>> http://localhost:RANDOM_PORT/www
>> >> >> > > > >>> http://localhost:RANDOM_PORT/asset-library
>> >> >> > > > >>> http://localhost:RANDOM_PORT/file-system
>> >> >> > > > >>>
>> >> >> > > > >>> to proxy the three locations.
>> >> >> > > > >>>
>> >> >> > > > >>> This also means we can't use FileEntry.toURL() and have
>>it
>> >> >>work,
>> >> >> > > unless
>> >> >> > > > >>> toURL returns
>>http://localhost:RANDOM_PORT/file-system/...
>> >> >> Maybe
>> >> >> > > > >>> that's
>> >> >> > > > >>> fine?
>> >> >> > > > >>>
>> >> >> > > > >>>
>> >> >> > > > >>> I don't think it's weird that an app will need to
>>support
>> >> >> WKWebView
>> >> >> > > on
>> >> >> > > > >>> some
>> >> >> > > > >>> OS versions, and UIWebView on others. That's already the
>> >>case
>> >> >>to
>> >> >> > > > support
>> >> >> > > > >>> iOS 7.
>> >> >> > > > >>>
>> >> >> > > > >>>
>> >> >> > > > >>>
>> >> >> > > > >>> On Wed, Oct 29, 2014 at 6:22 PM, Shazron
>> >><shaz...@gmail.com>
>> >> >> > wrote:
>> >> >> > > > >>>
>> >> >> > > > >>> > This does not preclude using the file url API
>>function I
>> >> >> suppose.
>> >> >> > > > >>> Here's a
>> >> >> > > > >>> > flowchart on how I think it would work:
>> >> >> > > > http://i.imgur.com/zq4zreN.png
>> >> >> > > > >>> >
>> >> >> > > > >>> >
>> >> >> > > > >>> > On Wed, Oct 29, 2014 at 2:48 PM, Tommy Williams <
>> >> >> > > to...@devgeeks.org>
>> >> >> > > > >>> > wrote:
>> >> >> > > > >>> >
>> >> >> > > > >>> > > This whole thing reeks of sadness and pain.
>> >> >> > > > >>> > >
>> >> >> > > > >>> > > The security implications of this will have to be
>> >> >>considered
>> >> >> > very
>> >> >> > > > >>> > > carefully.
>> >> >> > > > >>> > > On 29 Oct 2014 16:40, "Shazron" <shaz...@apache.org>
>> >> >>wrote:
>> >> >> > > > >>> > >
>> >> >> > > > >>> > > > ## What We Know So Far
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > 1. Because of the file:// url loading bug, we
>> >>couldn't
>> >> >> > support
>> >> >> > > > the
>> >> >> > > > >>> > > > WKWebView in the iOS 8 GM release. It has since
>>been
>> >> >>fixed,
>> >> >> > for
>> >> >> > > > >>> release
>> >> >> > > > >>> > > > post iOS 8.1 (not sure when), through a new
>>WKWebView
>> >> >>API
>> >> >> > > > function
>> >> >> > > > >>> (
>> >> >> > > > >>> > > > http://trac.webkit.org/changeset/174029/trunk)
>> >> >> > > > >>> > > > 2. The alternative is embedding a local web server
>> >>and
>> >> >> > serving
>> >> >> > > > >>> assets
>> >> >> > > > >>> > > from
>> >> >> > > > >>> > > > that
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > ## Abandon file:// url Loading API Method
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > My proposal is, we abandon the local file:// url
>> >>loading
>> >> >> > method
>> >> >> > > > in
>> >> >> > > > >>> (1)
>> >> >> > > > >>> > > > above, since it will create problems with support.
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > For example, if we support the new local file url
>> >> >>loading
>> >> >> API
>> >> >> > > > >>> function
>> >> >> > > > >>> > in
>> >> >> > > > >>> > > > iOS 8.2.0 (speculated) -- and a user is on 8.0.2,
>> >>what
>> >> >> then?
>> >> >> > > You
>> >> >> > > > >>> would
>> >> >> > > > >>> > > not
>> >> >> > > > >>> > > > have WKWebView support for that user, and you
>>would
>> >>use
>> >> >> > > UIWebView
>> >> >> > > > >>> > > instead.
>> >> >> > > > >>> > > > This will just be confusing, and leads to
>>problems.
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > With the embedded local web server method, you can
>> >> >>support
>> >> >> > > > **any**
>> >> >> > > > >>> > > version
>> >> >> > > > >>> > > > of iOS 8.x.
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > ## Embrace Embedded Local Web Server Method
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > I have a Cordova plugin that implements this, and
>>it
>> >> >>should
>> >> >> > > work
>> >> >> > > > >>> with
>> >> >> > > > >>> > > > cordova-ios 3.7.0:
>> >> >> > > > >>> > > > https://github.com/shazron/CordovaLocalWebServer
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > It dynamically updates the <access> tag value
>>when it
>> >> >> loads,
>> >> >> > > > >>> overriding
>> >> >> > > > >>> > > it
>> >> >> > > > >>> > > > to the actual location and port. Since it is a
>> >>plugin,
>> >> >>it
>> >> >> can
>> >> >> > > be
>> >> >> > > > >>> > > swappable
>> >> >> > > > >>> > > > (for whatever reason).
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > It does not solve the problem where any
>>backgrounded
>> >>app
>> >> >> can
>> >> >> > > > >>> access our
>> >> >> > > > >>> > > > local web server.
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > ## Future Steps
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > This plugin is already working in cordova-ios
>>3.7.0
>> >> >> > > (un-released,
>> >> >> > > > >>> up
>> >> >> > > > >>> > next
>> >> >> > > > >>> > > > for vote release).
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > The wkwebview branch:
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > 1. Needs be rebased
>> >> >> > > > >>> > > > 2. Needs to be re-tested
>> >> >> > > > >>> > > > 3. issues in CB-7043 that relate to the wkwebview
>> >>have
>> >> >>to
>> >> >> be
>> >> >> > > > >>> resolved
>> >> >> > > > >>> > > > 4. branch presented for review to other committers
>> >> >> > > > >>> > > > 5. resolve any comments and issues from (4)
>> >> >> > > > >>> > > > 6. wkwebview branch integrated into master
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > I will work on these items next after getting
>> >> >>cordova-ios
>> >> >> > 3.7.0
>> >> >> > > > >>> out.
>> >> >> > > > >>> > Any
>> >> >> > > > >>> > > > help is welcome.
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > ## Migration Issues
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > If you are migrating to WKWebView from UIWebView,
>>you
>> >> >>will
>> >> >> > lose
>> >> >> > > > >>> some
>> >> >> > > > >>> > > > functionality.
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > > > 1. No more whitelist feature (NSURLProtocol is not
>> >> >> supported
>> >> >> > in
>> >> >> > > > >>> > > WKWebView)
>> >> >> > > > >>> > > > 2. Your XmlHttpRequest calls now need to be CORS
>> >> >>compliant
>> >> >> > > (this
>> >> >> > > > is
>> >> >> > > > >>> > still
>> >> >> > > > >>> > > > true if loaded through a file:// url)
>> >> >> > > > >>> > > > 3. HTML5 offline application cache is not
>>available
>> >>in
>> >> >> > > WKWebView
>> >> >> > > > (
>> >> >> > > > >>> > > > https://devforums.apple.com/message/1060452)
>> >> >> > > > >>> > > >
>> >> >> > > > >>> > >
>> >> >> > > > >>> >
>> >> >> > > > >>>
>> >> >> > > > >>
>> >> >> > > > >>
>> >> >> > > > >
>> >> >> > > >
>> >> >> > >
>> >> >> >
>> >> >>
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
>> >> For additional commands, e-mail: dev-h...@cordova.apache.org
>> >>
>> >>
>>
>>  
>>B?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKCB?
>> ? [??X?昧?X?K  K[XZ[ ?  ]?][??X?昧?X?P 白? ??K?\ X? K????B???? Y  ] [??[
>> 栢[X[? ?  K[XZ[ ?  ]?Z [   白? ??K?\ X? K????B


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
For additional commands, e-mail: dev-h...@cordova.apache.org

Reply via email to