Forum: PC-Programmierung PHP eigene Session-Verwaltung


von Jürgen W. (lovos)


Lesenswert?

Hallo,
ich moechte ein PHP cgi schreiben fuer meinen Server bei alfahosting.
Dieses PHP soll mehrere Email-Accounts oeffnen und eingegangene Emails 
darstellen. Die zugangsdaten zu den POP3-accounts befinden sich auf dem 
Server. Fuer das PHP Script nehme ich ein weiteres Password.
Damit ich nicht jedesmal das Password eingeben muss, speichere ich eine 
erfolgte Zugangsberechtigung fuer die jeweilige IP ab.
1
$pathtmp=$_SERVER['DOCUMENT_ROOT']."/tmp/";
2
3
echo "Your IP:". $_SERVER[REMOTE_ADDR] ."<br />\n";
4
5
$valid=false;
6
$cont=explode("\n",file_get_contents($pathtmp."pop.txt"));
7
if ($cont[0]==$_SERVER[REMOTE_ADDR] &&
8
    time()<$cont[1]+3600*10)
9
  $valid=true;
10
else if (!empty($_POST['pw'])) {
11
  $pw=$_POST['pw'];
12
  $exp="123456"; //Beispiel-Passwort
13
  $cont=($exp==$pw? $_SERVER[REMOTE_ADDR]:"").
14
    "\n".time();
15
  file_put_contents($pathtmp."pop.txt",$cont);
16
  if ($exp==$pw) $valid=true;
17
}
18
19
if ($valid) {
20
?>
21
<h1>Here, protected contents</h1>
22
<?php
23
}

Da wollte ich mal wissen, wie sicher sowas ist.
Bei meinem Smartphone bin ich oefters im Internet mit wechselnden IPs, 
da muss ich jedesmal neu einloggen (Nachteil).
Aber ein anderer koennte meine fruehere IP erwischen und dann koennte er 
meine Emails lesen. Diese Wahrscheinlich tendiert aber gegen 0.
Gibt es andere Risiken bei meinem Programm?
Gruss, J.

von ... .. (docean) Benutzerseite


Lesenswert?


von Jürgen W. (lovos)


Lesenswert?

Die PHP-sessions kenne ich zwar, aber wollte sie aus 4 Gruenden nicht 
benutzen:
1. Mein CGI wird sowieso nur von einer Persion (ich) benutzt, es ist gar 
nicht notwendig, dass mehrere Sitzungen parallel verwaltet werden 
muessen.
2. Das Skript laeuft auf einen gemieteten Server, dort kann ich gar 
keine Einstellungen (php.ini) vornehmen. Von anderen CGI weiss ich, dass 
Alfahosting ziemlich viel nicht aktiviert hat.
3. Ich vermute, dass etablierte Programme und Programmiertechniken eher 
ausgehebelt/gehackt werden, als individuelle Bastelloesungen.

4. Eine PHP-Session wird beendet, wenn man sich ausloggt (oder 
Browserfenster schliesst??). Genau aber das mache ich ja auf meinem 
Arbeitsrechner oder Smartphone. Trotzdem sollte die Zugangsberechtigung 
gemerkt werden.
Gruss, J.

von Jürgen W. (lovos)


Lesenswert?

Die Daten "IP-Adresse" und "Zeitpunkt der Authentifizierung" speichere 
ich am Server in einer Temporaer-Datei ab, die auch von aussen gelesen 
werden kann mit www.meineseite.de/tmp/pop.txt.
1
file_put_contents($pathtmp."pop.txt",$cont);

Das muss nicht sein, es gibt bessere Orte, an die man von aussen nicht 
zugreifen kann.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Jürgen G. schrieb:
> 1. Mein CGI wird sowieso nur von einer Persion (ich) benutzt, es ist gar
> nicht notwendig, dass mehrere Sitzungen parallel verwaltet werden
> muessen.

Macht nichts, Sessions kosten nichts.

> 2. Das Skript laeuft auf einen gemieteten Server, dort kann ich gar
> keine Einstellungen (php.ini) vornehmen. Von anderen CGI weiss ich, dass
> Alfahosting ziemlich viel nicht aktiviert hat.

Sessions sind auf jeden Fall aktiviert.

> 3. Ich vermute, dass etablierte Programme und Programmiertechniken eher
> ausgehebelt/gehackt werden, als individuelle Bastelloesungen.

Das nennt sich "Security by Obscurity", und ist i.d.R. ein Trugschluss, 
außer man weiß genau was man tut. In diesem Fall ist deine Lösung 
schlechter als die etablierte, welche auf Cookies basiert statt auf 
IP-Adressen.

> 4. Eine PHP-Session wird beendet, wenn man sich ausloggt (oder
> Browserfenster schliesst??). Genau aber das mache ich ja auf meinem
> Arbeitsrechner oder Smartphone. Trotzdem sollte die Zugangsberechtigung
> gemerkt werden.

Die Lebensdauer des Session-Cookies lässt sich konfigurieren. Zur Not 
musst du von Hand einen Cookie setzen. Der Login basierend auf der 
IP-Adresse ist jedenfalls keine gute Lösung.

von Jürgen W. (lovos)


Lesenswert?

> Die Lebensdauer des Session-Cookies lässt sich konfigurieren. Zur Not
> musst du von Hand einen Cookie setzen. Der Login basierend auf der
> IP-Adresse ist jedenfalls keine gute Lösung.

Bei einem Firmennetzwerk haben alle PCs nach aussen hin die gleiche IP.
D.h. wenn ich mich von meinem PC einlogge, hat mein Kollege auch Zugriff 
auf den Inhalt.
Meinst Du das mit "keine gute Lösung"?
Ansonsten haette ich gedacht, dass die IP-Adresse sich schwieriger 
faelschen laesst, als dass man ein Cookie nachahmt.
Da ich auch vom Firmenrechner meine Emails anschauen moechte, habe ich 
mittlerweilen auch ein Cookie implementiert, d.h. IP-Adresse muss 
stimmen und Cookie.
Bliebe noch die Frage, ob eine Session-Verwaltung ggue eines "Cookie von 
Hand setzen" noch Vorteile bietet (ausser Uebersichtlichkeit)??

Gruss, J

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.