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:

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);

Please comment on the above solution, especially about the items in question: 
pick, agree, object and/or propose improvements.
Thank you,
Carol Szabo
_______________________________________________
webkit-qt mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-qt

Reply via email to