[webkit-qt] Sending XMLHttpRequests from pages loaded from local URLs to web sites.

laszlo.1.gombos at nokia.com laszlo.1.gombos at nokia.com
Fri Jan 15 15:17:36 PST 2010


Simon,

Carol & I discus this a bit more. 

"GlobalAccess" in the name is a bit misleading as one might relate it to granting all=global access to something, which is not the case.  I think this API works similarly to globalSettings() interface as it sets up access rules for to-be-created pages. I think this should be a static QWebSecurityOrigin function and static also signals that this is "global".

What about "static QWebSecurityOrigin::addAccessFromOrigin(..).". I do not really have an opinion on the arguments, both proposals (big long one and DomainAccess ) looks good to me.

Laszlo


-----Original Message-----
From: webkit-qt-bounces at lists.webkit.org [mailto:webkit-qt-bounces at lists.webkit.org] On Behalf Of Hausmann Simon (Nokia-D-Qt/Oslo)
Sent: Friday, January 08, 2010 11:40 AM
To: webkit-qt at lists.webkit.org
Subject: Re: [webkit-qt] Sending XMLHttpRequests from pages loaded from local URLs to web sites.


(Kenneth, Benjamin, Tor Arne, others interested in the API - please comment)

On Monday 21 December 2009 Szabo Carol (Nokia-D/Boston), wrote:
> While allowing pages loaded from one security origin to send  
> XMLHttpRequests to URLs located in a different security origin is 
> unsecure  for various reasons and therefore should be forbidden by 
> default, there  are legitimate use cases such as those of Offline 
> Applications and Widgets  that require this feature. WebKit internally 
> supports a static whiteList  that pairs source security origins with 
> ranges of allowed target security  origins. This whieList is privately 
> exposed by the QtWebKit Api for the  use of DumpRenderTree via
> 
> void QWEBKIT_EXPORT qt_drt_whiteListAccessFromOrigin(const QString&  
> sourceOrigin, const QString& destinationProtocol, const QString&  
> destinationHost, bool allowDestinationSubdomains); void QWEBKIT_EXPORT  
> qt_drt_resetOriginAccessWhiteLists();
> 
> Since the need for this Api appears to be broad and long term I 
> suggest  making it an official Api. In keeping with other QtWebKit 
> Apis, here is my
>  proposal:

I agree, we should try to make it public API.
 
> In the current QWebSecurity origin add the following members:
> 
> static QWebSecurityOrigin* create(const QUrl&);
>           -- This is needed because all current constructors of  
> QWebSecurity origin are private and none of them takes a Url as an  
> argument. -- Since this pattern is not used in Qt, probably adding a  
> public constructor would be more appropriate. Please vote on this.
> 
> typedef enum
> {
>      DontIncludeSubdomains,
>      IncludeSubdomains
> } SubdomainHandling;
> 
> void addToWhiteList(const QUrl&, SubdomainHandling subdomainHandling =  
> DontIncludeSubdomains); static void clearWhiteLists();
> 
>         -- These functions implement the currently hidden API.
>         -- There is a fine point about addToWhiteList: 
>  qt_drt_whiteListAccessFromOrigin ignores *. at the beginning of the  
> hostname, QUrl does not accept host names containing *. This 
> difference in  behavior must be accounted for in DumpRenderTree when 
> making the  transition and may be an issue for users, as code like 
> this  
> page->securityOrigin()->addToWhiteList(QUrl(http://*.google.com"),
>  QWebSecurityOrigin::IncludeSubDomains); has the most likely 
> unexpected  effect of whitelisting all http websites. an alternative 
> is to use a  version of add to whitelist that is closer to the ultimate implementation:
>  void addToWhiteList(const QString& scheme, const QString& host,  
> SubdomainHandling subdomainHandling = DontIncludeSubdomains);

With QUrl not accepting "*" in the host name I think it's clear that it's not the right data type to use.

I remember I opposed to a method that has many arguments, initially. But looking at the resulting code with a member method I'm inclined to change my opinion ;-). Let's compare:

frame->securityOrigin()->addToWhiteList("http", "*.google.com",
QWebSecurityOrigin::AllowSubDomains);

By looking at the code one might believe that this only affects the security 
origin of the frame, but the call has a global effect!

What about this API?

QWebSecurityOrigin::DomainAccess access;
access.source
access.scheme = "http";
access.domain = "*.google.com";
access.includeSubDomains = true;

QWebSecurityOrigin::addGlobalAccessFromOrigin("http://foo.webkit.org:80", 
access);


The alternative remains the big long one, just for comparision:

QWebSecurityOrigin::addGlobalAccessFromOrigin("http://foo.webkit.org:80", 
"http", "*.google.com", QWebSecurityOrigin::AllowAccessToSubDomains");


Granted, only few developers will ever write this...

Simon


More information about the webkit-qt mailing list