Seite 1 von 1

Sicherheitsloch im Categorie Hirarchy Mod behoben

Verfasst: 01.05.2004 09:50
von Waagenbauer
Falls es jemanden interessiert:
Ich habe die Ursache des Problems (siehe HIER gefunden!

Der Fehler liegt in einem modifiziertem Code-Abschnitt in search.php.

Ursprunglich wird bei "get the object list" im modifiziertem Teil eine Liste Foren-IDs erzeugt, die vom User (Gast) gelesen werden dürfen. Sie wird dem $auth_sql hinzugefügt.

Bei der Ausgabe der Suchergebnisse werden aber so die Privaten Foren, die für Gäste gesperrt sind, mit ausgegeben.

Folgende Änderung habe ich vorgenommen:

$auth_sql wird zusätzlich eine Liste von Foren-IDs hinzugefügt, die NICHT gelesen werden dürfen.

In der SQL-Anweisung steht dann:
WHERE f.forum_id IN (zu durchsuchende Foren) AND f.forum_id NOT IN (zu ignorierende Foren)

Wenn es keine zu durchsuchenden Foren gibt, wird "No_searchable_forums" ausgegeben.

In search.php diesen Abschnitt ersetzen:

Code: Alles auswählen

//-- mod : categories hierarchy -------------------------------------------------------------------- 
//-- delete 
//      if ( $search_forum != -1 ) 
//      { 
//         $is_auth = auth(AUTH_READ, $search_forum, $userdata); 
// 
//         if ( !$is_auth['auth_read'] ) 
//         { 
//            message_die(GENERAL_MESSAGE, $lang['No_searchable_forums']); 
//         } 
// 
//         $auth_sql = "f.forum_id = $search_forum"; 
//      } 
//      else 
//      { 
//         $is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata); 
// 
//         if ( $search_cat != -1 ) 
//         { 
//            $auth_sql = "f.cat_id = $search_cat"; 
//         } 
// 
//         $ignore_forum_sql = ''; 
//         while( list($key, $value) = each($is_auth_ary) ) 
//         { 
//            if ( !$value['auth_read'] ) 
//            { 
//               $ignore_forum_sql .= ( ( $ignore_forum_sql != '' ) ? ', ' : '' ) . $key; 
//            } 
//         } 
// 
//         if ( $ignore_forum_sql != '' ) 
//         { 
//            $auth_sql .= ( $auth_sql != '' ) ? " AND f.forum_id NOT IN ($ignore_forum_sql) " : "f.forum_id NOT IN ($ignore_forum_sql) "; 
//         } 
//      } 
//-- add 
      // get the object list 
      $keys = array(); 
      $keys = get_auth_keys($search_where, true, -1, -1, 'auth_read'); 
      $s_flist = ''; 
      for ($i=0; $i < count($keys['id']); $i++) 
      { 
         if ( ($tree['type'][ $keys['idx'][$i] ] == POST_FORUM_URL) && $tree['auth'][ $keys['id'][$i] ]['auth_read'] ) 
         { 
            $s_flist .= (($s_flist != '') ? ', ' : '') . $tree['id'][ $keys['idx'][$i] ]; 
         } 
      } 
      if ($s_flist != '') 
      { 
         $auth_sql .= (( $auth_sql != '' ) ? " AND" : '') . " f.forum_id IN ($s_flist) "; 
      } 
//-- fin mod : categories hierarchy ----------------------------------------------------------------
Durch:

Code: Alles auswählen

//-- mod : categories hierarchy --------------------------------------------------------------------
//-- delete
//		if ( $search_forum != -1 )
//		{
//			$is_auth = auth(AUTH_READ, $search_forum, $userdata);
//
//			if ( !$is_auth['auth_read'] )
//			{
//				message_die(GENERAL_MESSAGE, $lang['No_searchable_forums']);
//			}
//
//			$auth_sql = "f.forum_id = $search_forum";
//		}
//		else
//		{
//			$is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata);
//
//			if ( $search_cat != -1 )
//			{
//				$auth_sql = "f.cat_id = $search_cat";
//			}
//
//			$ignore_forum_sql = '';
//			while( list($key, $value) = each($is_auth_ary) )
//			{
//				if ( !$value['auth_read'] )
//				{
//					$ignore_forum_sql .= ( ( $ignore_forum_sql != '' ) ? ', ' : '' ) . $key;
//				}
//			}
//
//			if ( $ignore_forum_sql != '' )
//			{
//				$auth_sql .= ( $auth_sql != '' ) ? " AND f.forum_id NOT IN ($ignore_forum_sql) " : "f.forum_id NOT IN ($ignore_forum_sql) ";
//			}
//		}
//-- add

		// get the object list
		$keys = array();
		$keys = get_auth_keys($search_where, true, -1, -1, 'auth_read');
		$s_flist = '';
		$i_flist = '';
		for ($i=0; $i < count($keys['id']); $i++)
		{	
			if ( ($tree['type'][ $keys['idx'][$i] ] == POST_FORUM_URL) && $tree['auth'][ $keys['id'][$i] ]['auth_read'] )
			{
				$s_flist .= (($s_flist != '') ? ', ' : '') . $tree['id'][ $keys['idx'][$i] ];
			}
			
			if ( ($tree['type'][ $keys['idx'][$i] ] == POST_FORUM_URL) && !$tree['auth'][ $keys['id'][$i] ]['auth_read'] )
			{
				$i_flist .= (($i_flist != '') ? ', ' : '') . $tree['id'][ $keys['idx'][$i] ];
			}
		}
		
		if ($s_flist != '')
		{
			$auth_sql .= (( $auth_sql != '' ) ? " AND" : '') . " f.forum_id IN ($s_flist) ";
		}
		else
		{
				message_die(GENERAL_MESSAGE, $lang['No_searchable_forums']);
		}
		
		if ($i_flist != '')
		{
			$auth_sql .= (( $auth_sql != '' ) ? " AND" : '') . " f.forum_id NOT IN ($i_flist) ";
		}
			
//-- fin mod : categories hierarchy ----------------------------------------------------------------

Verfasst: 01.05.2004 13:44
von unTouched
danke :D

Verfasst: 01.05.2004 13:53
von Leo Navis
Auch von mir ein Big THX
:D

Verfasst: 01.05.2004 14:33
von Leo Navis
Hey, könnte man das nicht wichtig machen??
Ist doch ziemlich wichtig, geht schließlich um ne Sicherheitslücke...

Verfasst: 06.12.2004 18:09
von supertom64
ich habe gerade die neueste phpbb + 1.52 installiert, leider ist der search bug immer noch vorhanden.
als gast kann man alle einträge durch search * sehen.
könnte man den fix nicht in die neuen versionen implementieren?
vielen dank
tom

Verfasst: 06.12.2004 18:16
von rabbit
hi,

wenn, dann ist das sache der autoren des phpBB plus @ www.phpbb2.de ;) (und die scheinen sich nicht arg 'drum zu scheren...)