Seite 1 von 1

Bugs im Chat

Verfasst: 24.06.2003 09:48
von Nalia
Hallo,

in unserem PHP-Chat (phpHeaven) soll es Bugs geben, die anscheinend einen Chat-Befehl zum Erlauschen von "geflüsterten" Chatmitteilungen ermöglichen - für die User ist das natürlich sehr blöd :-? .

Angeblich sollen diese Bugs in der export.php sein. Kann mir jemand dabei helfen, sie aufzuspüren und das Skript umzumodeln? Ich selbst habe keinerlei Ahnung von der Sache :cry: .

Code: Alles auswählen

<?php
// Get the names and values for vars sent to this script
if (isset($HTTP_GET_VARS))
{
	while(list($name,$value) = each($HTTP_GET_VARS))
	{
		$$name = $value;
	};
};

// Fix a security hole
if (isset($L) && !is_dir('./localization/'.$L)) exit();
	
require("config/config.lib.php");
require("localization/".$L."/localized.chat.php");
require("lib/database/".C_DB_TYPE.".lib.php");
require("lib/release.lib.php");
require("lib/clean.lib.php");

// Avoid server configuration for magic quotes
set_magic_quotes_runtime(0);

// Translate to html special characters, and entities if message was sent with a latin 1 charset
$Latin1 = ($Charset == "iso-8859-1");
function special_char($str,$lang)
{
	return ($lang ? htmlentities(stripslashes($str)) : htmlspecialchars(stripslashes($str)));
}

// ** Get messages **

// Define the SQL query (depends on values for ignored users list and on whether to display
// notification messages or not

$CondForQuery = "username NOT LIKE 'SYS %' AND ";
if (isset($Ign))
{
	$IgnoreList = "'".str_replace(",","','",addslashes(urldecode($Ign)))."'";
	$CondForQuery .= "username NOT IN (${IgnoreList}) AND ";
};
$CondForQuery .= "(address = ' *' OR (room = '$R' AND (address IN ('$U','') OR username = '$U')))";

$LimitForQuery = (isset($Limit) && $Limit != "") ? " LIMIT ".$Limit : "";

$DbLink = new DB;
$DbLink->query("SELECT m_time, username, latin1, address, message FROM ".C_MSG_TBL." WHERE ".$CondForQuery." ORDER BY m_time DESC".$LimitForQuery);

// Format and display new messages
if($DbLink->num_rows() > 0)
{
	$MessagesString = "";
	while(list($Time, $User, $Latin1, $Dest, $Message) = $DbLink->next_record())
	{
		$NewMsg = "<P CLASS=\"msg\">";
		if ($ST == 1) $NewMsg .= "<SPAN CLASS=\"time\">".date("H:i:s", $Time +  C_TMZ_OFFSET*60*60)."</SPAN> ";
		if ($Dest != " *")
		{
			$User = special_char($User,$Latin1);
			if ($Dest != "") $Dest = "]>[".htmlspecialchars(stripslashes($Dest));
			$NewMsg .= "<B>[${User}${Dest}]</B> $Message</P>";
		}
		else
		{
			$NewMsg .= " <SPAN CLASS=\"notify\">[".L_ANNOUNCE."] $Message</SPAN>";
		};

		// Separator between messages sent before today and other ones
		if (!isset($day_separator) && date("j", $Time +  C_TMZ_OFFSET*60*60) != date("j", time() +  C_TMZ_OFFSET*60*60))
		{
			$day_separator = "<P CLASS=\"msg\"><SPAN CLASS=\"notify\">--------- ".($O == 0 ? L_TODAY_UP : L_TODAY_DWN)." ---------</SPAN></P>";
		};

		$MessagesString = $NewMsg.((isset($day_separator) && $day_separator != "") ? "\n".$day_separator : "")."\n".$MessagesString;

		if (isset($day_separator)) $day_separator = "";		// Today separator already printed
	};
};

$DbLink->clean_results();
$DbLink->close();


if (isset($MessagesString) && $MessagesString != "")
{
	// Save messages to a file
	header("Content-Type: application/octetstream");
	header("Content-Disposition: attachement; filename=\"chat_save_".date("mdY").".htm\"");
	?>
	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
	<HTML dir="<?php echo(($Charset == "windows-1256") ? "RTL" : "LTR"); ?>">
	<HEAD>
		<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=<?php echo($Charset); ?>">
		<TITLE><?php echo(APP_NAME." - ".htmlspecialchars(stripslashes($R))." - ".date("F j, Y")); ?></TITLE>
		<STYLE>
		<?php
			if (isset($FontName) && $FontName != "")	// For the 'x-user-defined' charset
			{
				?>
				* {font-family: <?php echo($FontName); ?>, sans-serif;}
				<?php
			}
			elseif ($Charset == "iso-8859-1")
			{
				?>
				* {font-family: helvetica, arial, geneva, sans-serif;}
				<?php
			};
			?>
			BODY.mainframe
			{
				background-color: #CCCCFF;
				color: #000000;
				font-size: <?php echo($FontSize); ?>pt;
				font-weight: 400;
				margin: 5px;
			}

			A
			{
				text-decoration: underline;
				color: #FFFFFF;
				font-weight: 600;
			}

			A:hover, A:active
			{
				color: #FF9900;
				text-decoration: none;
			}

			.msg
			{
				margin-top: 0px;
				margin-bottom: 2px;
				margin-left: <?php echo($Charset == "windows-1256" ? "5" : "55"); ?>px;
				margin-right: <?php echo($Charset == "windows-1256" ? "55" : "5"); ?>px;
				text-indent: -50px;
			}

			.time
			{
				direction: ltr;
				unicode-bidi: embed;
				color: #000000;
				font-size: 8pt;
			}

			.notify
			{
				color: #666699;
				font-size: <?php echo($FontSize); ?>pt;
				font-weight: 600;
			}
		</STYLE>
	<HEAD>

	<BODY CLASS="mainframe">
	<?php
	echo($MessagesString);
	unset($MessagesString);
	?>
	</BODY>
	</HTML>
	<?php
	exit;
}
?>

Gruß,
Nalia

Verfasst: 24.06.2003 11:11
von Acid
Welche Version des Chats nutzt du ?

Verfasst: 24.06.2003 16:43
von Nalia
Ich habe Version 0.14.5.

Jetzt geht "das Gerücht" um, dass einfach die export.php3 gelöscht werden muss, um das Problem zu lösen.

Allerdings habe ich nur eine export.php - entspricht die wohl der export.php3? Wäre es empfehlenswert, sie zu löschen oder hängen da noch andere wichtige Funktionen dran? Leider kann ich nicht 'mal das Ergebnis prüfen, da im Moment nicht rauszukriegen ist, mit welchem Chatbefehl gelauscht werden konnte.

Verfasst: 24.06.2003 21:10
von Acid
Ja, mit export.php und export.php3 is das gleiche gemeint. Was für ´ne Funktion hat denn die export.php ? Wann, wie wird sie aufgerufen/genutzt ? Zur Not einfach sichern und dann löschen, wenn irgendwas fehlt, die Datei wieder hochladen. ;)

Verfasst: 24.06.2003 21:18
von Nalia
Ja klar ;) . Das Problem ist halt nur, dass ich nicht 'mal den Zustand vorher/nachher kenne, also selbst nicht überprüfen kann, ob sich mit dem Löschen was geändert hat :roll: .

Verfasst: 24.06.2003 21:22
von Acid
Wenn du weiterhin chatten (gegebenfalls administrieren) kannst, wird wohl die export.php ned unbedingt gebraucht. Dem Namen nach wird irgendwas damit "exportiert". :grin:
Du kannst ja ma deiner Quelle auf´n Zahn fühlen, wie man das "Lauschen" reproduzieren kann.

Verfasst: 25.06.2003 07:34
von Nalia
Acid hat geschrieben:Wenn du weiterhin chatten (gegebenfalls administrieren) kannst, wird wohl die export.php ned unbedingt gebraucht. Dem Namen nach wird irgendwas damit "exportiert". :grin:
Du kannst ja ma deiner Quelle auf´n Zahn fühlen, wie man das "Lauschen" reproduzieren kann.
Ok, ich versuch' das 'mal aus ihr rauszuquetschen :grin: .