MrMind
Moin Leutz,
hier poste ich die Bugfix hinein die ich behoben habe. Wenn ihr noch welche finden solltet, dann sagt bitte bescheid.
Smilies und BBCodes an Coursorposition setzen
öffne die Datei bbcode.js
Suche nach:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
|
function AddText(NewCode,theform) {
if (theform.message.createTextRange && theform.message.caretPos) {
var caretPos = theform.message.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? NewCode + ' ' : NewCode;
} else theform.message.value+=NewCode
AddTxt = "";
setfocus(theform);
} |
|
Ersetze durch:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
|
function AddText(NewCode,theform) {
if (theform.message.createTextRange && theform.message.caretPos) {
var caretPos = theform.message.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? NewCode + ' ' : NewCode;
} else
{
theform.message.focus();
messagestart=theform.message.selectionStart;
messageend=theform.message.textLength;
textend=theform.message.value.substring(theform.message.selectionEnd,messageend);
textstart=theform.message.value.substring(0,messagestart);
theform.message.value=textstart + NewCode + textend;
theform.message.selectionStart=messagestart + NewCode.length;
theform.message.selectionEnd=messagestart + NewCode.length;
}
AddTxt = "";
setfocus(theform);
} |
|
Bugfix eines unbedeutsamen JS-Fehlers
Dieser Fehler fällt nur auf, wenn man über das Antwort erstellen oder neues Thema erstellen die JavaScript-Konsole offen hat
öffne die bbcode.js
Suche nach:
code: |
1:
|
document.getSelection(); |
|
Ersetze durch:
code: |
1:
|
window.getSelection(); |
|
Mfg
MrMind
MrMind
Habe auf Wunsch den JS-Code für die Smilies geändert, da der Coursor nach dem einfügen des Smilies ans Ende vom Text gesprungen ist.
Nun bleibt er solange an der Position, bis der Benutzer ihn an das Ende setzt und hängt sich automatisch ans Ende vom Smiliecode.
Für alle die den Bugfixx davor hatten und nun das auch ändern möchten befolgt einfach das hier:
öffne die Datei bbcode.js
Suche nach:
code: |
1:
|
theform.message.value=textstart + NewCode + textend; |
|
Darunter einfügen:
code: |
1:
2:
|
theform.message.selectionStart=messagestart + NewCode.length;
theform.message.selectionEnd=messagestart + NewCode.length; |
|
Desweiteren habe ich eine Info bekommen, das die Smilies im PopUp Fenster (wenn man auf den Button
mehr drückt) unabhängig davon sind.
Hierfür dieser Bugfixx:
Smilies im PopUp an Coursorposition setzen
Öffne die Datei /templates/popup_smilies.tpl
Suche nach:
code: |
1:
2:
|
opener.document.bbform.message.value += smilietext+" ";
opener.document.bbform.message.focus(); |
|
Ersetze durch:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
|
opener.document.bbform.message.focus()
start = opener.document.bbform.message.selectionStart;
end = opener.document.bbform.message.textLength;
textstart = opener.document.bbform.message.value.substring(0,start);
textend = opener.document.bbform.message.value.substring(opener.document.bbform.message.selectionEnd,end);
opener.document.bbform.message.value = textstart + smilietext + textend;
opener.document.bbform.message.selectionStart = start + smilietext.length;
opener.document.bbform.message.selectionEnd = start + smilietext.length;
opener.document.bbform.message.focus(); |
|
Mfg
MrMind
SessionX
Beim bearbeiten von Styles kommt es zu einem {cssfile} oben im Header!
Um es zu entfernen, muss Du folgendes machen:
» 1. Möglichkeit:
Öffne die Datei templates/headerinclude.tpl
Suche nach: {cssfile}
Entferne es!
-------------------------------------------------------
» 2. Möglichkeit:
Gehe in dein ACP
Wähle dort: Designpack bearbeiten
Suche dein Style aus und klicke auf bearbeiten.
Trage bei URL zu einer CSS Datei folgendes ein: bug.css
SessionX
Beim bearbeiten von Styles kommt es zu einem {cssfile} oben im Header!
Um es zu entfernen, muss Du folgendes machen:
» 1. Möglichkeit:
Öffne die Datei templates/headerinclude.tpl
Suche nach: {cssfile}
Entferne es!
-------------------------------------------------------
» 2. Möglichkeit:
Gehe in dein ACP
Wähle dort: Designpack bearbeiten
Suche dein Style aus und klicke auf bearbeiten.
Trage bei URL zu einer CSS Datei folgendes ein: bug.css
yourWBB-Team
Mit neuen Versionen von Mysql hat das Lite Probleme in der Team-Ansicht.
Es kommt die Fehlermeldung:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
SQL-DATABASE ERROR
Database error in WoltLab Burning Board: Invalid SQL: SELECT u.userid, u.username, u.invisible, u.receivepm, u.lastactivity, uf.* FROM bb1_users u, bb1_groups g LEFT JOIN bb1_userfields uf ON (u.userid=uf.userid) WHERE u.groupid = g.groupid AND g.ismod=1 ORDER BY u.username ASC
mysql error: Unknown column 'u.userid' in 'on clause'
mysql error number: 1054
Date: 12.04.2006 @ 20:21
Script: /Foren/wbblite/team.php?sid=
Referer: http://localhost/Foren/wbblite/index.php |
|
Um den Fehler zu beheben muss Du folgendes machen:
Öffne die Datei Team.php!
Suche nach:
code: |
1:
|
FROM bb".$n."_users u, bb".$n."_groups g |
|
Ersetze durch:
code: |
1:
|
FROM bb".$n."_groups g, bb".$n."_users u |
|
Izzmoo
Mit neuen Versionen von Mysql hat das Lite Probleme in der Team-Ansicht.
Es kommt die Fehlermeldung:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
SQL-DATABASE ERROR
Database error in WoltLab Burning Board: Invalid SQL: SELECT u.userid, u.username, u.invisible, u.receivepm, u.lastactivity, uf.* FROM bb1_users u, bb1_groups g LEFT JOIN bb1_userfields uf ON (u.userid=uf.userid) WHERE u.groupid = g.groupid AND g.ismod=1 ORDER BY u.username ASC
mysql error: Unknown column 'u.userid' in 'on clause'
mysql error number: 1054
Date: 12.04.2006 @ 20:21
Script: /Foren/wbblite/team.php?sid=
Referer: http://localhost/Foren/wbblite/index.php |
|
Um den Fehler zu beheben muss Du folgendes machen:
Öffne die Datei Team.php!
Suche nach:
code: |
1:
|
FROM bb".$n."_users u, bb".$n."_groups g |
|
Ersetze durch:
code: |
1:
|
FROM bb".$n."_groups g, bb".$n."_users u |
|
Bräke
Im UserCP unter Favoriten, sowie in den Suchergebnissen werden die Ordnersymbole / Themenicons nicht korrekt gezeigt. Zur Verdeutlichung ein Screen:
[attach]31950[/attach]
suche in search.php:
code: |
1:
2:
3:
4:
5:
|
if($threads['pollid']!=0) $foldericon="poll";
else $foldericon=ifelse($threads[userid],"dot").ifelse($wbbuserdata['lastvisit']<$threads['lastposttime'] && $threadvisit[$threads['threadid']]<$threads['lastposttime'] && $boardvisit[$threads['boardid']]<$threads['lastposttime'],"new").ifelse($threads[replycount]>=$threads[hotthread_reply] || $threads[views]>=$threads[hotthread_view],"hot").ifelse($threads[closed]!=0,"lock")."folder";
if($wbbuserdata[lastvisit]<$threads[lastposttime] && $threadvisit[$threads[threadid]]<$threads[lastposttime]) eval ("\$firstnew = \"".$tpl->get("board_threadbit_firstnew")."\";");
if($threads[iconid]) $threadicon="<img src=\"$threads[iconpath]\" alt=\"$threads[icontitle]\">";
else $threadicon=" "; |
|
ersetze mit:
code: |
1:
2:
3:
4:
5:
6:
7:
|
if($threads['important']==2) $foldericon="announce";
else $foldericon=ifelse($threads[userid],"dot").ifelse($wbbuserdata['lastvisit']<$threads['lastposttime'] && $threadvisit[$threads['threadid']]<$threads['lastposttime'] && $boardvisit[$threads['boardid']]<$threads['lastposttime'],"new").ifelse($threads[replycount]>=$threads[hotthread_reply] || $threads[views]>=$threads[hotthread_view],"hot").ifelse($threads[closed]!=0,"lock")."folder";
if($wbbuserdata[lastvisit]<$threads[lastposttime] && $threadvisit[$threads[threadid]]<$threads[lastposttime]) eval ("\$firstnew = \"".$tpl->get("board_threadbit_firstnew")."\";");
if($threads['pollid']!=0) $threadicon=makeimgtag("{imagefolder}/poll.gif","");
elseif($threads[iconid]) $threadicon="<img src=\"$threads[iconpath]\" alt=\"$threads[icontitle]\">";
else $threadicon=" "; |
|
-------------------------------------------------------
suche in usercp.php:
code: |
1:
2:
3:
4:
5:
|
if($threads['pollid']!=0) $foldericon="poll";
else $foldericon=ifelse($threads['userid'],"dot").ifelse($wbbuserdata['lastvisit']<$threads['lastposttime'] && $threadvisit[$threads['threadid']]<$threads['lastposttime'],"new").ifelse($threads['replycount']>=$board['hotthread_reply'] || $threads['views']>=$board['hotthread_view'],"hot").ifelse($threads['closed']!=0,"lock")."folder";
if($wbbuserdata['lastvisit']<$threads['lastposttime'] && $threadvisit[$threads['threadid']]<$threads['lastposttime']) eval ("\$firstnew = \"".$tpl->get("board_threadbit_firstnew")."\";");
if($threads['iconid']) $threadicon=makeimgtag($threads['iconpath'],$threads['icontitle']);
else $threadicon=" "; |
|
ersetze mit:
code: |
1:
2:
3:
4:
5:
6:
7:
|
if($threads['important']==2) $foldericon="announce";
else $foldericon=ifelse($threads['userid'],"dot").ifelse($wbbuserdata['lastvisit']<$threads['lastposttime'] && $threadvisit[$threads['threadid']]<$threads['lastposttime'],"new").ifelse($threads['replycount']>=$board['hotthread_reply'] || $threads['views']>=$board['hotthread_view'],"hot").ifelse($threads['closed']!=0,"lock")."folder";
if($wbbuserdata['lastvisit']<$threads['lastposttime'] && $threadvisit[$threads['threadid']]<$threads['lastposttime']) eval ("\$firstnew = \"".$tpl->get("board_threadbit_firstnew")."\";");
if($threads['pollid']!=0) $threadicon=makeimgtag("{imagefolder}/poll.gif","");
elseif($threads['iconid']) $threadicon=makeimgtag($threads['iconpath'],$threads['icontitle']);
else $threadicon=" "; |
|
##############################################
Dabei kann man gleich die Anzeige der Wörter "Ankündigung, Wichtig, Umfrage" korrigieren, so das diese dort auch gezeigt werden.
suche in search.php:
code: |
1:
|
if($threads['pollid']!=0) eval ("\$prefix .= \"".$tpl->get("board_thread_poll")."\";"); |
|
füge dadrüber:
code: |
1:
2:
|
if($threads['important']==2) eval ("\$prefix .= \"".$tpl->get("board_thread_announce")."\";");
if($threads['important']==1) eval ("\$prefix .= \"".$tpl->get("board_thread_important")."\";"); |
|
suche in templates/search_threadbit.tpl:
code: |
1:
|
$firstnew<normalfont> |
|
füge dahinter:
-------------------------------------------------------
suche in usercp.php:
code: |
1:
|
if($threads['pollid']!=0) eval ("\$prefix .= \"".$tpl->get("board_thread_poll")."\";"); |
|
füge dadrüber:
code: |
1:
2:
|
if($threads['important']==2) eval ("\$prefix .= \"".$tpl->get("board_thread_announce")."\";");
if($threads['important']==1) eval ("\$prefix .= \"".$tpl->get("board_thread_important")."\";"); |
|
Bräke
Über einen Umweg ist das Abstimmen bei Umfragen ohne Berechtigung möglich. Die Ergebnisse der Umfrage können dadurch manipuliert werden. Die ACP-Gruppen-Option "Kann an Umfragen teilnehmen?" wird dabei nicht berücksichtigt.
Meldung und Bugfix von
Beckebans für das WBBLite.
suche in pollvote.php:
code: |
1:
|
$db->query("INSERT INTO bb".$n."_votes (id,votemode,userid,ipaddress) VALUES ('$pollid','1','$wbbuserdata[userid]','$REMOTE_ADDR')"); |
|
füge darüber:
code: |
1:
|
if($wbbuserdata['canvotepoll']) { |
|
suche in pollvote.php:
füge darüber:
code: |
1:
|
} else eval("error(\"".$tpl->get("error_login")."\");"); |
|
Schrimm
Hallo,
Da mywbb nun Offline gegangen ist und dieses Problem anscheinend hier noch nicht angesprochen wurde, möchte ich dies nun hier
neu erwähnen.
Sollte jemand das wbblite 1.0.x unter MySQL 5 versuchen zu installieren, kann folgende Fehlermeldung erscheinen:
php: |
1:
|
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=HEAP' |
|
Dieser Fehler entsteht, weil die Abwärtskompatibilität für "TYPE" nicht mehr vorhanden ist.
Meines Wissens nach wurde jene mit der MySQL-Version 5.5 abgeschafft.
Sollte dieser Fehler, oder ein ähnlicher mit "TYPE" zusammenhängender Fehler auftreten, empfiehlt es sich "TYPE" mit "ENGINE" zu ersetzen.
Dies sollte, wenn möglich, vor der Installation des wbblites durchgeführt werden, da es sonst zu Problemen kommen kann.
Speziell gilt für die Installation des wbblites:
Suche in acp/lib/structure.sql nach:
ersetze gegen:
Damit sollte die Installation des wbblites ohne Probleme funktioneren.
Der Fehler kann jedoch auch bei der Installation eines Hacks auftreten.
Darum gilt generell:
"TYPE" mit "ENGINE" zu ersetzen, sofern eine ähnliche Fehlermeldung in Verbindung mit "TYPE" auftritt.
Schrimm
Hallo,
Einige kennen sicher das Problem, dass neue Beiträge, trotz Ausloggens, nach dem Einloggen weiterhin als neu makiert bleiben.
Eine Lösung gab es dazu, von mir, auf mywbb.info.
Da jene Seite nicht mehr existiert und hier nur auf dortigen Beitrag verlinkt wird, möchte ich nun diese "Lösung" hier veröffentlichen.
Suche in /logout.php nach:
php: |
1:
|
$db->query("UPDATE bb".$n."_sessions SET userid = '0' WHERE hash = '$sid'"); |
|
füge darunter ein:
php: |
1:
|
$db->query("UPDATE bb".$n."_users SET lastvisit = '$wbbuserdata[lastactivity]' WHERE userid = '$wbbuserdata[userid]'"); |
|
Schrimm
Hallo,
Hier wieder ein Thread, den es auf mywbb gab und auf y****** nicht.
Die Lösung ist jedoch nützlich und hilft neben dem {cssfile}-Problem auch bei "Formatproblemen" und in gewissen Fällen auch bei der "Sonstigen/Hauptseite/Startseite"-Problem des Wer ist Wo-Hacks.
Die Lösung stammt von Shr522, der damals auf mywbb aktiv war.
Suche in acp/lib/class_tpl_file.php nach:
php: |
1:
|
&& $row['substitute'] |
|
lösche es!
Suche weiter nach:
php: |
1:
2:
|
default:
$template = str_replace($row['variable'],$row['substitute'],$template); |
|
ersetze gegen:
php: |
1:
2:
|
default:
if(trim($row['substitute'])) $template = str_replace($row['variable'],$row['substitute'],$template); |
|
Von der Lösung das "{cssfile}" in der headerinclude.tpl zu entfernen ist strengstens abzuraten!
Schrimm
Hallo,
Die Änderung sind, pro Datei, in der Reihenfolge durchzuführen, wie sie beschrieben sind!
Es besteht die Möglichkeit der SQL-Injection in der acp/avatar.php:
Lösung:
suche in acp/avatar.php:
php: |
1:
|
'".$_POST['groupid']."', '".$_POST['needposts']."' |
|
ersetze gegen:
php: |
1:
|
'".intval($_POST['groupid'])."', '".intval($_POST['needposts'])."' |
|
suche:
php: |
1:
|
$db->query("UPDATE bb".$n."_avatars SET groupid = '".$_POST['groupid']."', needposts = '".$_POST['needposts']."' WHERE avatarid = '".$_POST['avatarid']."'"); |
|
ersetze gegen:
php: |
1:
|
$db->query("UPDATE bb".$n."_avatars SET groupid = '".intval($_POST['groupid'])."', needposts = '".intval($_POST['needposts'])."' WHERE avatarid = '".intval($_POST['avatarid'])."'"); |
|
suche
ALLE:
php: |
1:
|
avatarid = '".$_REQUEST['avatarid']."' |
|
ersetze
ALLE gegen:
php: |
1:
|
avatarid = '".intval($_REQUEST['avatarid'])."' |
|
suche
ALLE:
php: |
1:
|
avatarid = '".$_POST['avatarid']."' |
|
ersetze
ALLE gegen:
php: |
1:
|
avatarid = '".intval($_POST['avatarid'])."' |
|
suche:
php: |
1:
|
,'".$_POST['groupid']."', '".$_POST['needposts']."')"); |
|
ersetze gegen:
php: |
1:
|
,'".intval($_POST['groupid'])."', '".intval($_POST['needposts'])."')"); |
|
Es besteht die Möglichkeit der SQL-Injection in der acp/board.php:
Lösung:
suche in acp/board.php
php: |
1:
|
boardorder='$val' WHERE boardid = '$key' |
|
ersetze gegen:
php: |
1:
|
boardorder='".intval($val)."' WHERE boardid = '".intval($key)."' |
|
suche:
php: |
1:
|
boardid = '$parentid' |
|
ersetze gegen:
php: |
1:
|
boardid = '".intval($parentid)."' |
|
suche:
php: |
1:
|
$parentlist = $result['parentlist'].",".$parentid; |
|
ersetze gegen:
php: |
1:
|
$parentlist = $result['parentlist'].",".intval($parentid); |
|
suche:
php: |
1:
|
parentid = '$parentid' |
|
ersetze gegen:
php: |
1:
|
parentid = '".intval($parentid)."' |
|
suche:
php: |
1:
|
'$style_set','$parentid' |
|
ersetze gegen:
php: |
1:
|
'".intval($style_set)."','".intval($parentid)."' |
|
suche:
php: |
1:
|
,'$allowbbcode','$allowimages','$allowhtml','$allowsmilies','$allowicons','$daysprune' |
|
ersetze gegen:
php: |
1:
|
,'".intval($allowbbcode)."','".intval($allowimages)."','".intval($allowhtml)."','".intval($allowsmilies)."','".intval($allowicons)."','".intval($daysprune)."' |
|
suche:
ersetze gegen:
php: |
1:
|
,'".intval($postorder)."' |
|
suche:
php: |
1:
|
,'$closed','$isboard','$invisible' |
|
ersetze gegen:
php: |
1:
|
,'".intval($closed)."','".intval($isboard)."','".intval($invisible)."' |
|
suche:
php: |
1:
|
boardid='$parentid' |
|
ersetze gegen:
php: |
1:
|
boardid='".intval($parentid)."' |
|
suche:
php: |
1:
|
$parentlist.=",$parentid"; |
|
ersetze gegen:
php: |
1:
|
$parentlist.=",'".intval($parentid)."'"; |
|
suche:
php: |
1:
|
$parentchange=" parentid='$parentid', parentlist='$parentlist',"; |
|
ersetze gegen:
php: |
1:
|
$parentchange=" parentid='".intval($parentid)."', parentlist='$parentlist',"; |
|
suche:
php: |
1:
|
styleid='$style_set' |
|
ersetze gegen:
php: |
1:
|
styleid='".intval($style_set)."' |
|
suche:
php: |
1:
|
, allowbbcode='$allowbbcode', allowimages='$allowimages', allowhtml='$allowhtml', allowsmilies='$allowsmilies', allowicons='$allowicons', daysprune='$daysprune' |
|
ersetze gegen:
php: |
1:
|
, allowbbcode='".intval($allowbbcode)."', allowimages='".intval($allowimages)."', allowhtml='".intval($allowhtml)."', allowsmilies='".intval($allowsmilies)."', allowicons='".intval($allowicons)."', daysprune='".intval($daysprune)."' |
|
suche:
php: |
1:
|
, postorder='$postorder' |
|
ersetze gegen:
php: |
1:
|
, postorder='".intval($postorder)."' |
|
suche:
php: |
1:
|
, closed='$closed', isboard='$isboard', invisible='$invisible' |
|
ersetze gegen:
php: |
1:
|
, closed='".intval($closed)."', isboard='".intval($isboard)."', invisible='".intval($invisible)."' |
|
suche:
php: |
1:
|
childlist='0' WHERE boardid='$parentid' |
|
ersetze gegen:
php: |
1:
|
childlist='0' WHERE boardid='".intval($parentid)."' |
|
suche:
php: |
1:
|
'0$childlist' WHERE boardid='$parentid' |
|
ersetze gegen:
php: |
1:
|
'0$childlist' WHERE boardid='".intval($parentid)."' |
|
Es besteht die Möglichkeit der SQL-Injection in der acp/group.php:
Lösung:
suche in acp/group.php:
ersetze gegen:
php: |
1:
|
'".intval($canviewboard)."' |
|
suche:
php: |
1:
|
'$canviewoffboard' |
|
ersetze gegen:
php: |
1:
|
'".intval($canviewoffboard)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canusesearch)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canusepms)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canstarttopic)."' |
|
suche:
php: |
1:
|
'$canreplyowntopic' |
|
ersetze gegen:
php: |
1:
|
'".intval($canreplyowntopic)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canreplytopic)."' |
|
suche:
php: |
1:
|
'$canpostwithoutmoderation' |
|
ersetze gegen:
php: |
1:
|
'".intval($canpostwithoutmoderation)."' |
|
suche:
php: |
1:
|
'$caneditownpost' |
|
ersetze gegen:
php: |
1:
|
'".intval($caneditownpost)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($candelownpost)."' |
|
suche:
php: |
1:
|
'$cancloseowntopic' |
|
ersetze gegen:
php: |
1:
|
'".intval($cancloseowntopic)."' |
|
suche:
php: |
1:
|
'$candelowntopic' |
|
ersetze gegen:
php: |
1:
|
'".intval($candelowntopic)."' |
|
suche:
php: |
1:
|
'$caneditowntopic' |
|
ersetze gegen:
php: |
1:
|
'".intval($caneditowntopic)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canpostpoll)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canvotepoll)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canuseavatar)."' |
|
suche:
php: |
1:
|
'$canuploadavatar' |
|
ersetze gegen:
php: |
1:
|
'".intval($canuploadavatar)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canratethread)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canviewmblist)."' |
|
suche:
php: |
1:
|
'$appendeditnote' |
|
ersetze gegen:
php: |
1:
|
'".intval($appendeditnote)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($avoidfc)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($ismod)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($issupermod)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canuseacp)."' |
|
suche:
php: |
1:
|
'$canviewprofile' |
|
ersetze gegen:
php: |
1:
|
'".intval($canviewprofile)."' |
|
suche:
php: |
1:
|
'$canviewcalender' |
|
ersetze gegen:
php: |
1:
|
'".intval($canviewcalender)."' |
|
suche:
php: |
1:
|
'$canprivateevent' |
|
ersetze gegen:
php: |
1:
|
'".intval($canprivateevent)."' |
|
suche:
php: |
1:
|
'$canpublicevent' |
|
ersetze gegen:
php: |
1:
|
'".intval($canpublicevent)."' |
|
suche:
ersetze gegen:
php: |
1:
|
'".intval($canrateusers)."' |
|
suche:
php: |
1:
|
canviewboard='$canviewboard' |
|
ersetze gegen:
php: |
1:
|
canviewboard='".intval($canviewboard)."' |
|
suche:
php: |
1:
|
canviewoffboard='$canviewoffboard' |
|
ersetze gegen:
php: |
1:
|
canviewoffboard='".intval($canviewoffboard)."' |
|
suche:
php: |
1:
|
canusesearch='$canusesearch' |
|
ersetze gegen:
php: |
1:
|
canusesearch='".intval($canusesearch)."' |
|
suche:
php: |
1:
|
canusepms='$canusepms' |
|
ersetze gegen:
php: |
1:
|
canusepms='".intval($canusepms)."' |
|
suche:
php: |
1:
|
canstarttopic='$canstarttopic' |
|
ersetze gegen:
php: |
1:
|
canstarttopic='".intval($canstarttopic)."' |
|
suche:
php: |
1:
|
canreplyowntopic='$canreplyowntopic' |
|
ersetze gegen:
php: |
1:
|
canreplyowntopic='".intval($canreplyowntopic)."' |
|
suche:
php: |
1:
|
canreplytopic='$canreplytopic' |
|
ersetze gegen:
php: |
1:
|
canreplytopic='".intval($canreplytopic)."' |
|
suche:
php: |
1:
|
canpostwithoutmoderation='$canpostwithoutmoderation' |
|
ersetze gegen:
php: |
1:
|
canpostwithoutmoderation='".intval($canpostwithoutmoderation)."' |
|
suche:
php: |
1:
|
caneditownpost='$caneditownpost' |
|
ersetze gegen:
php: |
1:
|
caneditownpost='".intval($caneditownpost)."' |
|
suche:
php: |
1:
|
candelownpost='$candelownpost' |
|
ersetze gegen:
php: |
1:
|
candelownpost='".intval($candelownpost)."' |
|
suche:
php: |
1:
|
cancloseowntopic='$cancloseowntopic' |
|
ersetze gegen:
php: |
1:
|
cancloseowntopic='".intval($cancloseowntopic)."' |
|
suche:
php: |
1:
|
candelowntopic='$candelowntopic' |
|
ersetze gegen:
php: |
1:
|
candelowntopic='".intval($candelowntopic)."' |
|
suche:
php: |
1:
|
caneditowntopic='$caneditowntopic' |
|
ersetze gegen:
php: |
1:
|
caneditowntopic='".intval($caneditowntopic)."' |
|
suche:
php: |
1:
|
canpostpoll='$canpostpoll' |
|
ersetze gegen:
php: |
1:
|
canpostpoll='".intval($canpostpoll)."' |
|
suche:
php: |
1:
|
canvotepoll='$canvotepoll' |
|
ersetze gegen:
php: |
1:
|
canvotepoll='".intval($canvotepoll)."' |
|
suche:
php: |
1:
|
canuseavatar='$canuseavatar' |
|
ersetze gegen:
php: |
1:
|
canuseavatar='".intval($canuseavatar)."' |
|
suche:
php: |
1:
|
canuploadavatar='$canuploadavatar' |
|
ersetze gegen:
php: |
1:
|
canuploadavatar='".intval($canuploadavatar)."' |
|
suche:
php: |
1:
|
canratethread='$canratethread' |
|
ersetze gegen:
php: |
1:
|
canratethread='".intval($canratethread)."' |
|
suche:
php: |
1:
|
appendeditnote='$appendeditnote' |
|
ersetze gegen:
php: |
1:
|
appendeditnote='".intval($appendeditnote)."' |
|
suche:
php: |
1:
|
avoidfc='$avoidfc' |
|
ersetze gegen:
php: |
1:
|
avoidfc='".intval($avoidfc)."' |
|
suche:
ersetze gegen:
php: |
1:
|
ismod='".intval($ismod)."' |
|
suche:
php: |
1:
|
issupermod='$issupermod' |
|
ersetze gegen:
php: |
1:
|
issupermod='".intval($issupermod)."' |
|
suche:
php: |
1:
|
canuseacp='$canuseacp' |
|
ersetze gegen:
php: |
1:
|
canuseacp='".intval($canuseacp)."' |
|
suche:
php: |
1:
|
canviewprofile='$canviewprofile' |
|
ersetze gegen:
php: |
1:
|
canviewprofile='".intval($canviewprofile)."' |
|
suche:
php: |
1:
|
canviewcalender='$canviewcalender' |
|
ersetze gegen:
php: |
1:
|
canviewcalender='".intval($canviewcalender)."' |
|
suche:
php: |
1:
|
canprivateevent='$canprivateevent' |
|
ersetze gegen:
php: |
1:
|
canprivateevent='".intval($canprivateevent)."' |
|
suche:
php: |
1:
|
canpublicevent='$canpublicevent' |
|
ersetze gegen:
php: |
1:
|
canpublicevent='".intval($canpublicevent)."' |
|
suche:
php: |
1:
|
canrateusers='$canrateusers' |
|
ersetze gegen:
php: |
1:
|
canrateusers='".intval($canrateusers)."' |
|
suche:
php: |
1:
|
canviewmblist='$canviewmblist' |
|
ersetze gegen:
php: |
1:
|
canviewmblist='".intval($canviewmblist)."' |
|
Es besteht die Möglichkeit der SQL-Injection in der acp/icon.php:
Lösung:
suche
ALLE in acp/icon.php:
php: |
1:
|
WHERE iconid = '".$_POST['iconid']."' |
|
ersetze
ALLE gegen:
php: |
1:
|
WHERE iconid = '".intval($_POST['iconid'])."' |
|
suche
ALLE:
php: |
1:
|
WHERE iconid = '".$_REQUEST['iconid']."' |
|
ersetze
ALLE gegen:
php: |
1:
|
WHERE iconid = '".intval($_REQUEST['iconid'])."' |
|
Es besteht die Möglichkeit der SQL-Injection in der acp/ranks.php:
Lösung:
suche in acp/ranks.php:
php: |
1:
|
,'".$_POST['group']."','".$_POST['gender']."' |
|
ersetze gegen:
php: |
1:
|
,'".intval($_POST['group'])."','".intval($_POST['gender'])."' |
|
suche:
php: |
1:
|
groupid = '".$_POST['group']."', gender = '".$_POST['gender']."' |
|
ersetze gegen:
php: |
1:
|
groupid = '".intval($_POST['group'])."', gender = '".intval($_POST['gender'])."' |
|
Die Funktionen betreffend der avatar.php, board.php, group.php, icon.php und ranks.php sollten, nach den Änderungen, auf ihre funktionalität geprüft werden.
Es ist nicht ausgeschlossen, dass eine der beschriebenen Änderungen fehlerhaft sein könnte.
Beckebans
Mir ist aufgefallen, dass Ankündigungen in der Themenübersicht auch angezeigt werden, wenn der User kein Leserecht für das Unterforum, in dem die Ankündigung erstellt wurde, hat. Da es dann beim Klick auf das Thema eh nur eine Fehlermeldung gibt, ist hier eine Möglichkeit die Ankündigung erst gar nicht anzuzeigen:
==> board.php
Suche:
php: |
1:
2:
3:
4:
5:
6:
|
//$result = $db->query("SELECT threadid FROM bb".$n."_threads WHERE boardid='$boardid' AND important = 2 AND visible = 1");
$result = $db->query("SELECT threadid FROM bb".$n."_announcements WHERE boardid='$boardid'");
while($row = $db->fetch_array($result)) {
$announcecount++;
$announceids .= ",".$row['threadid'];
} |
|
Ersetzen durch:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
$result = $db->query("SELECT threadid FROM bb".$n."_announcements WHERE boardid='".$boardid."'");
while($row = $db->fetch_array($result)) {
$announcethread = $db->query_first("SELECT threadid, boardpermission FROM bb".$n."_threads LEFT JOIN bb".$n."_permissions USING (boardid) WHERE threadid='".$row['threadid']."' AND groupid='".$wbbuserdata['groupid']."' AND visible = 1");
if($announcethread['threadid'] && $announcethread['boardpermission'] == 1) {
$announcecount++;
$announceids .= ",".$announcethread['threadid'];
}
} |
|
Für Verbesserungsvorschläge bin ich offen
S!equenz
Update
Öffne class_parse.php und suche:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
static function convertHTML($post,$x=true) {
$post = str_replace("<","&lt;",$post);
$post = str_replace(">","&gt;",$post);
$post = str_replace("<","<",$post);
$post = str_replace(">",">",$post);
if($x) {
$post = str_replace("{","{",$post);
$post = str_replace("}","}",$post);
}
return $post;
}
|
|
Ersetze mit:
code: |
1:
2:
3:
4:
5:
6:
|
static function convertHTML($post) {
$post = htmlentities($post,ENT_QUOTES | ENT_HTML401);
return $post;
}
|
|
Finde:
code: |
1:
|
if($allowhtml==0) $post=$this->convertHTML($post,false); |
|
Ersetze es gegen:
code: |
1:
|
if($allowhtml==0) $post=$this->convertHTML($post); |
|
Update
Nun wurde von Schrimm doch eine einfachere Lösung bereitgestellt:
Öffne class_parse.php und ersetze:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
|
static function convertHTML($post,$x=true) {
$post = str_replace("<","&lt;",$post);
$post = str_replace(">","&gt;",$post);
$post = str_replace("<","<",$post);
$post = str_replace(">",">",$post);
if($x) {
$post = str_replace("{","{",$post);
$post = str_replace("}","}",$post);
}
return $post;
} |
|
mit:
code: |
1:
2:
3:
4:
|
static function convertHTML($post,$x=true) {
$post = htmlentities($post);
return $post;
} |
|
Für originale Foren die noch unter PHP 5.2 etc. laufen ´static´ weglassen.
Das wbblite wandelt standartmäßig z.b. in Beiträgen um.
Dies ist natürlich schlecht wenn man z.b. PHP Skripte posten möchte.
Folgendes schafft abhilfe.
Schrimm wollte die Lösung nicht preisgeben, daher habe ich das nun übernommen.
Dies setzt PHP 7.1 voraus.
Für 5.2 etc. muss es ein wenig abgewandelt werden.
Öffne functions.php und finde:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
function stripcrap($post) {
if($post) {
$post=preg_replace("/(\?|\&){1}sid=[a-z0-9]{32}/","\\1sid=",$post);
$post=preg_replace_callback("/(&#)(\d+)(;)/",function($matches) {return chr(intval($matches[2]));},$post);
}
return $post;
}
|
|
Ersetze mit:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
|
function stripcrap($post) {
if($post) {
$post=htmlspecialchars_thrive_template_software($post);
$post=preg_replace("/(\?|\&){1}sid=[a-z0-9]{32}/","\\1sid=",$post);
$post=preg_replace_callback("/(&#)(\d+)(;)/",function($matches) {return chr(intval($matches[2]));},$post);
}
return $post;
}
|
|
Öffne class_parse.php und finde:
code: |
1:
|
$code=htmlspecialchars_thrive_template_software($code); |
|
Ersetze es mit:
code: |
1:
|
//$code=htmlspecialchars_thrive_template_software($code); |
|
Finde:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
static function convertHTML($post,$x=true) {
$post = str_replace("<","&lt;",$post);
$post = str_replace(">","&gt;",$post);
$post = str_replace("<","<",$post);
$post = str_replace(">",">",$post);
if($x) {
$post = str_replace("{","{",$post);
$post = str_replace("}","}",$post);
}
return $post;
}
|
|
Ersetze es mit:
code: |
1:
2:
3:
4:
5:
|
static function convertHTML($post,$x=true) {
return $post;
}
|
|
Finde:
code: |
1:
|
$code = "<?php ".trim($code)." ?>"; |
|
Füge darunter ein:
code: |
1:
|
$code = rehtmlspecialchars_thrive_template_software($code); |
|