]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Test URLs against blacklist also on PuSH subscriptions.
authorMikael Nordfeldth <mmn@hethane.se>
Wed, 26 Apr 2017 20:41:59 +0000 (22:41 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Wed, 26 Apr 2017 20:41:59 +0000 (22:41 +0200)
plugins/Blacklist/BlacklistPlugin.php
plugins/OStatus/actions/pushhub.php

index 1ef50940b275efdb6f5ffec2271a88d1eeb51035..1572903f2e544af32385d42e3d1f4080b406d0e9 100644 (file)
@@ -211,6 +211,15 @@ class BlacklistPlugin extends Plugin
         return true;
     }
 
+    public function onUrlBlacklistTest($url)
+    {
+        common_debug('Checking URL against blacklist: '._ve($url));
+        if (!$this->_checkUrl($url)) {
+            throw new ClientException('Forbidden URL', 403);
+        }
+        return true;
+    }
+
     /**
      * Helper for checking nicknames
      *
index be8076b75e3c4cb0b71b33bf6920eed3e86fa7bb..6dc22706c3e55746d58df09b0aea01123b9c1567 100644 (file)
@@ -199,7 +199,7 @@ class PushHubAction extends Action
 
     /**
      * Grab and validate a URL from POST parameters.
-     * @throws ClientException for malformed or non-http/https URLs
+     * @throws ClientException for malformed or non-http/https or blacklisted URLs
      */
     protected function argUrl($arg)
     {
@@ -207,13 +207,14 @@ class PushHubAction extends Action
         $params = array('domain_check' => false, // otherwise breaks my local tests :P
                         'allowed_schemes' => array('http', 'https'));
         $validate = new Validate();
-        if ($validate->uri($url, $params)) {
-            return $url;
-        } else {
+        if (!$validate->uri($url, $params)) {
             // TRANS: Client exception.
             // TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL.
             throw new ClientException(sprintf(_m('Invalid URL passed for %1$s: "%2$s"'),$arg,$url));
         }
+
+        Event::handle('UrlBlacklistTest', array($url));
+        return $url;
     }
 
     /**