Sicherheit im PHP

leon_20v

Erfahrenes Mitglied
Hallo,

ich hätte ein paar Fragen zur Sicherheit im PHP.

Einmal geht es darum, ich hole öfter Variablen mit

PHP:
  $page = $_GET["page"];
was ist damit für ein Sicherheits Risiko verbunden?
Wie kann ich es minimieren?

Dann hab ich ein auf Session basiertes Login System. Wie funktioniert das eigentlich? Ich stelle mir jetzt nur die Frage, wenn ich mich jetzt bei einer anderen Seite einlogge das auch auf Sessions basiert und danach auf meine Seite gehe, ob ich dann nicht auch ein eingeloggter User bin?
 
Ja, es kann je nach Code ein Sicherheitsrisiko sein. Schau mal filter_input() und filter_input_array() an.

Nein. Die Session ist auf dem einer 'Seite' pro User. Auf einer anderen Seite ists eine andere Session. Die Session läuft immer auf dem Server, nicht im Client.
 
was ist damit für ein Sicherheits Risiko verbunden?
Das kannst du ganz einfach testen mit diesem noch relativ harmlosen Beispiel:

PHP:
<?php 
if(isset($_GET['input'])){
	$input = $_GET['input'];
	echo $input;
}

?>

<form method="get">
<input type="text" name="input">
<input type="submit" name="submit" value="submit">
</form>

In das input schreibst du dann einfach mal <script> alert('hallo');</script> und schickst das Formular ab.

Grundsätzlich gilt immer die Regel : Eingaben von Benutzern wird niemals vertraut.
 
Und für diese Frage, die du heute Nacht schon in deinem anderen Thema gestellt hattest (http://www.tutorials.de/php/368152-...ebuch-neue-seite-ab-x-seiten.html#post1906513), eröffnest du wenige Stunden später im Forum ein zusätzliches Thema, blos weil du bislang noch keine Antwort erhalten hast?

Da kann man dir nur die Netiquette #12 ans Herz legen, zukünftig solche Doppel-/Pushpostings zu unterlassen, der du im übrigen mit deiner Registrierung zugestimmt hattest.

Netiquette #12 hat gesagt.:
Bitte erstelle keine Doppel-/Mehrfach-/Pushpostings. Dazu zählen insbesondere das Erstellen identischer Themen in mehreren unterschiedlichen Unterforen, das mehrfache oder erneute Einstellen eines bereits vorhandenen Themas, und das Posten von Beiträgen, die einzig und allein dem Zweck dienen, das entsprechende Thema in der Themenauflistung wieder weiter oben zu platzieren (sog. „Thread Pushing“). Derartige Beiträge werden restlos gelöscht. Sollte der Eindruck bei unseren Moderatoren entstehen, dass wissentlich gegen diesen Punkt verstoßen wurde, hat dies die unbegrenzte Sperrung des Accounts zur Folge.
 
Zuletzt bearbeitet:
@ Spicelab
Es geht doch nicht nur darum, sonder auch um die Session und hat wohl mit dem Thema Gästebuch kaum mehr was zu tun!!
Das man sich immer über jeden Müll aufregen muss!


Wie kann ich denn dieses Risiko vermindern?
Hiermit?:
PHP:
$page = mysql_real_escape_string($page);
 
Zuletzt bearbeitet:
ach jetzt sei doch nicht so...
ich wollte das mit der Session wissen und dann hab ich das hinzugefügt.


yaslaw mit was soll ich bei filter_input() filtern?
http://php.net/manual/de/function.filter-input.php

ich verstehe nicht wie ich das auf mein Problem anwenden soll.

Ich hole ja mit $_GET eine Zahl in die Variable $page.
ich hätte da eher an sowas gedacht:
PHP:
 ereg_replace("[^0-9]", "", $page);

was wahrscheinlich auch falsch ist :)

kannst du mir das mit dem filter_input () erläutern sodass ich das auch kapiere****
 
Ach, ich zitiere mich ja so gerne weil die Leute meine Beiträge nicht lesen....

Deine Geduld möchte ich haben :)
Ist ja nicht das erste mal das man entweder Tips gibt, ganze Skripte schreibt oder etliche Posts lang hilft und aufeinmal kommt a) keine Antwort oder b) Tips werden überlesen c) wurde kurzerhand nen völlig neues Script verwendet.

Ob da mal nen Danke kommt ka jedenfalls wird nicht einmal nen Thread als erledigt markiert.
Schon nen sehr merkwürdiges Verhalten insgesamt.
 
Mit filter_input kannst du eine Variable aus $_GET auslesen und gegen ein Muster prüfen.
-> http://www.php.net/manual/de/intro.filter.php
-> http://www.php.net/manual/de/filter.filters.validate.php
-> http://www.php.net/manual/de/filter.filters.sanitize.php

In deinem Fall ein Validate
PHP:
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
//oder wenn noch ein Minimum und ein Maximum dabei sein soll
$page = filter_input(INPUT_GET, 'page', array('filter' => FILTER_VALIDATE_INT, 'options'   => array('min_range' => 1, 'max_range' => 10));
 
Zurück