Cookies...

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.
Antworten
Dwing
Ehrenadmin
Beiträge: 1965
Registriert: 17.06.2001 02:00

Cookies...

Beitrag von Dwing »

Ich will meine Seite mehrsprachig anbieten.
Ich hab die dateien

de_lang.txt und
en_lang.txt


Wie könnt ich das mit Cookies regeln ?

Also ein

Code: Alles auswählen

include('[cookiedaten]_lang.txt');
:roll:
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Code: Alles auswählen

//setzen des cookies (Link zum Aufrufen: seite.php?set_lang=de)
if(!empty($_GET['set_lang']))
    setcookie('lang', $_GET['set_lang']);

//setzen der Sprache
switch($_COOKIE['lang'])
{
    case 'de':default:
        include('de_lang.txt');break;
    case 'en':
        include('en_lang.txt');break;
    case 'fr':
        include('fr_lang.txt');break;
}
Die Variante include($_COOKIE['lang'] . '_lang.txt') würde ich nicht verwenden, denn wenn jemand seite.php?set_lang=http://foo.de/bar aufruft, wird sein Code auf deinem Server ausgeführt...das Problem kennst du ja warscheinlich vom phpBB

Oder verwende die select_lang.inc.php von PHPMyAdmin, dort wird automatisch die richtige Sprache eingestellt (abhängig vom Accept-Language Header)
Dwing
Ehrenadmin
Beiträge: 1965
Registriert: 17.06.2001 02:00

Beitrag von Dwing »

@Pyramide:
danke...

Das mit phpBB kenn ich...
Kann man das nicht mit intval($_COOKIE['lang']) verhindern ?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

intval funktioniert - wie der Name schon sagt - nur bei Zahlen. Du könntest jedoch Reguläre Ausdrücke verwenden:

Code: Alles auswählen

if(!preg_match('^[A-Za-z]$', $lang))
    die('hacking attempt bla bla');
Ich würde dir jedoch empfehlen, bei einer switch- oder ähnlichen Lösung zu bleiben. Erstens weil das schneller ist, und zweitens aus Sicherheitsgründen. Stell dir z.B. vor du nennst deine includes "<sprache>_lang.php". Dann erstellst du eine Auswahlseite dafür, die du "select_lang.php" nennst. Und schon können die besten Fehler auftreten.

Jetzt denkst du warscheinlich "blödsinn, das kann gar nicht passieren, weil meine *_lang-Dateien eine .txt Erweiterung haben" oder so. Doch nimm z.B. den db-include-Bug aus phpBB 2.0 rc-irgendwas: die Betroffene Variable war dort eingentlich gar kein Parameter, sondern in config.php festgelegt - Hacker finden eben jede noch so kleine Lücke...

Falls dir die switch-Lösung nicht gefällt, weil z.B. das hinzufügen anderer Sprachen zu schwierig ist, kannst du es ja auch mit einem array (das du dann in eine config-Datei auslagern kannst) machen:

Code: Alles auswählen

$allowed_languages=array('de', 'en', 'fr');

...

$lang_included=false;
foreach($allowed_languages as $l) //Die Liste der erlaubten Sprachen durchlaufen
{
    if($lang] == $l) //wenn diese Sprache
    {
        include($lang . '_lang.txt');
        $lang_included=true; //könntest du auch in jede einzelne lang.txt schreiben...wie beim phpBB
    }
}
if(!$lang_included)
    die('hacking_attempt bla bla');
je nachdem, wie du die Parameter übergibst / speicherst, solltest du evtl. nicht die() verwenden, sondern stattdessen einfach die Standard-Sprache verwenden. Denn wenn jemand z.B. ungewollt eine falsche Sprache einstellt (kommt ein Italiener...) und das dann sofort ins cookie übertragen wird, kann derjenige bis zum Löschen des cookies keine Seite mehr aufrufen...
Dwing
Ehrenadmin
Beiträge: 1965
Registriert: 17.06.2001 02:00

Beitrag von Dwing »

Pyramide hat geschrieben:intval funktioniert - wie der Name schon sagt - nur bei Zahlen. Du könntest jedoch Reguläre Ausdrücke verwenden:

Code: Alles auswählen

if(!preg_match('^[A-Za-z]$', $lang))
    die('hacking attempt bla bla');
Ich würde dir jedoch empfehlen, bei einer switch- oder ähnlichen Lösung zu bleiben. Erstens weil das schneller ist, und zweitens aus Sicherheitsgründen. Stell dir z.B. vor du nennst deine includes "<sprache>_lang.php". Dann erstellst du eine Auswahlseite dafür, die du "select_lang.php" nennst. Und schon können die besten Fehler auftreten.

Jetzt denkst du warscheinlich "blödsinn, das kann gar nicht passieren, weil meine *_lang-Dateien eine .txt Erweiterung haben" oder so. Doch nimm z.B. den db-include-Bug aus phpBB 2.0 rc-irgendwas: die Betroffene Variable war dort eingentlich gar kein Parameter, sondern in config.php festgelegt - Hacker finden eben jede noch so kleine Lücke...

Falls dir die switch-Lösung nicht gefällt, weil z.B. das hinzufügen anderer Sprachen zu schwierig ist, kannst du es ja auch mit einem array (das du dann in eine config-Datei auslagern kannst) machen:

Code: Alles auswählen

$allowed_languages=array('de', 'en', 'fr');

...

$lang_included=false;
foreach($allowed_languages as $l) //Die Liste der erlaubten Sprachen durchlaufen
{
    if($lang] == $l) //wenn diese Sprache
    {
        include($lang . '_lang.txt');
        $lang_included=true; //könntest du auch in jede einzelne lang.txt schreiben...wie beim phpBB
    }
}
if(!$lang_included)
    die('hacking_attempt bla bla');
je nachdem, wie du die Parameter übergibst / speicherst, solltest du evtl. nicht die() verwenden, sondern stattdessen einfach die Standard-Sprache verwenden. Denn wenn jemand z.B. ungewollt eine falsche Sprache einstellt (kommt ein Italiener...) und das dann sofort ins cookie übertragen wird, kann derjenige bis zum Löschen des cookies keine Seite mehr aufrufen...

ok, danke...
Antworten

Zurück zu „Coding & Technik“