PHP Sicherheit

Tockra

Lt. Commander
Registriert
Dez. 2008
Beiträge
1.063
Hallo Leute,

Ist ein solcher php Code sicher, um Server zu starten, wenn ich der Php Datei einen 16 stelligen Namen gebe und diesen Namen niemanden weiter gebe, oder sollte man diese Datei noch anders schützen?:

Code:
<?php
$connection = ssh2_connect('LINUX_IP', 22);
ssh2_auth_password($connection, 'Benutzername', 'Passwort');
$stream = ssh2_exec($connection, '/home/ts/autostop.sh');
?>

Gruß
T.
 
Eine htaccess mit Loginbeschränkung wäre wohl sinnvoller als kryptische Namen zu nutzen, die evtl. ohne Probleme durch Ausprobieren herausgefunden werden können.
 
Zum Glück ist Ausprobieren ja bei htacess-Beschränkung nicht möglich .... oO

Also wenn das Durchsuchen des Verzeichnisses nicht erlaubt ist usw und die entsprechende URL, also der Pfad auf dem Server (evtl sogar die subdomain), nicht anderweitig genutzt werden usw spricht an sich nichts wirklich was dagegen.

Um solche Probleme zu vermeiden könntest du die Ausführung des Scripts von einem Parameter abhängig machen, der via GET übergeben wird, also etwa so
script.php?parameter=wert

Auf den Wert kannst du dann via $_GET["parameter"] zugreifen. Dann reicht das Kennen des Script-Namens nicht mehr aus.
 
Zuletzt bearbeitet:
mal ganz ehrlich: wieso startest du nen Shell-Skript, dass dem Namen nach auch noch root-rechte braucht, aus nem php-Skript?! da wär z.B. ein Eintrag i nder crontab o.ä. wesentlich sinnvoller... bzw. lässt sich das ganze Konzept nocht ev. sinnvoller aufziehen?
 
Der Titel des Threads ist missverständlich. Die Frage hat mit PHP nix zu tun, sondern mit Webserver konfiguration.

Der Versuch die Sicherheit über einen langen Dateinamen herzustellen, würde wohl im Streitfall mit "Fahrlässig" bewertet werden.
htaccess ist wohl die einfachste Möglichkeit.
Man könnte aber auch ein Login-System mit php realisieren, und den code nur im eingeloggten Zustand erreichbar machen. Das ist allerdings viel aufwändiger, und tendentiell unsicherer, da mehr Fehlerquellen.
 
@KeepXtreme: Es wird kein Script sein, das einmal täglich um 0 Uhr ausgeführt werden soll... vermutlcih wohl deshalb nicht als cronjob...

@PW-toXic:
Naja für so einfache Dinge reicht sowas, und viel falsch machen kann man da eigentlcih dann nicht...
PHP:
if ($_GET["password"] == "meinPasswort") {
  startScript();
}
 
KeepXtreme schrieb:
mal ganz ehrlich: wieso startest du nen Shell-Skript, dass dem Namen nach auch noch root-rechte braucht, aus nem php-Skript?! da wär z.B. ein Eintrag i nder crontab o.ä. wesentlich sinnvoller... bzw. lässt sich das ganze Konzept nocht ev. sinnvoller aufziehen?

1. Wie kommst du auf die Idee,dass das shell script Rootrechte braucht?

2. Ich möchte eine Möglichkeit, mit der ein Kollege einen Gameserver starten und stoppen kann, ohne dass ich ihn meinen Linux Nutzer raus gebe.



@ 1668mib:
Wie stelle ich denn sicher, dass das Durchsuchen des Verzeichnisses nicht erlaubt ist?

€dit @ 1668mib :
Da ich mich nicht gut mit php auskenne, würde mich mal interessieren, wo die Variable $_GET["password"] ihren Inhalt her nimmt?
 
wenn keine index-datei drin ist und du die URL ohne Dateiname, nur den Pfad, aufrufst - wenn eine liste von Dateien usw kommt => schlecht

Ich würde schon empfehlen, zusätzlich noch über einen Parameter in der Adresse zu Überprüfen, ob der Aufruf berechtigt ist. Verkünsteln brauchst du dich aber nicht unbedingt dabei...


script.php?parameter=wert
führt dazu, dass im Script dann
$_GET["parameter"] = "wert"
ist. ob "parameter" oder "password" ist egal, muss nur konsequent sein.


@PW-toXic: Gegenfrage: Warum wollt ihr ihm htaccess aufreden?
Gibt kaum ein Passwort-Mechanismus den ich mehr verabscheue als den htaccess-Scheiss ehrlich gesagt :-)
Zumal das Script dann eben immer erst nach Eingabe von Anmeldeinformationen startet - eine Billig-PHP-Lösung würde diesen Nachteil nicht haben...
 
Zuletzt bearbeitet:
1668mib schrieb:
@PW-toXic: Gegenfrage: Warum wollt ihr ihm htaccess aufreden?
Gibt kaum ein Passwort-Mechanismus den ich mehr verabscheue als den htaccess-Scheiss ehrlich gesagt :-)
Zumal das Script dann eben immer erst nach Eingabe von Anmeldeinformationen startet - eine Billig-PHP-Lösung würde diesen Nachteil nicht haben...

Weil man Passwörter nicht im plaintext anzeigt. Das ist aber der Fall, wenn das "Passwort" in der URL zu finden ist.
Man kann natürlich sagen "dieses Risiko geh ich ein", aber dann sollte man keinen Thread in einem Forum erstellen, und nach Sicherheit fragen, denn es ist nicht sicher.
Würde wegen so einem Passwortschutz ein Schaden entstehen, würde man wohl von grober Fahrlässigkeit sprechen können. Aber vermutlich entseht hier nicht so leicht ein Schaden, wenn das geknackt wird.

