Seite 1 von 2
Sicher?
Verfasst: 30.12.2005 09:35
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
Verfasst: 30.12.2005 11:23
von larsneo
bedenke, das $HTTP_GET_VARS['file'] z.b. auch "../../../etc/passwd" sein könnte

Verfasst: 30.12.2005 12:06
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
Verfasst: 30.12.2005 15:03
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
Verfasst: 30.12.2005 16:03
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
Verfasst: 30.12.2005 19:12
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);
}
Verfasst: 30.12.2005 19:28
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??

Verfasst: 30.12.2005 19:35
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
Viele Grüße,
Johannes
Verfasst: 30.12.2005 20:16
von PhilippK
Letzteres...
Einfach nur $_GET nehmen - und fertig
Gruß, Philipp
Verfasst: 30.12.2005 20:53
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