Webdesign in Siegen

POST-Variable absichern

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

POST-Variable absichern

Beitragvon Nase am 28.04.2008, 20:07

Hallo, ich hab mal ne Sicherheits-Frage:

In einem kleinen Skript von mir werden Jahreszahlen über ein Formular an eine URL (skript.php?varible=) angehängt. Die Jahreszahlen werden dann auf der neu aufgerufenen Seite mit "echo" ausgegeben.
Jetzt fiel mir auf, dass man ja auch einfach "hallo" an die URL dranhängen kann. Das man mit "; nicht aus dem "Echo"-Befehl rausgehen kann, liegt nur an den "Magic-Quotes", die man ja aber irgendwie umgehen können soll.

Also frage ich mich, wie ich am besten die Variable überprüfe:
Reicht es, wenn ich den echo Befehl nur ausführen lasse, wenn geprüft wurde, ob die Variable eine Zahl ist?
Oder 4 Stellen hat?
Oder sollte ich besser einen Array erstellen, der die Jahreszahlen, die erlaubt sind (ab 2000 bis heute) beinhaltet, und überprüfen, ob die Variable mit einem ELement übereinstimmt? Wenn ja, wie kann sich der Array automatisch an Sylvester selbst um 1 verlängert?

Und noch eine philosophische Frage am Schluss: Sollte ich das Skript so auslegen, dass es auch im Jahre 10000 noch funktioniert? :roll:
Nase
Mitglied
 
Beiträge: 38
Registriert: 10.04.2008, 21:03

Re: POST-Variable absichern

Beitragvon Basti am 28.04.2008, 20:32

Bei einer Jahreszahl sollte eine Überprüfung auf Ganzzahligkeit und Länge (sofern es erst ab 1000 losgeht ;) ) völlig ausreichen.
In anderen Fällen, vorallem wenn man vom Benutzer veränderbare Variablen in MySQL Abfragen einsetzt, ist mysql_real_escape_string() oder eine Maskierung von "gefährlichen" Zeichen ratsam.

Nun zu deiner "philosophischen Frage": Grundsätzlich sollte man Scripte schon so auslegen, dass sie "zeitlich" nicht begrenzt sind. Ich weiß ja nicht, was genau sonst noch so in deinem Script passiert, aber wenn du mit einem Timestamp arbeitest bist du ja sowieso ziemlich flexibel.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1781
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Re: POST-Variable absichern

Beitragvon stas am 28.04.2008, 20:32

Ich hoffe, dass ich die Frage richtig verstanden habe.

Code: Alles auswählen
if ($variable >= 2000 && $variable <= year(get_date())){
   ...
}


ist nur Pseudo-Code. Wie die einzelnen Funktionen im PHP heißen weiß ich nicht, aber es gibt solche.
Benutzeravatar
stas
Mitglied
 
Beiträge: 267
Registriert: 07.01.2007, 19:15
Wohnort: NÖ, Österreich

Re: POST-Variable absichern

Beitragvon Labrar am 28.04.2008, 20:43

Basti ich bewundere immer wieder wie du bei solchen verschwommenen Fragen immer den Kern begreifst.

@ Nase

Es gibt vermutlich mehr so Deppen wie mich die im Gegensatz zu Basti keine Ahnung haben was du jetzt genau willst.
Also stell deine Fragen doch bitte so daß klar hervorgeht wo es hängt. So liest sich daß wie:
"Ich dreh den Schlüssel zwar um aber die Karre springt nicht an. Wieso??"

Du übergibst so wie ich das verstehe im übrigen deine Var via GET und nicht via POST. Hier mal nach register_globals schauen da sehr unsicher.

Du kannst auch mit is_number prüfen ob es eine Zahl ist oder nicht
Zuletzt geändert von Labrar am 28.04.2008, 20:44, insgesamt 1-mal geändert.
Ich möchte wie mein Opa im Schlaf sterben und nicht heulend und schreiend wie sein Beifahrer
Labrar
Mitglied
 
Beiträge: 352
Registriert: 11.04.2007, 21:52
Wohnort: Ludwigsburg

Re: POST-Variable absichern

Beitragvon Nase am 28.04.2008, 20:43

Wie gesagt, die erlaubten Variablen sind ganzzahlig zwischen 2000 und dem jeweiligen heutigen Datum -> Also zur Zeit 2008.

Meine philosophische Frage kam mir nur in den Sinn, als ich mir überlegte, die Länge der Variable auf 4 Stellen zu überprüfen.

Denn stellt euch vor, in 9792 Jahren ärgert sich sonst der Benutzer, dass der Neandertaler von Damals sich keine Gedanken über eine 5stellige Jahreszahl gemacht hat :lol:

Edit: Sorry für den Gedankenwust, Labrar. Es war so gemeint: Variable wird mittels GET an Skript übergeben -> Skript sagt: Echo $Variable. Fertig.
Zuletzt geändert von Nase am 28.04.2008, 20:46, insgesamt 1-mal geändert.
Nase
Mitglied
 
Beiträge: 38
Registriert: 10.04.2008, 21:03

Re: POST-Variable absichern

Beitragvon Labrar am 28.04.2008, 20:45

LOL

Da juckts uns nimmer :lol:
Ich möchte wie mein Opa im Schlaf sterben und nicht heulend und schreiend wie sein Beifahrer
Labrar
Mitglied
 
