Ankündigung

Einklappen
Keine Ankündigung bisher.

GET und Sicherheit

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • beginnerx
    hat ein Thema erstellt GET und Sicherheit.

    GET und Sicherheit

    Hallo!

    Bin php-anfänger, brauche nur ein paar php funktionen und habe nicht die Zeit mich komplett einzuarbeiten. Jetzt habe ich eine Frage zur Sicherheit in Verbindung mit GET. Vielleicht hat jemand kurz Zeit und Lust mir zu antworten.

    Habe eine ziemlich lange Auflisten von Bildern und beim Anklicken eines Bildes wird eine xy.php aufgerufen und eine Variable mitübergeben. Die Variable enthält den Namen der dem Bild entsprechenden Textdatei deren Inhalt dann an bestimmten Stellen in der aufgerufenen xy.php angezeigt wird. Also nichts mit Passwörtern oder so.

    Gibt es dabei gravierende Sicherheitsprobleme (z.B.Manipulation von außen - die angesprochenen Daten liegen ja nur auf meinem Server - oder könnte jemand den Inhalt der Textdateien z.B. ändern ? )

    Vielen Dank !

  • nikosch
    antwortet
    @jw-lighting: Diese Tipps sind zu allgemein und damit gefährlich. Ein str_replace('..' reicht bspw. nicht aus. Selbiges gilt für eine statische Dateiendung.

    Einen Kommentar schreiben:


  • jw-lighting
    antwortet
    An dein Passwort kommt man im Normalfall damit nicht. Ebenfalls kann man die Inhalte der Dateien nicht ändern oder Datein löschen.

    Wie schon angesprochen, solltest du aber einiges in dein Script implementieren, um diese Sicherheit auch wirklich zu erreichen:

    1. Alle zu lesenden Dateien in ein Verzeichnis (evtl. UZnterverzeichnisse)
    2. Verhindern, das im Dateisystem nach oben gegangen wird:
    PHP-Code:
    $pfad str_replace('..'''$pfad); 
    3. Wenn möglich, die Dateiendung oder einen Teil des Dateinamens scriptseitig vorgeben:
    (Auch hier vorher '..' entfernen (siehe Punkt 2)!)
    PHP-Code:
    // z.B.
    include 'info_img_'.$imgId.'.txt'

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    ein whitelisting von zeichen, welche im dateinamen vorkommen dürfen sollte reichen. Andernfalls kann jemand ungehindert passwortdateien o.ä. auslesen, weil bei ungefilterten dateinamen auch beispielsweise ein "../" vorkommen könnte, mit dem man schön durch die festplatte navigieren kann.
    Ausserdem würde ich die dateiendung fix angeben.

    also quickndirty:
    PHP-Code:
    $safeFilename preg_replace('/[^A-Za-z0-9_\-]+/'''$_POST['infos']) . '.txt'
    request wäre dann:
    abd.php?infos=xyz
    mit $safeFilename kannst du dann weiterarbeiten und die datei laden etc....

    Einen Kommentar schreiben:


  • master2
    antwortet
    is_numeric lässt mehr durch als nur zahlen, verwende lieber ctype_digit

    PHP: ctype_digit - Manual

    Einen Kommentar schreiben:


  • BlackSpirit
    antwortet
    Wie bereits gesagt Sicherheit = 0
    Die Variablen überprüfe ich
    Also wenn du das überprüfen nennst...
    PHP-Code:
    $datei $_GET["haus"]; 
    Ich würde dir eher empfehlen:
    anzeige.php?haus=275

    PHP-Code:
    if(is_numeric($_GET["haus"])) {
      if(
    file_exists("c".$_GET["haus"].".txt")) {
        
    //....
      
    }

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Ja, das kann reichen. Durch Cross site scripting. Dein obiges Beispiel kann auch wunderbar Systemdateien auslesen.

    Einen Kommentar schreiben:


  • beginnerx
    antwortet
    Zitat von BlackSpirit Beitrag anzeigen
    Das kann ich dir nicht sagen da ich dein Script nicht kenne und ohne Grundlagen wird das nix.
    Hallo Blackspirit !

    Ich rufe in einer reinen html-site Folgendes auf:

    <a href="anzeige.php?haus=c275.txt&">
    <img src="images/c275/bild1kl.jpg" width="125" height="96"
    class="smallbord" alt=""></a>


    Anzeige.php ist auch reines HTML - mit zwei php-Abschnitten:

    Dateiinhalt in Array lesen

    <?php
    $datei = $_GET["haus"];
    $array = file($datei);
    ?>

    und Dateiinhalt an den entsprechenden Stellen ausgeben:

    <div id="content">
    <h2>
    <?php
    echo $array[0];
    ?>
    </h2>
    <ul>
    <li><span class="fett">Lage:</span>
    <?php
    echo $array[1];
    ?>
    </li>
    <li><span class="fett">Entfernung zum Meer:</span
    <?php
    echo $array[2];
    ?>
    </li>
    usw.

    Mehr brauche ich nicht, will nur die jetztige Site (komplett in html gemacht) etwas flexibler und für mich wartungsfreundlicher gestalten. Bis jetzt habe ich ca. 250 Artikel zum Anklicken und somit auch 250 Seiten - also für jeden Artikel eine Seite.


    Danke für Deine Mühe !

    Einen Kommentar schreiben:


  • beginnerx
    antwortet
    Zitat von nikosch Beitrag anzeigen
    Auf Basis Deiner obiegn Information kann man gar nichts sagen.
    Sorry Nikosch - ich will nicht nerven. So diffus wie meine Frage rüberkam, so diffus ist mein Wissen über php. Was ich wissen wollte ist - kann allein schon eine Anweiseung wie z.B. anzeige.php?info=xyz.txt& ausreichend sein, daß jemand dadurch "leichter" z.B. an mein Zugangspasswort zum Provider kommt oder meine Daten ändern kann.

    Einen Kommentar schreiben:


  • BlackSpirit
    antwortet
    Das kann ich dir nicht sagen da ich dein Script nicht kenne und ohne Grundlagen wird das nix.

    Einen Kommentar schreiben:


  • beginnerx
    antwortet
    Zitat von BlackSpirit Beitrag anzeigen
    Du musst die GET Werte überprüfen bevor du mit ihnen weiterarbeitest.
    Kleines bsp:
    url.com?id=1234
    PHP-Code:
    if(is_numeric($_GET['id'])) {
      
    //OK
    } else {
      
    //was auch immer...

    Danke Blackspirit. Die Variablen überprüfe ich - bin aber total verunsichert, ob das ausreicht. Bin totaler Neuling und weiß nicht, auf was man mit z.B. ... anzeige.php?infos=xyz.txt& ... ungewollt Zugriff gewährt (nach all den Horrormeldungen die man so liest).

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Hatte gehofft, Antworten zu bekommen nach denen ich eventuelle Sicherheitsprobleme bewerten bzw. einschätzen kann (nach meinem Maßstab).
    Auf Basis Deiner obiegn Information kann man gar nichts sagen.

    Einen Kommentar schreiben:


  • BlackSpirit
    antwortet
    Du musst die GET Werte überprüfen bevor du mit ihnen weiterarbeitest.
    Kleines bsp:
    url.com?id=1234
    PHP-Code:
    if(is_numeric($_GET['id'])) {
      
    //OK
    } else {
      
    //was auch immer...

    Einen Kommentar schreiben:


  • beginnerx
    antwortet
    Dann würde ich eben die Zeit aufwenden müssen. Hatte gehofft, Antworten zu bekommen nach denen ich eventuelle Sicherheitsprobleme bewerten bzw. einschätzen kann (nach meinem Maßstab).

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Und wenn wir jetzt ja sagen, was würdest Du dann ohne Wissen um PHP- und Servertechniken damit anfangen wollen?

    Einen Kommentar schreiben:

Lädt...
X