Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

php und Passwörter

Empfohlene Antworten

Veröffentlicht

Hallo,

ich habe 2 php Seiten im Netz mit denen man Daten zu einer homepage hinzufügen und löschen kann (sind auch nur zugänglich wenn man weiß wo sie im verzeichniss liegen). Die soll natürlich nicht jedermann nutzen. Wie stelle ich das am besten mit einer passwortabfrage an? Kann ich da im quellcode dass passwort in klartext hineinschreiben oder irgendwie verschlüsseln? POST-übertragung zu unsicher?

htaccess scheidet leider aus.

wie macht ihr das so?

Ob es sicher übertragen wird hat mit POST nicht so viel zu tun, ist nur besser, weil es dann nicht wie bei GET in der URL auftaucht.

Wenn du es sicher übertragen willst, nimm https.

Das Passwort kann man verschlüsselt ( md5 )in den Code/die DB schreiben. Die Usereingabe auch verschlüsseln und dann beide vergleichen.

Bei richtigen Passwort kannst du dann eine Session starten, damit der User eingeloggt ist. Bei den beiden PHP Dateien überprüfst du jeweils am Anfang, ob eine Session vorhanden ist.

Also wenn du die usereingabe auch verschlüsselst kannst du sie nicht mehr aus der Datenbank ohne weiteres auslesen. Dann kannst du zB nicht mehr nach dem Usernamen sortieren, weil er ja im MD5-Format in der Datenbank steht, ne?

Ich denke es reicht, wenn du das Passwort im MD5-Format in der Datenbank verstauchst (wie mein Vorredner bereits erwähnte).

dann kannst du's abfragen: select username from Tb_users where passwort = md5('$passwort') and username = '$username';

oder so ähnlich. Für MD5 brauchst du varchar mit 32 Zeichen.

Gruß

Also wenn du die usereingabe auch verschlüsselst kannst du sie nicht mehr aus der Datenbank ohne weiteres auslesen. Dann kannst du zB nicht mehr nach dem Usernamen sortieren, weil er ja im MD5-Format in der Datenbank steht, ne?

Ich denke es reicht, wenn du das Passwort im MD5-Format in der Datenbank verstauchst (wie mein Vorredner bereits erwähnte).

dann kannst du's abfragen: select username from Tb_users where passwort = md5('$passwort') and username = '$username';

oder so ähnlich. Für MD5 brauchst du varchar mit 32 Zeichen.

Gruß

Das ist wohl die meist gewählte variante.

So kannst du es recht ordentlich machen.

Und wenn ich einfach sowas mache:

if($_POST["passw"] == "passwort"){.....}
else
{echo "fehler";}
[/PHP]

ist das dann unsicher?

wenn du dein password im source md5 verschlüsselt einfügst ist das auch eine Möglichkeit.

Diese ist zwar recht starr, aber es geht und ist nicht unsicherer wie die andere methode

Und wenn ich einfach sowas mache:

if($_POST["passw"] == "passwort"){.....}
else
{echo "fehler";}
[/PHP]

ist das dann unsicher?

[PHP]

$passwort = "passwort"

...

if ($_POST["passwd"] == $passwort)
...

Als md5-Hash ist es schon sicherer, weil dann keiner das PW lesen kann, auch wenn er Zugirff auf den Server hat.

Der Fall oben (der ja fast deiner ist) ist ansich auch ok, es kann aber schon möglichkeiten geben, in der das PW dann ausgelesen werden kann. Normalerweise geht eine solche Seite ja immer durch den PHP-Interpreter und der gibt den PHP-code nicht aus. Was aber, wenn nach irgendeiner Änderung am Server das nicht mehr wie gewollt funktioniert? Dann wäre es (zumindest für kurze Zeit vielleicht) u.U. Möglich das PW auszulesen. Daher solltest du das PW eher in einer eigenen (php-)Datei ausserhalb des Webpfades ablegen und dann per Include einbinden.

Die md5-Variante wäre dem aber vorzuziehen.

Hi,

darf ich mich mal an die Frage anhängen ??

Das geschilderte Problem im letzten Post würde ich gerne nochmal aufgreifen.

Was mache ich denn am besten bei SQL-DB-Zugriffen ?

Ich muss dort doch im Quellcode ein SQL-Connect machen, und dort das PW im Klartext angeben.

Wie kann ich das umgehen ?? Damit mir niemand bei nem Serverproblem die Zugangsdaten zum SQL-DB ausliest?

Danke

Michael

Ich muss dort doch im Quellcode ein SQL-Connect machen, und dort das PW im Klartext angeben.

Wie kann ich das umgehen ?? Damit mir niemand bei nem Serverproblem die Zugangsdaten zum SQL-DB ausliest?

l

Du packst die Logindaten in eine PHP-Datei, die du ausserhalb des Webpfades ablegst. Also so, dass du über den Webserver keinen zugriff darauf hast. z.B.


<?php
$dbhost = "localhost";
$dbname = "test";
$dbname = "dblogin";
$dbpasswd = "12345";
?>
[/php]

In deiner Datei bindest du die Datei dann per include ein. PHP hat Zugriff auf die Datei (wenn die Berechtigung stimmt) aber sonst keiner.

also am einfachsten isses wenn du die http-authentisierung verwendest

http_user

http_passwd


<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
Header("WWW-Authenticate: Basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button\n";
exit;
} else {
echo "Hello {$_SERVER['PHP_AUTH_USER']}";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>
[/php]

quelle: phpmanual

wenn du https hernimmst is die übertragung auch noch sicher .....

falls dir das aber noch net genug ist kannst du dir auch selbst ein chap coden ^^

chap for php

also am einfachsten isses wenn du die http-authentisierung verwendest

Er sagte aber, dass htaccess ausscheidet. Also kann er dem Webserver seinen "Realm" (den Bereich, der geschützt ist) garnicht mitteilen (denke mal er wird dann auch keinen Zzugriff auf die Serverkonfiguration haben). Ausserdem kann er auch kein htpasswd angeben und auch nicht, was für User für diese Authentifizierung gültig sind. HTTP-Authentisierung schön und gut, aber hier wohl eher fehl am Platz.

das is doch was komplett anderes...

das is ein normaler http-request dazu braucht man keinen zugriff auf die serverconfig

The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information. HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication"

das is doch was komplett anderes...

das is ein normaler http-request dazu braucht man keinen zugriff auf die serverconfig

Ein 401 ist nichts anderes, als der Server schickt, wenn in der config oder einer .htaccess Datei eine authorisierung vorgesehen ist.

Ok, da es sich um eine einzelne Seite handelt ginge das hier wohl, sobald aber mehr als eine Seite im spiel ist nicht mehr (bzw. mit einer Anmeldung auf jeder Seite).

War ein Fehler von mir.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.