PHP Multilanguage (Cookies)?

06/26/2013 13:05 DasKuchen#1
Also ich habe eine Datei de_language.php und en_language.php beide haben die gleichen Arrays mit anderem Inhalt z.b.:

PHP Code:
$lang = array(
   
'home' => 'Willkommen',
); 
PHP Code:
$lang = array(
   
'home' => 'Welcome',
); 
Ich hatte jetzt einfach die Idee cookies zu setzen z.b. auf "DE"
und dann wenn ein Cookie gesetzt wurde einfach die Datei zu laden welche den Cookie Wert hat. Allerdings hab ich gelesen ,dass Cookies ziemlich unsicher wären und man sie leicht verändern kann.
Wäre diese Variante also ein Sicherheitsrisiko?
06/26/2013 13:55 dowhile#2
Ja. Die Cookies speichert der Client, d.h. der Nutzer kann den Inhalt beliebig verändern.

Du könntest den Wert des Cookies zusätzlich prüfen (d.h. nur bestimmte Werte sind erlaubt) oder die Endung in einer Session speichern (die wird auf dem Server gespeichert; der Client kann deren Inhalt nicht einsehen / modifizieren).
06/26/2013 15:56 NotEnoughForYou#3
ist nur die Frage, was es einem Angreifer bringen soll, sein eigenen languagecookie zu ändern.
06/26/2013 16:50 dowhile#4
Quote:
Originally Posted by NotEnoughForYou View Post
ist nur die Frage, was es einem Angreifer bringen soll, sein eigenen languagecookie zu ändern.
Ich habe
Quote:
und dann wenn ein Cookie gesetzt wurde einfach die Datei zu laden welche den Cookie Wert hat.
Als ein "include 'language_' . $_COOKIES['language'] . '.php';" interpretiert.
06/26/2013 16:59 Else#5
Das ist bzw. wäre eine massive Sicherheitslücke. Gerade solche Szenarien sollte man sich ersparen!
06/26/2013 17:39 NotEnoughForYou#6
Quote:
Originally Posted by dowhile View Post
Ich habe

Als ein "include 'language_' . $_COOKIES['language'] . '.php';" interpretiert.
In dem Fall stimmt das natürlich aber sowas lässt sich ja durch eine kleine abfrage umgehen
06/26/2013 19:22 kissein#7
PHP Code:
$langs = array('de''us', ...);
...
// Language stuff
if(!isset($_GET['lang']) || !in_array($_GET['lang'], $langs))
{
    
$mylang substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 02);
    if(!isset(
$_GET['lang']) || !in_array($_GET['lang'], $langs))
            
$mylang 'de';
}
else
    
$mylang $_GET['lang']; 
sollte selbsterklärend sein, keine cookies und option für mehrere sprachen

[Only registered and activated users can see links. Click Here To Register...]
06/26/2013 19:30 dowhile#8
Ich würde die Sprache trotzdem als Cookie / Session speichern und nur am Anfang die Sprache über deine Variante auswählen.

Wird sie über die URL übertragen, müssten alle Links auf der Webseite entsprechend angepasst / generiert werden. Bei Cookies / Sessions ist das nicht nötig. Wenn zudem jemand, der sagen wir, auf russisch auf der Seite surft, einen Link in einem englischen Forum postet, bekämen alle englischen Besucher zunächst auch eine russische Seite zu Gesicht. Auch dieses Problem gäbe es bei Cookies / Sessions nicht.

(Funktioniert das überhaupt? $mylang wird doch immer von 'de' überschrieben?!)