]> git.saurik.com Git - cydia.git/commitdiff
Block evil attempts to redirect to the App Store.
authorJay Freeman (saurik) <saurik@saurik.com>
Thu, 30 Oct 2014 12:19:26 +0000 (05:19 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 30 Oct 2014 12:19:26 +0000 (05:19 -0700)
CyteKit/WebViewController.h
CyteKit/WebViewController.mm

index 96186c1697f8b09a22d75efcdbe8bb4fdbb2f5a5..24832242f4b25e0b8c139a38c24d1c83e3b7576b 100644 (file)
@@ -56,6 +56,7 @@
     bool ready_;
 
     _transient NSNumber *sensitive_;
+    _H<NSURL> appstore_;
 
     _H<NSString> title_;
     _H<NSMutableSet> loading_;
index 7d91177f9fee707b11557902274f29f1da966393..f1448e1a22c6591cc612bf66543241276eaaf1fc 100644 (file)
@@ -461,10 +461,29 @@ float CYScrollViewDecelerationRateNormal;
     NSLog(@"decidePolicyForNavigationAction:%@ request:%@ %@ frame:%@", action, request, [request allHTTPHeaderFields], frame);
 #endif
 
+    NSURL *url(request == nil ? nil : [request URL]);
+    if ([[url scheme] isEqualToString:@"itms-appss"] || [[url absoluteString] hasPrefix:@"https://itunes.apple.com/app/"]) {
+        appstore_ = url;
+
+        UIAlertView *alert = [[[UIAlertView alloc]
+            initWithTitle:UCLocalize("APP_STORE_REDIRECT")
+            message:nil
+            delegate:self
+            cancelButtonTitle:UCLocalize("CANCEL")
+            otherButtonTitles:
+                UCLocalize("ALLOW"),
+            nil
+        ] autorelease];
+
+        [alert setContext:@"itmsappss"];
+        [alert show];
+
+        [listener ignore];
+        return;
+    }
+
     if ([frame parentFrame] == nil) {
         if (!error_) {
-            NSURL *url(request == nil ? nil : [request URL]);
-
             if (request_ != nil && ![[request_ URL] isEqual:url] && ![self allowsNavigationAction]) {
                 if (url != nil)
                     [self pushRequest:request forAction:action asPop:NO];
@@ -734,6 +753,13 @@ float CYScrollViewDecelerationRateNormal;
 
         challenge_ = nil;
 
+        [alert dismissWithClickedButtonIndex:-1 animated:YES];
+    } else if ([context isEqualToString:@"itmsappss"]) {
+        if (button == [alert cancelButtonIndex]) {
+        } else if (button == [alert firstOtherButtonIndex]) {
+            [delegate_ openURL:appstore_];
+        }
+
         [alert dismissWithClickedButtonIndex:-1 animated:YES];
     } else if ([context isEqualToString:@"submit"]) {
         if (button == [alert cancelButtonIndex]) {