• Der “Developers Shame Day”

    von am 3. November 2010

    Heute ist mal wieder ein besonderer Tag und zwar ein Tag, an dem es Zeit wird sich zu schämen. Aber erstmal die Vorgeschichte. Lang war es ruhig um Cem den PHP-Hacker und dann, eines Tages, kommt er mir einer Kracher-Idee. Wie wäre es, wenn alle Entwickler, die schon eine Weile im Geschäft sind mal demonstrieren, dann sie nicht immer Profis waren. Ja auch der beste PHP-Entwickler hat mal echt scheiß Code gebaut.

    Und genau am heutigen Tag wird es Zeit mal alten Code rauszukramen und in der Welt zu präsentieren. Wie gesagt, ich fand die Idee so gut, dass ich mitmachen wollte und bin in die Tiefen meines Archivs vorgestoßen und habe mal ein wenig alten Source-Code angeschaut. Hier mein Ergebnis. Ich habe versucht nur einen kurzen Snippet zu finden, der trotzdem alles sagt.

    ...
    elseif ( $step == 3 )
    {
      if ( $content["zahlweise"] == "kk" && (  $content["kkinhaber"] == "" || $content["kartennummer"] == "" || $content["pruefziffern"] == "" ) ) $error = true;
      if ( $content["zahlweise"] == "lastschrift" && (  $content["kontonr"] == "" || $content["blz"] == "" || $content["koinhaber"] == "" ) ) $error = true;
    
      $uploaddir ='/kunden/108859_79115/webseiten/apfelbild_de/upload/';
      $id = md5( time() );
      if ( !$error && move_uploaded_file($_FILES['file_userfile']['tmp_name'], $uploaddir.$id. "_".$_FILES['file_userfile']['name']))
      {
        chmod ( $uploaddir.$id. "_".$_FILES['file_userfile']['name'], 0777 );
        $content["firmenlogo"] = "http://www.apfelbild.de/upload/".$id."_".$_FILES['file_userfile']['name'];
    
        $content = array_merge ( $content, $forward );
        $message = "";
        foreach ( $content as $key => $value )
        {
          $message .= "$key: $value \n";
        }
    
        mail ( "langner@plan08.de", "Bestellung Apfelbild.de", $message );
    
        include "bestellung4.php";
    
      }
      else
      {
        $error = true;
        $hidden = forwardData ( $forward );
        include "bestellung3.php";
      }
    }

    Der kurze Ausschnitt ist aus einem Projekt, dass ich Anfang 2003 für eine Agentur (die jetzt zum Glück pleite ist) programmiert habe. Eigentlich brauch man da nicht mehr so viel zu sagen, oder? Wie einfach da mit Kredtikarten-Daten umgegangen wurde – wunderbar. Pfade und E-Mail-Adresse sind hart-codiert. Der “Controller” ist einfach ein include, dass im Erfolgsfall ein bestellung4.php anzieht und wenn es kein Erfolg war wieder zurück zu bestellung3.php geht. Irgendwas kann man auch im Formular hochladen (ich glaube das Firmenlogo), das wird dann in ein Upload-Verzeichnis kopiert, ohne zu schauen was für ein Typ es ist. Und noch schlimmer! Es sieht so aus, als ob die Datei auch noch über den Browser erreichbar ist.Variablennamen waren auf Deutsch., zumindest die Array-Keys.

    Ich bin echt stolz, diese Meisterleistung gefunden zu haben. Bin mir sogar fast sicher, dass ich ziemlich weit vorne sein werde, bei den Artikeln, die heute so gepostet werden. Habe ja schließlich von jedem etwas: Sicherheitsprobleme, keine OOP, hardkodierte Werte, …

    Falls ihr übrigens auch am Shame-Day teilnehmt, dann könnt ihr hier gerne eure Links posten. Und nicht vergessen: Cem Bescheid geben, damit er eine Liste aufstellen kann.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    13 Kommentare »


    • Michael
      am 3. November 2010 um 09:40 Uhr

      Der Code ist aber nicht dafür verantwortlich, dass die Firma pleite ist oder? :)


    • Nils Langner
      am 3. November 2010 um 10:03 Uhr

      @Michael: Ne Quatsch. Der Chef war ein Betrüger, wie sich rausgestellt hat.


    • Udo
      am 3. November 2010 um 10:48 Uhr

      “Habe ja schließlich von jedem etwas: Sicherheitsprobleme, keine OOP, hardkodierte Werte, …”

      Da kann ich mithalten :)
      http://www.udo-telaar.de/shame-day-erste-php-versuche/


    • Michael Karl
      am 3. November 2010 um 11:34 Uhr

      Da erinnert man sich ja an seine Anfangszeiten – und weiss wieder warum PHP als eine sehr unsichere Sprache galt. Ich werde bei nächster Gelegenheit mal nachsehen was sich so in unserem Archiv findet. :)


    • Ludwigr
      am 3. November 2010 um 12:39 Uhr

      Mein Code ist nicht viel besser…
      http://www.cwd.at/2010/11/03/developers-shame-day/

      :)


    • Ich schäme mich … am Developers Shame Day | LocalDev
      am 3. November 2010 um 12:45 Uhr

      [...] PHP hates me [...]


    • ls
      am 3. November 2010 um 14:31 Uhr

      Warum erinnert mich der Code so sehr an xt:Commerce…


    • stijink
      am 3. November 2010 um 14:46 Uhr

      Unser Beitrag zum heutigen Tage ist hier zu finden :)

      http://blog.fotocommunity.net/developer/2010/11/developers_shame_day.html

      Grüsse,
      Stephan


    • Arvid Bergelmir
      am 3. November 2010 um 15:26 Uhr

      So, mein Artikel ist auch fertig und kann gelesen werden:

      http://flabben.net/2010/11/03/developers-schame-day-2010.html


    • Mike
      am 3. November 2010 um 19:17 Uhr

      Als ich noch jung und unerfahren war… :)

      if(isset($_SESSION['foldercontainer']) || isset($_SESSION['songcontainer']))
      {
      //take config for fields first…
      if(is_file($templatedir.”/”.$_SESSION['type'].”/input/fielddef”))
      {
      $lines=@file($templatedir.”/”.$_SESSION['type'].”/input/fielddef”);

      for($i=0;$i<=9;$i++)
      {
      if(isset($lines[$i]))
      {
      if($i<9)
      {
      list($showtxt, $inputtxt)=split('[;]', $lines[$i]);

      $queryinput=$queryinput." '".addslashes($inputtxt)."',";
      $queryshow=$queryshow." '".addslashes($showtxt)."',";
      }
      else
      {
      $queryinput=$queryinput." '".addslashes($inputtxt)."'";
      $queryshow=$queryshow." '".addslashes($showtxt)."'";

      }
      }
      else
      {
      if($iquery(“INSERT INTO fields (name, motto, type, date, time, field_input1, field_input2, field_input3, field_input4, field_input5, field_input6, field_input7, field_input8, field_input9, field_input10, field_show1, field_show2, field_show3, field_show4, field_show5, field_show6, field_show7, field_show8, field_show9, field_show10) VALUES (‘”.addslashes(utf8_decode($name)).”‘, ‘”.addslashes(utf8_decode($motto)).”‘, ‘”.addslashes(utf8_decode($_SESSION['type'])).”‘, ‘”.addslashes(utf8_decode($startdate)).”‘, ‘”.addslashes(utf8_decode($starttime)).”‘, “.$queryinput.”, “.$queryshow.”)”))
      {
      $songid=array();
      $last__id = $db->lastid;

      foreach ($_SESSION['songcontainer'] as $sid => $val)
      $songid[]=$val;

      foreach ($_SESSION['foldercontainer'] as $fid => $val)
      getSongIds($val);

      array_unique($songid);

      foreach($songid as $id)
      $db->query(“INSERT INTO rel_song_ (_id, song_id) VALUES (‘$last__id’, ‘”.addslashes($id).”‘)”);

      // gets one song out of rel_song_ and puts it into playlist
      if ($db->query(“SELECT song_id FROM rel_song_ WHERE _id=’$last__id’ ORDER BY RAND() LIMIT 0,1″))
      {
      if ($db->query(“INSERT INTO playlist VALUES (NULL, ‘$last__id’, ‘”.$db->d["song_id"].”‘, NULL, ’1′, ’1′, ’1′, ‘ABSPIELBAR’, ‘Let the begin!’, ”, ”, ”, ”, ”, ”, ”, ”, now())”))
      {
      $last_playlist_id = $db->lastid;
      $db->query(“INSERT INTO playing VALUES (‘$last_playlist_id’, $last__id, 0)”);
      $db->query(“INSERT INTO _live_status VALUES (NULL, ‘$last__id’, 0, 1, 0, 1, 0)”);
      $sendstring=”&status=good&”;
      }
      else
      $sendstring=”&status=error4&”;
      }
      else
      $sendstring=”&status=error0&”;
      }
      else
      $sendstring=”&status=error1&”;
      }
      else
      $sendstring=”&status=error2&”;
      }
      else
      {
      echo $_SESSION['foldercontainer'][0];
      $sendstring=”&status=error3&”;
      }


    • Nils
      am 3. November 2010 um 21:16 Uhr

      @Mike: Mal die Komplexität berechnet? Ist ja schon schön verschachtelt.



    • Developers Shame Day: Ein „Login“ | alte Zeiten, codeschnipsel, css, developers shame day, PHP | der Webarchitekt
      am 4. November 2010 um 07:20 Uhr

      [...] eine Template EngineDatafreak zeigt sein Backup ScriptEine Pageproducer KlasseEtwas komplexes ParsenEine alte KreditkartenvalidierungDanke Cem für die Idee, ich hatte mein Unterhaltungswert bereits anhand des eigenen Codes. Bin [...]

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.