Sicher ist es dennoch nicht.
 
Yap, Scripts sind nicht von Außen runterladbar. Aber das heißt nicht, dass die Scripts nicht Fehler enthalten können. Bei der Verwendung von htaccess hat man halt den Vorteil, ein bewährtes System einzusetzen => fehlererprobter als eigener Code.

Ist der sicherheitskritische Code allerdings entsprechend kurz und "unkomplex", dann dürften da auch keine Probleme sein.

@PW-toXic: Naja Passwörter anzeigen ist jetzt weder eine komische Formulierung... Es kann sich ja um irgendeinen Zufallscode handeln, ich meinte ja nicht das normal verwendete Passwort. Sicherheitskritisch unbedenklich ist es sicher dennoch nicht, schließlich wird die HTTP-Anfrage unverschlüsselt gesendet usw...
 
Zuletzt bearbeitet:
Tockra schrieb:
PS: Sind php Scripts 1000 % nicht von außen downloadbar?
Nein, eine 1000%ige Sicherheit gibt es leider nicht.
Wenn allerdings php aktiviert ist, kenne ich keine Möglichkeit eine php datei herunterzuladen.

Tockra schrieb:
Ich weiß nicht was htaccess ist und ich verstehe nicht, was für einen Vorteil es gegenüber einer Passwortabfrage innerhalb von einem PHP Script ist?
Es ist nie auszuschließen, dass per Zufall die richtige Adresse, oder per Bruteforce, oder was weiss ich für Lücken der Datename gefunden wird (Punkt 1). Desweiteren steht dann beim Benutzer das Geheimnis in der URL Zeile, und ist somit im Plain Text lesbar. Aus diesem Grund ist jede Passwort Eingabemake mit Sternchen versehen, so dass nicht jemand, der per Zufall vorbeiläuft, das Passwort kennt. Bei einem Server-Neustart script ist das sogar doppelt kritisch, weil nach der Passwort Eingabe ja nicht unbedingt der Browser Tab geschlossen werden muss, und vermutlich offen bleibt. Des weiteren gibt es bei einem Browser auch eine History, so dass man einfach das Passwort abgreifen kann.
Jetzt kann man argumentieren, dass er ja das script nur von zu Hause aus benutzt, und niemals jemand in sein Zimmer kommt.
Diese Annahme ist Utopie.

Desweiteren: Wenn du noch einmal so etwas sagst: "Ich weiß nicht, was htaccess ist", dann wirst du von mir keine Hilfe mehr bekommen.

Ich helfe gerne Menschen. Allerdings nur, wenn die auch bereit sind, ein Mindestmaß an Eigeninitiative zu zeigen. Man kann doch von einem Menschen, der sich im Internet bewegt verlangen, dass er mal kurz den gefragten Begriff bei Wikipedia oder google eingibt. Wenn es dann noch weitergehende technische Fragen gibt, kann man ja gerne weiterfragen. Aber so eine Frage empfinde ich schon fast als eine Unverschämtheit, wenn andere Leute ihre Freizeit opfern, um anderen Leuten zu helfen, aber die in keinster Weise bereit sind ein bisschen Eigenintiative zu leisten.
 
Punkt1: Das ist ein generelles System bei Passworteingaben...

Zum Plaintext: ich glaube nicht dass er sich die kryptische URL auswendig merken wollte... ich denke es geht darum, kurz einen Bookmark aufzurufen. Klar, im Browser steht's drin, aber man muss sich doch fragen, wie kritisch dieses Passwort für Leute ist, die auf die Histroy Zugriff haben ...
Wenn es anderen Zugriff gibt, sei es RootKit etc, sind sowieso alle Sicherheitsmaßnahmen für'n Arsch.

und wegen dem offenen Tab - da könnte man ja Problemlos eine entsprechende Weiterleitung machen... klar kommt man über "Zurück" noch hin, aber das geht bei der Browser-Histroy eh...
 
Also ich geb jetzt kurz auch meinen senf dazu :)

Aus Erfahrung, kann ich dir Empfehlen die Konfiguration wie folgt zu machen:

Einen eigenen VHost für internes Management der mit SSL und htacces Passwortschutz arbeitet. Dadurch verlagerst du die Zugriffsschutzkonfiguration auf den Webserver. Damit schließt du aus, dass du aus versehen durch einen Bug im PHP-Script ohne Authentifizierung etwas machen kannst. Wichtig ist, dass du den VHost mit SSL schützt, sonst wird das Passwort im Plaintext übertragen.

Ein Passwort würde ich beim SSH nicht machen, sondern mit Keys arbeiten und den Key an eine IP-Adresse nageln (from="IP" ssh-rsa [...]). Damit ist das Zugriff zwischen den Servern ausreichend sicher.

z.B:
Code:
<VirtualHost *:8443>
SSLEngine On
SSLCertificateFile cert
SSLCertificateKeyFile key
DocumentRoot X
<Directory X>
  Options None
  AllowOverride None
  AuthType Basic
  AuthName "Authentication Required"
  AuthUserFile Z
  Require valid-user

  Order deny,allow
</Directory>
</VirtualHost>
 
Zuletzt bearbeitet:
Eine absolute Sicherheit gibt es nie. Man muss nur abwägen, ob der Aufwand die Sache rechtfertigt.
 
Zurück
Oben