Beiträge: 352
Registriert: 11.04.2007, 21:52
Wohnort: Ludwigsburg

Re: POST-Variable absichern

Beitragvon Nase am 28.04.2008, 20:47

@Labrar: Egoist! Denk an deine Enkel! :mrgreen: :xx:
Nase
Mitglied
 
Beiträge: 38
Registriert: 10.04.2008, 21:03

Re: POST-Variable absichern

Beitragvon Basti am 28.04.2008, 20:48

Hatte ein "nicht" in meiner Formulierung zur Zeit vergessen. Also so etwas wie manuell einen Array mit allen gültigen Jahreszahlen zu schreiben wäre zum Beispiel ungünstig. Je flexibler ein Script ist desto besser ;)

Aber wer weiß ob in 7000 Jahren noch jemand PHP kennt ... wenn die Menschheit dann überhaupt noch existieren sollte :duckweg:
Benutzeravatar
Basti
Moderator
 
Beiträge: 1781
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Re: POST-Variable absichern

Beitragvon Eyecatcher am 28.04.2008, 21:08

Basti ich wollts grad schreiben, ich glaube kaum dass dann noch die Menschheit existiert.
Demnächst: php-studio.com
Benutzeravatar
Eyecatcher
Mitglied
 
Beiträge: 249
Registriert: 01.03.2008, 21:56
Wohnort: Espelkamp

Re: POST-Variable absichern

Beitragvon Labrar am 28.04.2008, 21:11

Ich weiß immer noch nicht was der Code genau soll.
Was würde denn passieren wenn der User jetzt Hallo anhängt? Stürzt dein Script dann ab?
In dem Fall kann ich nur sagen "neu machen"
Ich weiß nicht was du bezwecken willst. Ich vermute mal:

Du baust ein Script in welchem der User sein Geburtsdatum eingeben muss.

Richtig?

Dann gib dem User gar nicht erst die Möglichkeit irgendwas einzugeben sondern biete ihm lediglich eine dynamische selectbox an in der nur die letzten 100 Jahr augfgeführt sind.
Ich möchte wie mein Opa im Schlaf sterben und nicht heulend und schreiend wie sein Beifahrer
Labrar
Mitglied
 
Beiträge: 352
Registriert: 11.04.2007, 21:52
Wohnort: Ludwigsburg

Re: POST-Variable absichern

Beitragvon Nase am 28.04.2008, 21:52

Nee nee, geht da um so ne Datei-Liste, die Namen der Dateien bestehen aus kompliziert verschlüsselten Jahreszahlen, und die soll man aufrufen können.
Ich hatte halt befürchtet, dass wenn der Nutzer
?variable=1234"; include(usw);
in die Adresszeile eingibt, der über diese Variable fiese Sachen eingeben kann. (Der webspace ist vom Hoster gut geschütz, ist also so gut wie ausgeschlossen, dass da was passiert. Aber eine gute Übung isses auf jeden Fall, das Skript so sich er wie möglich zu machen. Wer weiß, was bis ins Jahr 10000 noch alles an Hacker-Technologien ausgeklügelt werden. :wink: )
Egal.
Mich wundert gerade, dass "is_int($variabel)" immer False zurück gibt, auch wenn ich ganz klar ?variabel=1234 aufrufe?
Nase
Mitglied
 
Beiträge: 38
Registriert: 10.04.2008, 21:03

Re: POST-Variable absichern

Beitragvon Labrar am 28.04.2008, 22:00

Naja. Wenns die Sicherheit ist dann schau tatsächlich mal nach weiter oben in meinen Thread. Per GET ist nie sicher.

Click Click Boom
Ich möchte wie mein Opa im Schlaf sterben und nicht heulend und schreiend wie sein Beifahrer
Labrar
Mitglied
 
Beiträge: 352
Registriert: 11.04.2007, 21:52
Wohnort: Ludwigsburg

Re: POST-Variable absichern

Beitragvon Avedo am 28.04.2008, 22:41

Also ich stimme da Labrar zu. GET ist nie sicher. Zur Validierung der zu verarbeitenden Daten kann ich nur sagen, dass du dir mal die neue Filter-Extention (ext/filter) von PHP ansehen solltest. Ist auch schon im Manual dokumentiert.
MfG, Andy
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 464
Registriert: 09.12.2007, 20:12
Wohnort: Göttingen

Re: POST-Variable absichern

Beitragvon Nase am 29.04.2008, 14:22

Für die ganze Sache benutze ich übrigens diese Standard "onChange"-Verweisliste von self.html
Dabei werden ja die Variablen nicht per POST sondern GET übermittelt, wenn ich das richtig verstehe.
Gibts ne Möglichkeit, die auch per POST zu übermitteln?
Zur Zeit siehts so aus:
Code: Alles auswählen
function Go (select) {
  var wert = select.options[select.options.selectedIndex].value;
  if (wert == "leer") {
    select.form.reset();
      return;
  }  else {
      location.href = wert;
      select.form.reset();
       }
}

Code: Alles auswählen
<form>
<select size="1" name="Auswahl" onchange="Go(this)">
<option value="?variable=2000">2000</option>
<option value="?variable=2001">2001</select>...

Von JS hab ich keine Ahnung :handbuch:

Edit: Ahh... submit() usw... Komme allmählich von selbst drauf.
Nase
Mitglied
 
Beiträge: 38
Registriert: 10.04.2008, 21:03


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast