Sicher?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Gast210225

Sicher?

Beitrag von Gast210225 »

Hallo,
ich programmiere im Moment an einem CMS, aber mit Sicherheitstechnischen sachen kenn ich mich leider nicht so gut aus... Habt ihr gute Links, wo alles erklärt wird?
Hier mal ein bisschen Code aus dem CMS:

Code: Alles auswählen

$mode = isset($HTTP_GET_VARS['mode']) ? trim($HTTP_GET_VARS['mode']) : '';

if ($mode == 'delete')
{
	$file = isset($HTTP_GET_VARS['file']) ? trim($HTTP_GET_VARS['file']) : '';

	$file = basename($file);

	if ( empty($file) )
	{
		message(1, $lang['no_file']);
		exit();
	}
	elseif ( !file_exists($path . 'images/' . $file) )
	{
		message(1, $lang['file_does_not_exist']);
		exit();
	}
	else
	{
		unlink($path . 'images/' . $file);
		message(1, $lang['file_deleted']);
	}
}
Der Code soll eine Datei aus den images/ Verzeichniss löschen. Seht ihr in dem Code Sicherheitslücken?


Danke schon mal,

Johannes
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag von larsneo »

bedenke, das $HTTP_GET_VARS['file'] z.b. auch "../../../etc/passwd" sein könnte ;-)
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

larsneo hat geschrieben:bedenke, das $HTTP_GET_VARS['file'] z.b. auch "../../../etc/passwd" sein könnte ;-)
Das sollte doch eigentlich durch basename() ausgefiltert werden.
Sicherer ist natürlich immer, so was mit einer DB abzugleichen - aber ich sehe jetzt kein größeres Problem.

Viele Grüße,

Philipp

BTW: $HTTP_GET_VARS ist abgekündigt
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Gast210225

Beitrag von Gast210225 »

Hallo,
Das sollte doch eigentlich durch basename() ausgefiltert werden.
Genau ;)
Sicherer ist natürlich immer, so was mit einer DB abzugleichen - aber ich sehe jetzt kein größeres Problem.
Ich habe leider keine DB, da das CMS nur Text Dateien benutzt ;)
BTW: $HTTP_GET_VARS ist abgekündigt
Was meinst du damit? Soll ich $_GET benutzen? Achso, ab welcher Version wird $_GET unterstüzt?

Aber trotzdem Danke ;)

Viele Grüße,
Johannes
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

$_GET gibt's ab PHP 4.1.0 - das sollte in der Zwischenzeit Standard sein. Die alten Versionen können ab PHP 5.0.0 deaktiviert werden, stehen also nicht mehr auf jeden Fall zur Verfügung.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Gast210225

Beitrag von Gast210225 »

Hmm :-?
Würde da folgender Code helfen (hab ich mal schnell gecoded ;) )

Code: Alles auswählen

if ( empty($_GET) && !empty($HTTP_GET_VARS) )
{
    $_GET = $HTTP_GET_VARS;
    unset($HTTP_GET_VARS);
}
Benutzeravatar
Ivan
Mitglied
Beiträge: 267
Registriert: 28.12.2004 17:26
Wohnort: Mössingen, BW
Kontaktdaten:

Beitrag von Ivan »

JG hat geschrieben:Hmm :-?
Würde da folgender Code helfen (hab ich mal schnell gecoded ;) )

Code: Alles auswählen

if ( empty($_GET) && !empty($HTTP_GET_VARS) )
{
    $_GET = $HTTP_GET_VARS;
    unset($HTTP_GET_VARS);
}
Was soll der bewirken?? :roll:
Gast210225

Beitrag von Gast210225 »

Naja, wenn das Array "$_GET" leer ist und das andere Array "$HTTP_GET_VARS" nicht leer ist, dann bekommt das Array "$_GET" den Inhalt von dem "$HTTP_GET_VARS" Array....

Oder denke ich da jetzt falsch :roll:


Viele Grüße,
Johannes
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Letzteres...

Einfach nur $_GET nehmen - und fertig :-)

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Gast210225

Beitrag von Gast210225 »

Und was macht dann dieser Code in der common.php des phpBB?:

Code: Alles auswählen

// PHP5 with register_long_arrays off?
if (@phpversion() >= '5.0.0' && (!@ini_get('register_long_arrays') || @ini_get('register_long_arrays') == '0' || strtolower(@ini_get('register_long_arrays')) == 'off'))
{
	$HTTP_POST_VARS = $_POST;
	$HTTP_GET_VARS = $_GET;
	$HTTP_SERVER_VARS = $_SERVER;
	$HTTP_COOKIE_VARS = $_COOKIE;
	$HTTP_ENV_VARS = $_ENV;
	$HTTP_POST_FILES = $_FILES;

	// _SESSION is the only superglobal which is conditionally set
	if (isset($_SESSION))
	{
		$HTTP_SESSION_VARS = $_SESSION;
	}
}

Viele Grüße,
Johannes
Antworten

Zurück zu „Coding & Technik“