]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
*** Privacy Leak fixed: ***
authorRoland Haeder <roland@mxchange.org>
Fri, 22 May 2015 03:04:54 +0000 (05:04 +0200)
committerRoland Häder <roland@mxchange.org>
Sun, 29 Mar 2020 22:21:08 +0000 (00:21 +0200)
- isCurrentProfileInScope() is now more asked if the current profile is allowed
  to see the given notice. It was possible (with upstream master) to see private
  messages in RSS and (possible) JSON feeds

Signed-off-by: Roland Haeder <roland@mxchange.org>
actions/apisearchatom.php
actions/apisearchjson.php
actions/noticesearchrss.php
classes/Notice.php
classes/Notice_tag.php
lib/search_engines.php
plugins/TagCloud/lib/tagcloudsection.php

index e82ea39f9face9371998f6733e127f677e4fea65..9491dc95706f360b06a434a01d33ae910e05f2e0 100644 (file)
@@ -167,6 +167,12 @@ class ApiSearchAtomAction extends ApiPrivateAuthAction
 
         if ($this->cnt > 0) {
             while ($notice->fetch()) {
+                // Check scope of notice to current profile (including guests)
+                if (!$notice->isCurrentProfileInScope()) {
+                    // Not in scope
+                    continue;
+                }
+
                 ++$cnt;
 
                 if (!$this->max_id) {
index d49444369d8a0f2f02944519b7ebde5e3e4d0e2f..5703fd135d9a1fa3e1d7e2e8d573d706fc9f9f56 100644 (file)
@@ -118,7 +118,16 @@ class ApiSearchJSONAction extends ApiPrivateAuthAction
         $search_engine->limit(($this->page - 1) * $this->rpp, $this->rpp + 1);
         if ($search_engine->query($this->query)) {
             $cnt = $notice->find();
-            $this->notices = $notice->fetchAll();
+            foreach ($notice->fetchAll() as $testNotice) {
+                // Must be true
+                assert($testNotice instanceof Notice);
+
+                // Check scope of notice to current profile (including guests)
+                if ($testNotice->isCurrentProfileInScope()) {
+                    // In scope
+                    $this->notices[] = $testNotice;
+                }
+            } // END - if
         }
 
        $this->showJsonTimeline($this->notices);
index 2a5187b885dba53f440a1553fb1fc2eb3a261fb0..b6be76ca95b5db5e8c44c27d30dd48e2ea66e3f6 100644 (file)
@@ -63,7 +63,11 @@ class NoticesearchrssAction extends Rss10Action
 
         if ($cnt > 0) {
             while ($notice->fetch()) {
-                $notices[] = clone($notice);
+                // Check scope of notice to current profile (including guests)
+                if ($notice->isCurrentProfileInScope()) {
+                    // Is in scope
+                    $notices[] = clone($notice);
+                }
             }
         }
 
index 533d4c100c5b2df4879c478519e5af99d2483648..16b56e299cca6687210c27c426eb89d9997598d8 100644 (file)
@@ -3298,4 +3298,37 @@ class Notice extends Managed_DataObject
         return ($this->scope != Notice::SITE_SCOPE &&
                 $this->scope != Notice::PUBLIC_SCOPE);
     }
+
+    /**
+     * Checks whether the current profile is allowed (in scope) to see this notice.
+     *
+     * @return $inScope Whether the current profile is allowed to see this notice
+     */
+    public function isCurrentProfileInScope () {
+        // Check scope, default is allowed
+        $inScope = true;
+
+        //* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . '] this->tag=' . $this->tag . ',this->id=' . $this->id . ',this->scope=' . $this->scope);
+
+        // Is it private scope?
+        if ($this->isPrivateScope()) {
+            // 2) Get current profile
+            $profile = Profile::current();
+
+            // Is the profile not set?
+            if (!$profile instanceof Profile) {
+                // Public viewer shall not see a tag from a private dent (privacy leak)
+                //* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . '] Not logged in (public view).');
+                $inScope = false;
+            } elseif (!$this->inScope($profile)) {
+                // Current profile is not in scope (not allowed to see) of notice
+                //* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . '] profile->id=' . $profile->id . ' is not allowed to see this notice.');
+                $inScope = false;
+            }
+        }
+
+        // Return result
+        //* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . '] this->tag=' . $this->tag . ',this->weight=' . $this->weight . ',inScope=' . intval($inScope) . ' - EXIT!');
+        return $inScope;
+    }
 }
index 45788285b598edff4c64cea50118b908950f2fc4..4f7e6af409a508d40c1f562e9d6d2124c083a509 100644 (file)
@@ -108,21 +108,7 @@ class Notice_tag extends Managed_DataObject
         //* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . '] this->tag=' . $this->tag . ',notice->id=' . $notice->id . ',notice->scope=' . $notice->scope);
 
         // Is it private scope?
-        if ($notice->isPrivateScope()) {
-            // 2) Get current profile
-            $profile = Profile::current();
-
-            // Is the profile not set?
-            if (!$profile instanceof Profile) {
-                // Public viewer shall not see a tag from a private dent (privacy leak)
-                //* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . '] Not logged in (public view).');
-                $inScope = FALSE;
-            } elseif (!$notice->inScope($profile)) {
-                // Current profile is not in scope (not allowed to see) of notice
-                //* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . '] profile->id=' . $profile->id . ' is not allowed to see this tag.');
-                $inScope = FALSE;
-            }
-        }
+        $inScope = $notice->isCurrentProfileInScope();
 
         // Return result
         //* NOISY-DEBUG: */ common_debug('[' . __METHOD__ . ':' . __LINE__ . '] this->tag=' . $this->tag . ',this->weight=' . $this->weight . ',inScope=' . intval($inScope) . ' - EXIT!');
index 4ced45cac7b71266dfce3b8dd34dab120eab260a..dbdeeb65b2ffd7b51f7b333360a45d90f378124a 100644 (file)
@@ -95,7 +95,6 @@ class MySQLSearch extends SearchEngine
                     'OR'
                 );
             }
-            return true;
         } else if ('notice' === $this->table) {
 
             // Don't show imported notices
@@ -115,10 +114,11 @@ class MySQLSearch extends SearchEngine
                 );
             }
 
-            return true;
         } else {
             throw new ServerException('Unknown table: ' . $this->table);
         }
+
+        return true;
     }
 }
 
index 1ff973b9026bfc51865922af966d2b826be95171..9f7320f2de41d750c96da518299e5ab843e4efac 100644 (file)
@@ -64,6 +64,7 @@ class TagCloudSection extends Section
         $sum = 0;
 
         while ($tags->fetch() && ++$cnt <= TAGS_PER_SECTION) {
+            // Check scope of tag to current profile (including guests)
             if ($tags->isCurrentProfileInScope()) {
                 $tw[$tags->tag] = $tags->weight;
                 $sum += $tags->weight;