PHP Datenbank/if-Anweisungen

  • Hallo zusammen.

    Ich habe da ein Problem mit einem PHP Code. Der Code soll zuerst einen Wert aus einer bestimmten Zelle auslesen(hat bei anderen Seiten perfekt funktioniert). Danach wird überprüft, ob der ausgelesene Wert, dem Wert 1 entspricht. Jetzt wird aber nichts ausgelesen aus der Datenbank(auch wenn ich das ganze mit einem String ausgeben will) und die if-Bedingung wird dann einfach nicht beachtet und der darunter stehende Code trotzdem ausgeführt.


    Danke schon einmal im Voraus für Tipps und Fehlerkorrekturen.:)

  • Vielen Dank


    m.scatello funktioniert nun einwandfrei.

    Stef werde mir das Ansehen. Jedoch ist die Seite, auf der die Datenbank ausgelesen wird. Serverseitig mit einem Verzeichnisschutz bereits gesichert, da es eine Adminseite ist.

  • Stef werde mir das Ansehen. Jedoch ist die Seite, auf der die Datenbank ausgelesen wird. Serverseitig mit einem Verzeichnisschutz bereits gesichert, da es eine Adminseite ist.

    Der Verzeichnisschutz bringt dir dabei jedoch nichts. Denn via SQL-Injection greift der Angreifer direkt auf deine Datenbank zu.


    Beispiel:

    Code
    $bezahlt = mysqli_query($db, "SELECT bezahlt FROM Bezahlung WHERE id = '$passid'");

    In $passid steht nun: 0' OR .... = '2' OR .... = '3


    Dann sieht deine SQL Abfrage so aus:

    Code
    $bezahlt = mysqli_query($db, "SELECT bezahlt FROM Bezahlung WHERE id = '0' OR id = '2' OR id = '3'");

    Ist schon ein gravierender Unterschied.


    Grüße,

    Stef

  • $db = mysqli_connect("example.com", "example", "1234", "example");

    "example.com"

    Ich hoffe, die db ist nicht unnötig übers Internet erreichbar.

    Dort steht dann hoffentlich "127.0.0.1" oder "localhost" :)


    Und wie Stef schon sagte: Verzeichnisschutz ist einer SQL-Injection egal.


    Entweder prepared statements via mysqli, oder PDO (ich empfehle PDO).

    https://www.php.net/manual/de/pdo.prepared-statements.php

    https://www.php.net/manual/de/…t.prepared-statements.php



    Und vergiss strip_tags. Das bring keine Sicherheit. Prepared statements aber schon.


    Wenn eine Anwendung ausschließlich Prepared Statements benutzt, kann sich der Entwickler sicher sein, dass keine SQL-Injection auftreten wird.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!