Moin!
Oho, so prominent ist das Problem also.
Und woher bekommst du $language_file? Da solltest du ansetzen.
in einem include der (fast) überall eingebunden wird:
// Are we using the default language or user's choice?
function setupLanguage() {
global $config, $user_lang, $tb_language;$path = $_SERVER['DOCUMENT_ROOT'] . $config['talkback_path'] . 'language/';
if ($_REQUEST['language'] && $_REQUEST['language'] != $config['default_language']) {
// visitor has selected a language
$language_file = $path . $_REQUEST['language'] . '.php';
Genau hier ^^^ ist z.B. ein Punkt, an dem man ansetzen muss: Die Variable language kommt von außerhalb und wird ohne zu filtern in einen Pfad eingebaut! Was gibt language denn an? Dir hilft bestimmt einer Funktionen [basename](http://de.php.net/manual/de/function.basename.php) oder [dirname](http://de.php.net/manual/de/function.dirname.php) weiter.
> ~~~php
$user_lang = $_REQUEST['language'];
> } elseif ($tb_language) {
> // it was set in the page that invoked comments.php
> $language_file = $path . $tb_language . '.php';
> $_REQUEST['language'] = $tb_language;
> $user_lang = $tb_language;
> } else {
> // use the default language
> $language_file = $path . $config['default_language'] . '.php';
> $_REQUEST['language'] = '';
> $user_lang = $config['default_language'];
> }
> return $language_file;
> }
Es ist witzlos, wenn du zwei konkrete Dateien auf Existenz prüfst, und dann doch wieder eine beliebige andere includierst.
*schäm* stimmt, ich habs geändert:
include ("language/english.php");
Beide? Dann kann man keine Sprache mehr selektieren? Aber wie gesagt, das obere sieht mir kritischer aus.
original:
include $config['comments_form_tpl'];Das könnte relativ "sicher" sein, wenn du $config[] selbst mit erlaubten Werten initialisierst.
ist per config.php mit werten initalisiert, aber trotzdem wurde das als sicherheitslücke moniert.
Wurde auch gesagt, wie dort Werte überschrieben werden könnten?
Viele Grüße,
Robert