• schlechter Code
• Fehlermeldungen
• besserer Code
• Code kopieren
Fortress ??
• weitere Schmankerl
phpNuke 7.5


weitere "Schmankerl" aus dem phpNuke6.5 - 7.5 Code

Hier werden unsinnige Codezeilen aus dem phpNuke Code präsentiert.

Korintenkacker, werden viele denken....
aber startet mal phpNuke mit eingeschaltetem error_reporting

Demnächst mehr....

und vorerst zwei kleine Beispiele:

mainfile.php - Funktion blocks()    (v.6.5)

if (strtolower($side[0]) == "l") {
$pos = "l";
} elseif (strtolower($side[0]) == "r") {
$pos = "r";
} elseif (strtolower($side[0]) == "c") {
$pos = "c";
} elseif (strtolower($side[0]) == "d") {
$pos = "d";
}
$side = $pos;

Ist nicht....

$side = strtolower($side[0]);

... genau das Gleiche?

Achtung! Wer es bei sich anwenden will, der muss noch die nachfolgende Datenbankabfrage anpassen.

$sql = "SELECT bid, bkey, title, content, url, blockfile, view FROM .....
$result = $db->sql_query($sql);
while($row = $db->sql_fetchrow($result)) {
$bid = $row[bid];
$title = $row[title];
$content = $row[content];
$url = $row[url];
$blockfile = $row[blockfile];
$view = $row[view];
if ($row[bkey] == admin) {

Der neue sql_layer hat viele neue codezeilen mitgebracht.

Was soll die Umwandlung des arrayelements in eine normale Variable? Die kann man doch genauso verwenden. Mit $row[bkey] geht's doch auch...

Zudem mit Syntaxfehlern, der Name zwischen den Klammern [] muss in Anführungszeichen stehen.

Falls es doch unbedingt nötig sein sollte, die Arrayelemente umzuwandeln, würde ein einfacher Befehl:
extract($row) ;
genügen.

admin/modules/authors.php - switch $op    (v.6.5)

case "assignstories":
$result = sql_query("select sid from ".$prefix."_stories where aid='$del_aid'", $dbi);
while(list($sid) = sql_fetch_row($result, $dbi)) {
sql_query("update ".$prefix."_stories set aid='$newaid', informant='$newaid' where aid='$del_aid'", $dbi);
}
.......

Hier sollen beim Löschen eines Administrators, dessen veröffntlichten Artikel einem anderen Admin zugeordnet werden.

Angenommen er hatte 30 Artikel veröffentlicht, wird 30 mal die Schleife durchlaufen und 30 mal die Änderungsabfrage auf exakt die gleichen 30 Datenätze angewendet.

Die Schleife ist völlig überflüssig, eine einzige Änderungsabfrage würde genügen.

Ein weiterer Fehler ist, dass das Feld "informant" geändert wird. Der Informant ist der User, der den Artikel geschrieben hat, nicht der Admin!

case "AddAuthor":
...........
$add_pwd = md5($add_pwd);
$result = sql_query("insert into ".$prefix."_authors values ('$add_aid', '$add_name', '$add_url', '.......... usw....')", $dbi);
if (!$result) {
return;
}
Header("Location: admin.php?op=mod_authors");
break;
Tritt beim Einfügen eines neuen Admins ein Datenbankfehler auf, wird das Script abgebrochen und man erhält eine leere Seite. Ohne Meldung, nichts....

mainfile.php    (v.7.5)

$result = $db->sql_query("SELECT * FROM ".$prefix."_config");
$row = $db->sql_fetchrow($result);
$sitename = $row['sitename'];
$nukeurl = $row['nukeurl'];
$site_logo = $row['site_logo'];
$slogan = $row['slogan'];
$startdate = $row['startdate'];
$adminmail = stripslashes($row['adminmail']);
$anonpost = $row['anonpost'];
$Default_Theme = $row['Default_Theme'];
$foot1 = $row['foot1'];
$foot2 = $row['foot2'];
$foot3 = $row['foot3'];
$commentlimit = intval($row['commentlimit']);
$anonymous = $row['anonymous'];
$minpass = intval($row['minpass']);
$pollcomm = intval($row['pollcomm']);
$articlecomm = intval($row['articlecomm']);
$broadcast_msg = intval($row['broadcast_msg']);
$my_headlines = intval($row['my_headlines']);
$top = intval($row['top']);
$storyhome = intval($row['storyhome']);
$user_news = intval($row['user_news']);
$oldnum = intval($row['oldnum']);
$ultramode = intval($row['ultramode']);
$banners = intval($row['banners']);
$backend_title = $row['backend_title'];
$backend_language = $row['backend_language'];
$language = $row['language'];
$locale = $row['locale'];
$multilingual = intval($row['multilingual']);
$useflags = intval($row['useflags']);
$notify = intval($row['notify']);
$notify_email = $row['notify_email'];
$notify_subject = $row['notify_subject'];
$notify_message = $row['notify_message'];
$notify_from = $row['notify_from'];
$moderate = intval($row['moderate']);
$admingraphic = intval($row['admingraphic']);
$httpref = intval($row['httpref']);
$httprefmax = intval($row['httprefmax']);
$CensorMode = intval($row['CensorMode']);
$CensorReplace = $row['CensorReplace'];
$copyright = $row['copyright'];
$Version_Num = $row['Version_Num'];

Auslesen der Konfiguration aus der Datenbank.

Jede Variable wird einzeln aus dem Array extrahiert.

 

Das geht komplett in einer Zeile:

extract($row);

 

Ok, manche werden sagen, das muss so sein, weil manche Variablen noch mit int_val() überprüft werden.

Fein, aber das sollte vor dem Speichern in der DB passieren, nicht hinterher....

mainfile.php    (v.7.5)

//Union Tap
//Copyright Zhen-Xjell 2004 http://nukecops.com
//Beta 3 Code to prevent UNION SQL Injections
unset($matches);
unset($loc);
if (preg_match("/([OdWo5NIbpuU4V2iJT0n]{5}) /", rawurldecode($loc=$_SERVER["QUERY_STRING"]), $matches)) {
die();
}
if (stristr($_SERVER["QUERY_STRING"],'%20union%20')) header("Location: index.php");
unveränderter Schwachsinn, siehe hier: fortress

admin.php    (v.7.5)

$Today = getdate();
$month = $Today['month'];
$mday = $Today['mday'];
$year = $Today['year'];
$pmonth = $Today['month'];
$pmday = $Today['mday'];
$pmday = $mday-1;
$pyear = $Today['year'];
if ($pmonth=="January") { $pmonth=1; } else
if ($pmonth=="February") { $pmonth=2; } else
if ($pmonth=="March") { $pmonth=3; } else
if ($pmonth=="April") { $pmonth=4; } else
if ($pmonth=="May") { $pmonth=5; } else
if ($pmonth=="June") { $pmonth=6; } else
if ($pmonth=="July") { $pmonth=7; } else
if ($pmonth=="August") { $pmonth=8; } else
if ($pmonth=="September") { $pmonth=9; } else
if ($pmonth=="October") { $pmonth=10; } else
if ($pmonth=="November") { $pmonth=11; } else
if ($pmonth=="December") { $pmonth=12; };
$test = mktime (0,0,0,$pmonth,$pmday,$pyear,1);
$curDate2 = "%".$month[0].$month[1].$month[2]."%".$mday."%".$year."%";
$preday = strftime ("%d",$test);
$premonth = strftime ("%B",$test);
$preyear = strftime ("%Y",$test);
$curDateP = "%".$premonth[0].$premonth[1].$premonth[2]."%".$preday."%".$preyear."%";
Sorry, das verstehe ich zwar nicht (interessiert mich auch nicht) aber irgendwie sind da mindestens 15 Zeilen zuviel....






© A.Ellsel
Siteadmin @ maaX-dESIGN & pragmaMx & shiba-design