Is it just み?

Archive for November, 2010

Developers Shame Day 2010

by on Nov.03, 2010, under PHP, Programmierung

Danach habe ich gesucht – ein Vorwand der mir wieder Lust macht was in mein Blog zu schreiben.

Auf zum…

Auch bei mir finden sich ziemliche Klöpse aus meiner PHP-Anfangszeit und daher möchte ich doch gerne meine Unfähigkeit in der Vergangenheit  protokollieren. und das obwohl PHP nicht meine erste Programmiersprache war – ich glaube ich werde in meine Pascal und Delphi Quelltexte aus Schulzeiten lieber erst gar nicht mehr reingucken… Man möge mir einfach glauben, dass ich dazugelernt habe. Wirklich!!!1!

Das folgende Beispiel ist schon ein wenig gekürzt, sollte aber die vielen Probleme und Dämlichkeiten deutlich zeigen. Ich glaube das war so von 2002 oder so.

In der “secure.php” wurde bloß das übertragene Passwort überprüft. Und ob dem Benutzer der vorher in der globalen Variable $permstring gesetzte String zugeordnet ist – ‘SA’ stand, glaube ich, für “Server Admin”. Man achte auch auf das hardgecodete (jedoch hier durch XXX ersetzte) $_POST[‘password’]. m(

Der Rest des Codes schreibt Befehle in eine Datei, die dann alle 5 Minuten mit root-Rechten (!) von eimen Cronjob als Bash-Script abgearbeitet wird. Übelst.


<?php


session_start
();

$permstring 'SA';
include(
'secure.php');
$myself basename($_SERVER['PHP_SELF']);

function 
writeCommand($command)
{
  
$cronfile '/srv/www/htdocs/XXX/html/XXXcron';

  
$fp fopen($cronfile,'a');
  
fputs($fp,$command."\n");
  
fclose($fp);
}

$jobs = array(
  
//array( Gruppe, Bezeichner, Befehl, Beschreibung)
  
array('Sonstiges''timesync''/root/timesync > /dev/null''Zeitsynchronisation'),
  array(
'Apache''apache2_restart''/etc/init.d/apache2 restart > /dev/null''Apache2 Restart'),
  array(
'Lokales Backup''local_backup_mysql''/root/local_mysqlbackup > /dev/null''Lokales MySQL-Backup (FullDump)'),
  array(
'Lokales Backup''local_backup_webs''/root/local_websbackup > /dev/null''Lokales Webspace-Backup (Alle Webs)'),
  array(
'Backup''backup_webs'    '/root/websbackup > /dev/null''Webspace-Backup (Alle Webs)'),
  array(
'Backup''backup_srvbackup''/root/srvbackup > /dev/null''/srv-Backup (Alle Webs)')
);

sort($jobs);

if(
$_POST['password'] == 'XXX' && !empty($_POST['which']))
{
  echo 
"
    <center>
    <div style='width: 350px; border: 2px #AA0000 dashed; text-align: left; vertical-align: middle; padding: 20px;'>
    <br/>
    <center style='color: #FF0000; font-weight: bold;'>
        Folgende Änderungen wurden geschrieben:
    </center>
    <br/>"
;

  
$which $_POST['which'];
  echo 
"
    <ol>"
;

  for(
$x=0;$x<count($which);$x++)
  {
    for(
$y=0;$y<count($jobs);$y++)
    {
      if(
$which[$x] == $jobs[$y][1])
      {
        echo 
"<li>";
        
writeCommand($jobs[$y][2]);
        echo 
$jobs[$y][3];
        echo 
"</li>";
      }
    }
  }

  echo 
"
    </ol>"
;
  echo 
"
    <br/>
    <div style='color: #FF0000; font-weight: normal; font-size: 10px;'>
    Die Abarbeitung der Aufgaben wird innerhalb der nächsten 5 Minuten beginnen.<br/>
    <i>Eventuelle Fehlermeldungen werden an root geschickt.</i><br/>
    </div>
    <br/>
    </div>
    </center>"
;
}
else
{
  echo 
"<form action='$myself' method='POST'>";
  for(
$x=0$x<count($jobs); $x++)
  {
    if(
$gruppe !=  $jobs[$x][0])
      echo 
'<b>'ucfirst($jobs[$x][0]) .':</b><br/>';
    if(@
in_array($jobs[$x][1], $_POST['which'])) $checked 'checked=checked ';
      echo 
"<input type='checkbox' name='which[]' value='"$jobs[$x][1] ."' $checked/>"$jobs[$x][3] ."<br/>";
    
$checked '';
    
$gruppe $jobs[$x][0];
  }
echo 
"
  <br/>
  Autorisation: <input type='password' name='password' /><br/>
  <input type='submit' value='Starten...'/>
  </form>"
;
}

Es tut schon ein wenig weh, diesen alten Code, den ich aus meinem ältesten Festplatten-Backup geholt habe zu veröffentlichen, irgendwie habe ich jetzt das verlangen duschen zu gehen…

Ab Morgen kann ich ja wieder so tun als würde ich keine Fehler machen. 😉

3 Comments :, more...