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...