Ankündigung

Einklappen
Keine Ankündigung bisher.

Sicherheitsfrage Suchfunktion per GET

Einklappen

Neue Werbung 2019

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

  • Sicherheitsfrage Suchfunktion per GET

    Hi zusammen,

    Ich habe nur eine kurze Sicherheitsfrage.

    Ich habe ein Suchfeld auf meiner index.php und Sende dort mein Formular per GET ab.

    Das Formular und die Auswertung erfolgt beides in der index.php

    Filtern und Escapen tu ich wie folgt:

    Index.php das Formular:

    Code:
    <form action="index.php" method="get">
        <div class="searchbar">
          <input type="text" name="search" class="searchfield input" id="searchfield" maxlength="200" alt="Suche... " value="Suche... " onclick="document.getElementById('searchfield').value=''; this.style.color = '#000';" />
                 <input type="submit" id="submit" class="search-button" value="" />
        </div>
      </form>
    PHP-Code:
    <?php // Suche
          
    if(isset($_GET["search"]) && !empty($_GET["search"])) {
            
        
    $search preg_replace"/[^a-z0-9]/i"""$_GET["search"] );

    $sql "SELECT * FROM ".$sqltab27." WHERE name LIKE '%".$db->escape($search)."%'";

    usw ......
        
    ?>
    Ich hab mal was von Tokens und Cross Site Script Attacken gelesen, ist das hier von Nöten ?

  • #2
    Tokens gibts z. B. bei OAuth. Kurzfristige, eindeutige Keys, mit denen Berechtigungen erteilt werden. Wüsste nicht, warum man bei einem normalen Formular einen Token benötigen sollte.

    Cross Site Script (XSS) muss man hingegen immer beachten. Lässt sich aber leicht dadurch ausschließen, dass man alle dynamischen Ausgaben in ein htmlentities oder htmlspecialchars packt. Trägt ein User in ein Textfeld ein Javascript ein, wird es dann nicht als JavaScript ausgeführt sondern nur als normaler Text ausgegeben.

    Was bei dir fehlt, ist die Berücksichtigung von Sonderzeichen bei der Suche mit LIKE. _ und % müssen escapt werden. Dafür gibts addcslashes.

    Kommentar


    • #3
      Wüsste nicht, warum man bei einem normalen Formular einen Token benötigen sollte.
      Z.B. um einen doppelten Submit auszushließen.
      if(isset($_GET["search"]) && !empty($_GET["search"])) {
      empty impliziert isset, isset kann hier also weggelassen werden.
      Was bei dir fehlt, ist die Berücksichtigung von Sonderzeichen bei der Suche mit LIKE. _ und % müssen escapt werden. Dafür gibts addcslashes.
      Dann schau mal in die Zeile darüber.

      Kommentar


      • #4
        Dann schau mal in die Zeile darüber.
        Ahja. Na OK.

        Kommentar


        • #5
          Cross Site Script (XSS) muss man hingegen immer beachten. Lässt sich aber leicht dadurch ausschließen, dass man alle dynamischen Ausgaben in ein htmlentities oder htmlspecialchars packt. Trägt ein User in ein Textfeld ein Javascript ein, wird es dann nicht als JavaScript ausgeführt sondern nur als normaler Text ausgegeben.
          Das habe ich ja mit :

          PHP-Code:
          $search preg_replace"/[^a-z0-9]/i"""$_GET["search"] ); 
          schon gemacht es werden ja nur Buchstaben und Zahlen vom Formular her zugelassen bzw alles andere eben gegen "" ersetzt.

          Kommentar

          Lädt...
          X