anpera.net https://anpera.dyndns.org/phpbb3/ |
|
Server SPackt bei " in RP-Posts und Bios o.O https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=4735 |
Seite 1 von 1 |
Autor: | Anderswelt [ Sa 06 Dez, 2008 17:59 ] |
Betreff des Beitrags: | Server SPackt bei " in RP-Posts und Bios o.O |
Hallo.. ich hab ein Problem.. ich habe 3 Server.. die Immer online sind.. ich habe die Letzten Tage NICHT an den scripten herrum gefummelt und dennoch tauchte ein Fehelr auf allen drei servern Paralel auf wie aus dem nichts und zwar: INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'kitsunevillage',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 '"`^"")' at line 1 sprich er will das " nicht anerkennen, was natürlich mist ist da so gut wie 90% der user ihr gesprochenes in " setzen.. hättet ihr vielelicht eine Idee? Das sagt der Support dazu: Zitat: Hallo, in welchem Kontext steht denn die Abfrage? Wenn Sie sie in einer Variable definieren und als Tags ein " nehmen, kann die Abfrage nicht funktionieren. Beispiel: $query = "INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'kitsunevillage',1,"`^"")"; Dieser Umstand leuchtet Ihnen hoffentlich ein. In jedem Fall hat das Problem nix mit unseren Servereinstellungen zu tun. Sie mischen hier einfach MySQL-Syntax mit irgendwelchen Eingaben die schlecht oder nicht gefiltert werden. MySQL verwendet zur Trennung zwischen einzelnen Feldern ein '. Das heißt in ihrem Fall: INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'kitsunevillage',1,'"`^""'); Wenn Sie jedoch anstelledessen ein " schreiben, ist der Fehler nicht verwunderlich, da ein " hier nicht zu suchen hat. Wenn dann, können Sie "" in die Datenbank schreiben, sofern Sie wie in meinem Beispiel das Feld begrenzen durch zwei '' am Anfang und am Ende. Obwohl dieser Umstand schon für sich allein problemerklärend ist, kommt noch dazu, dass -selbst wenn!- MySQL als Trennoperator zwischen einzelnen Feldern " verwenden würde, dieser hier nicht richtig interpretiert werden würde, da man nicht am Anfang ein " und am Ende "" verwenden kann. Weiters empfehle ich Ihnen als sanitizing function auf mysql_real_escape_string zurückzugreifen um Benutzereingaben zu überprüfen. Verwenden Sie nämlich als Seperator in MySQL ein ' und lassen dem Benutzer ebenfalls ein ' eingeben, ermöglichen Sie SQL-Injection (http://de.wikipedia.org/wiki/SQL-Injection). Mit freundlichen Grüßen, Johannes Feichtner Elite Hosting Support UND Zitat: > Hallo, > > nunja, es wurde nun auf PHP 5.2.7 und Suhosin 0.9.27 upgraded. Es ist > davon auszugehen, dass Suhosin hier strikter die Syntax analysiert um > eben die > genannte Möglichkeit zur SQL-Injection einzugrenzen bzw. zu verhindern. > Sollte die Anfrage in der von Ihnen genannten Form per se möglich > gewesen sein, > dann war das lediglich eine Art "Toleranz" des Servers (vergleichbar mit > der Toleranz eines Browsers bei HTML-Code). Über die Änderungen die > durch ein > Upgrade entstehen, haben wir keinen Einfluss und wenn es darum geht, > dass das Upgrade sogar etwas "richtiggestellt" bzw. in puncto Sicherheit > verbessert hat, > dann kann ich nur dazu aufrufen, saubere und korrekte Abfragen > durchzuführen. > > Mit freundlichen Grüßen, > Johannes Feichtner > Elite Hosting Support meine Lösung: ich habe die Bio und Commentare durch preg_replace gefiltert und " mit ' erstzt was natürlich nur ne notlösung ist und keine dauerhafte , da ich keien User im Usereditor bearbeiten kann die noch nicht ihre Bio gespeichert haben, sprioch ein " in der Bio haben.. dann bekomm ich ne ähnliche fehlermeldung und lande im UE badnav^^ ich hoffe jemand von euch hat eine idee...^^ €dit: 2. Support quote hionzugefügt. |
Autor: | Doctamy [ Sa 06 Dez, 2008 18:45 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
könntest du mal einen Teil davon hier hinein posten? |
Autor: | Anderswelt [ Sa 06 Dez, 2008 19:13 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
wovon von dem kommentarfilter? klar $dasisverboten= 'javascript:|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup|onabort|onfocus|onload|onblur|onchange|onerror|onreset|onselect|obsubmit|onunload|"|style'; $commentary = preg_replace("'$dasisverboten'","'",soap($_POST[insertcommentary][$section])); rot was durchsucht wird.. grün mit dem es ersetzt wird^^ |
Autor: | Eichi [ So 07 Dez, 2008 00:52 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Na, die escape-Funktion magic_quotes, die generell angeschaltet sein sollte hat dein Betreiber durch das Update wohl ausgeschaltet, mit addslashes oder eben magic_qutes kannst du die SQLs wieder ausführen, ich kann nur nicht ganz nachvollziehen warum das ausgeschaltet wird, schließlich ist es (wenn man nicht so sauber arbeitet und alle SQL-Anweisungen mit addslashes oder magic_quotes einzeln verarbeitet, und das ist GANZ SICHER nicht der Fall in LogD) eine kritische Sicherheitslücke! Also, frag nochmal nach bzw. falls du selber Zugriff auf deine php.ini hast, setze die verschiedenen magic_quotes wieder auf "on"! magic_quotes_gpc magic_quotes_runtime Davon mal abgesehen, ich seh grad, dass magic_quotes in PHP6 abgeschafft wird, was solls denn für eine Alternative geben? oO EDIT Ich bin blöed xD Mach einfach in der Ausführung von db_query ein addslashes() oder mysql_real_escape_string() (Letzteres ist sicherer) um die SQL herum, ich hoffe du nutzt in deinem Code überall db_query anstatt mysql_query ![]() EDIT II Mal so versuchen.. dbwrapper.php suchen: $this->bbcode_second_pass_code('php', 'function db_query($sql){ ') ersetzen durch: $this->bbcode_second_pass_code('php', 'function db_query($sql){ $sql = mysql_real_escape_string($sql); ') LG, Eichi |
Autor: | Anderswelt [ So 07 Dez, 2008 13:40 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
also die php.inf kann ich leider selbst nicht ändern.. und der sevrerprovider weigert sich strikt dei Änderung rückgängig zumachen weils ja sooooo eine große sicherheitslücke in deren augen ist... *grml* udn deine Änderung an der DBwrapper ändert elider an dem Problem auch nichts ![]() we es aussieht darf ich wirklich noch jede weitere angabe in der Prefs filtern, damit ich die leute im UE bearbeiten kann *seufz* und dann auch noch das if abschalten das aussagt das nur gespeichert wird wenn was verändert wurde, so das auch sicher alles mit einem speichern ersetzt wird.. ~.~ oder gibt es einen befehl der alle bios so iwei einmal updatet?^^ |
Autor: | Auric [ So 07 Dez, 2008 15:43 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
äähm, wenn du schon über die eingaben ein pre_repalce laufen lässt, warum maskierst du dann nich einfach das Zeichen, anstatt es mit einem anderen, ebenso vom problem betroffenen Zeichen zu ersetzen. Das kann man manuell machen oder eben (besser) mit den schon genannten Kandidatem addslashes und mysql_real_escape_string. Speziell zu letzterem wäre ein db_escape-wrapper für lotgd recht sinnvoll. Du kannst natürlich auch gleich die ganz große Keule umsteigen, mysqli verwenden und dann prepared Statements für deine Eingaben nutzen - IMHO die sauberste und sicherste Methode derzeit |
Autor: | Anderswelt [ So 07 Dez, 2008 22:05 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
uff das war jetzt chinesisch für mich xD ich muss den post die woche mal zusammen googeln xD hab grad zu hause leider kein inet sondenr bin im inet cafe^^ |
Autor: | Auric [ So 07 Dez, 2008 23:50 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Na bevor du noch allzu sehr suche must will ich das noch mal etwas umfangreicher Formulieren: Dein Problem ist ja, wenn ich es recht sehe, das du einen String >>>`^"<<< (ohne die <<< versteht sich ^^) so in dieser Form in die DB schreiben willst und dein Hoster sich muckiert, das Anführungszeichen ja eventuell für SQL-Injections genutzt werden könnten. Nun gibt es verschiedene Möglichkeiten das Problem aus der Welt zu bringen. A) Du maskierst/escapest die Anführungszeichen, machst also aus einem >>>"^<<< ein >>>\"^<<< - dadurch Verliert das Zeichen eben seine "Meta-Fähigkeit", also seine Funktion als Zeichenketten-Begrenzer in PHP oder MySQL und wird zu einem einfachen Zeichen. Das kannst du eben auf verschiedene Weisen machen: a1) per preg_replace, str_replace oder ähnliches - also "per Hand", was aber nicht so ganz zu empfehlen ist a2) Du nimmst die php-Funktion addslashes, die das ganze automatisch und auch recht sauber löst. a3) Du nimmst die MySQL-spezifische Variante mysql_real_escape_string - die das ganze auch sehr sauber und sicher löst. Da bei deinem Hoster noch irgendeine zusatzebene in PHP eingeklinkt ist, kann es sein, das Varianten nicht funktioinieren bzw. immer noch gemäckert wird - einfach mal ausprobieren. Wichtig ist hier natürlich, dass du die Texte an der richtigen Stelle maskierst, aber das wird sich (spätestens nach ein bisschen testen) schon finden. B) Du benutzt die modernere Schnittstelle mysqli und die damit erschienene unterstützung für Prepared Statements. Dazu ist allerdings etwas mehr aufwand von nöten, da die Art, wie Queries gesendet werden dort prinzipiell etwas abweicht. Diese technik ist allerdings extrem sicher und wird an vielen Stellen empfohlen - speziell bei vielen Querys gleicher Struktur aber unterschiedlicher Daten ist es sogar schneller als die normalen Querys. Mehr dazu findest du in der PHP-Dokumentation oder sicher auch bei Google. Letztenendes wäre es auf jeden Fall gut, wenn du deine Ergebnisse und die Lösung hier posten könntest, damit auch andere mit gleichen problemen nicht lange suchen müssen und man daraus vielleicht so gar eine allgemeine Maskierungsfunktion (z.B. db_escape) entwickeln könnte, die diese Aufgaben kapselt. Grüße, Auric |
Autor: | Eliwood [ Mo 08 Dez, 2008 11:41 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Ich empfehle die MySQLi-Prepared-Statements *nur* bei Queries, die keine Einträge zurückliefern. Bei einem Select ist das ERgebnis nämlich äusserst hackelig... Als Pille für Prepared Statements habe ich allerdings mal einen Imitator geschrieben, der das Verhalten von PDO (Das IMO sehr gut ist) imitiert: $this->bbcode_second_pass_code('', 'function db_query_secure($sql, $args) { /** * db_query_secure() * Eine Wrapper für mysql_query mit Vorkehrungen gegen SQL-Injections * Imitiert PDO::Prepare und PDO::Execute * * Version 1.0 vom 6. August 2008 * * 2008 by Basilius Sauter * Lizenziert unter der GNU GPL in Version 2 oder neuer * Basiert auf der Originalen Funktion db_query und dem MySQL-Wrapper * des Engelsreiches */ # Verfügbarmachen einiger Variablen für die Zeitauswertung global $dbqueriesthishit, $dbtimethishit; # Einfügen der Argumente und maskieren derselbigen foreach($args as $key => $value) { # Maskieren von ? und : im Argument, sofern keine Zahl vorhanden ist if(is_int($value) === false AND is_numeric($value) === false) { $value = str_replace('?', '!-!QUESTION_MARK_QWERTZU!-!', $value); $value = str_replace(':', '!-!DOUBLE_POINT_QWERTZU!-!', $value); } if($key == '?' OR is_numeric($key)) { if(is_int($value) OR is_float($value)) { # Integer und Fliesskommazahlen enthalten keine Gefährlichen Zeichen. Eine Maskierung oder das # Setzen in Fuss-Zeichen (') nicht notwendig und kann zu verfälschenden Resultaten führen $id = md5(mt_rand(0, 30000)); $sql = preg_replace('/\?/', ":PREREPLACE_$id", $sql, 1); # preg_replace, da str_replace keine Limitationen beherrscht $sql = str_replace(":PREREPLACE_$id", $value, $sql); } else { $value = db_real_escape_string($value); # Wrapper-Funktion für mysql_real_escape_string() $id = md5(mt_rand(0, 30000)); $sql = preg_replace('/\?/', ":PREREPLACE_$id", $sql, 1); # preg_replace, da str_replace keine Limitationen beherrscht $sql = str_replace(":PREREPLACE_$id", "'$value'", $sql); } } elseif(substr($key, 0, 1) == ':') { if(is_int($value) OR is_float($value)) { # Integer und Fliesskommazahlen enthalten keine Gefährlichen Zeichen. Eine Maskierung oder das # Setzen in Fuss-Zeichen (') nicht notwendig und kann zu verfälschenden Resultaten führen $sql = str_replace($key, "$value", $sql); } else { $value = db_real_escape_string($value); # Wrapper-Funktion für mysql_real_escape_string() $sql = str_replace($key, "'".$value."'", $sql); } } } # Demaskieren der Platzhalter für ? und : $sql = str_replace('!-!QUESTION_MARK_QWERTZU!-!', '?', $sql); $sql = str_replace('!-!DOUBLE_POINT_QWERTZU!-!', ':', $sql); # Zeitmessung für DB-Statistik $dbqueriesthishit++; $dbtimethishit -= getmicrotime(); # Funktionsname zusammensetzen $fname = DBTYPE."_query"; # Schreiben in die Datenbank $res = $fname($sql, LINK); # Fehlerausgabe if($res === false) { global $session; if($session['user']['superuser'] >= 3) { printf("<pre>%s</pre>", HTMLSpecialchars($sql)); } print db_error(LINK); exit; } # Zeitmessung für DB-Statistik $dbtimethishit += getmicrotime(); # Rückgabe return $res; } function db_real_escape_string($input) { $fname = DBTYPE."_real_escape_string"; $output = $fname($input); return $output; }') Anwendung: $this->bbcode_second_pass_code('', '$args = array( 'Testeingabe mit bösen Zeichen "\' \\', ':var' => 'Testeingabe mit bösen Zeichen "\' \\', 3450.345, # Irgend eine Zahl ); db_query_secure("INSERT INTO testtable (field1, field2, field3) VALUES (?, :var, ?)", $args);') Im richtigen Server-Ablauf ungetestet - funktionierte aber im Test-Case. Übernehme aber natürlich - wie immer - keine Garantie. |
Autor: | Eliwood [ Mo 08 Dez, 2008 17:04 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Noch eine (intressante) Anmerkung: Falls du einen Server mit PHP 5.2.7 hat - schreibe schleunigst deinem Provider, er solle PHP auf 5.2.6 zurück rollen. PHP 5.2.7 wurde zurück gezogen, weil ein schwerwiegender Bug im Zusammenhang mit magic_quotes_gpc aufgetreten ist. http://www.heise.de/security/PHP-5-2-7- ... ung/120072 |
Autor: | Harthas [ Di 09 Dez, 2008 09:10 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Entwarnung. Gestern noch wurde PHP 5.2.8 veröffentlicht. Mit dem magic_quotes_gpc-Bug-Fix. Sozusagen. Ist also wieder sicher. |
Autor: | Linus [ Mi 10 Dez, 2008 16:54 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Anderswelt hat geschrieben: > nunja, es wurde nun auf PHP 5.2.7 und Suhosin 0.9.27 upgraded. ... > davon auszugehen, dass Suhosin hier strikter die Syntax analysiert ... Das auch: Suhosin (auch bekannt als Hardened PHP) begrenzt unter anderem die maximale Tiefe von Arrays die mittels $_POST oder $_GET übergeben werden können. Auch die maximale Größe der Indices oder gar die Größe des Inhalts in einer mit $_POST übergeben Variable kann begrenzt sein. Wenn ich an die Standardeinstellungen denke die suhosin mit brachte, nach dem ich meinem Server mal eine Neuinstallation gegönnt habe kann ich nur für dich hoffen dass dein Hoster da um einiges großzügiger ist. Mit den Default-Einstellungen ist der Betrieb eines 0.97er LoGD nicht möglich. Zum Glück bin ich der Herr aller Ini-Dateien auf dem Server. Aber auf einem gemieteten Webspace ... wär interessant zu erfahren ob sich der Hoster dies bezüglich auf Änderungswünsche einlässt. |
Autor: | Llynya [ So 04 Jan, 2009 15:30 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Na ja, ich hab im Prinzip nur ein kleines Problem mit den Bios, hab aber grad keinen anderen Thread gefunden. Mein Problem sieht in etwa so aus: Ich hab nun für die Profil/Inventar ein großes Bioschreibfeld und das funzt auch alles wunderbar. Nur, wenn ich in den User Editor geh, dann verschiebt sich die Bio auf's übelste, ich denke, das hängt mit dem einzeiligen Schreibfenster noch im UE zusammen. Ich weiß aber grad auch gar net wie ich das Tippfeld größer kriegen könnte, weil mein Bioschreibfeld hat mir jemand gemacht und derjenige is derzeit net online. Könnt mir da vielleicht wer helfen? Wäre lieb. ^^ Gruß, Llynya |
Autor: | Rikkarda [ So 04 Jan, 2009 16:56 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Llynya hat geschrieben: Na ja, ich hab im Prinzip nur ein kleines Problem mit den Bios, hab aber grad keinen anderen Thread gefunden. Mein Problem sieht in etwa so aus: Ich hab nun für die Profil/Inventar ein großes Bioschreibfeld und das funzt auch alles wunderbar. Nur, wenn ich in den User Editor geh, dann verschiebt sich die Bio auf's übelste, ich denke, das hängt mit dem einzeiligen Schreibfenster noch im UE zusammen. Ich weiß aber grad auch gar net wie ich das Tippfeld größer kriegen könnte, weil mein Bioschreibfeld hat mir jemand gemacht und derjenige is derzeit net online. Könnt mir da vielleicht wer helfen? Wäre lieb. ^^ Gruß, Llynya link zum source des usereditors pls |
Autor: | Llynya [ So 04 Jan, 2009 17:30 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Ich kann nur meine php hier veröffentlichen. Source spackt. ![]() Ich hätts ja gern mit nem Spoiler versteckt, damit das nich so groß ist, aber irgendwie geht das hier nicht so... ![]() $this->bbcode_second_pass_code('', '<?php // 15082004 require_once "common.php"; isnewday(3); if ($_GET[op]=="search"){ $sql = "SELECT acctid FROM accounts WHERE "; $where=" login LIKE '%{$_POST['q']}%' OR acctid LIKE '%{$_POST['q']}%' OR name LIKE '%{$_POST['q']}%' OR emailaddress LIKE '%{$_POST['q']}%' OR lastip LIKE '%{$_POST['q']}%' OR uniqueid LIKE '%{$_POST['q']}%' OR gentimecount LIKE '%{$_POST['q']}%' OR level LIKE '%{$_POST['q']}%'"; $result = db_query($sql.$where); if (db_num_rows($result)<=0){ output("`\$Keine Ergebnisse gefunden`0"); $_GET[op]=""; $where=""; }elseif (db_num_rows($result)>100){ output("`\$Zu viele Ergebnisse gefunden. Bitte Suche einengen.`0"); $_GET[op]=""; $where=""; }elseif (db_num_rows($result)==1){ //$row = db_fetch_assoc($result); //redirect("user.php?op=edit&userid=$row[acctid]"); $_GET[op]=""; $_GET['page']=0; }else{ $_GET[op]=""; $_GET['page']=0; } } page_header("User Editor"); output("<form action='user.php?op=search' method='POST'>Suche in allen Feldern: <input name='q' id='q'><input type='submit' class='button'></form>",true); output("<script language='JavaScript'>document.getElementById('q').focus();</script>",true); addnav("","user.php?op=search"); addnav("G?Zurück zur Grotte","superuser.php"); addnav("W?Zurück zum Weltlichen","village.php"); addnav("Verbannung","user.php?op=setupban"); addnav("Verbannungen anzeigen/entfernen","user.php?op=removeban"); //addnav("Benutzereditor","user.php"); $sql = "SELECT count(acctid) AS count FROM accounts"; $result = db_query($sql); $row = db_fetch_assoc($result); $page=0; while ($row[count]>0){ $page++; addnav("$page Seite $page","user.php?page=".($page-1)."&sort=$_GET[sort]"); $row[count]-=100; } $mounts=",0,Keins"; $sql = "SELECT mountid,mountname,mountcategory FROM mounts ORDER BY mountcategory"; $result = db_query($sql); while ($row = db_fetch_assoc($result)){ $mounts.=",{$row['mountid']},{$row['mountcategory']}: {$row['mountname']}"; } $userinfo = array( "Account Info,title", "acctid"=>"User ID,viewonly", "login"=>"Login", "newpassword"=>"Neues Passwort", "emailaddress"=>"Email Adresse", "locked"=>"Account gesperrt,bool", "banoverride"=>"Verbannungen übergehen,bool", "superuser"=>"Superuser,enum,0,Bürger,1,Vertrauter,2,Wächter,3,Avatar,4,Ältester", "User Infos,title", "name"=>"Display Name", "title"=>"Titel (muss auch in Display Name)", "ctitle"=>"Eigener Titel (muss auch in Display Name)", "sex"=>"Geschlecht,enum,0,Männlich,1,Weiblich", // we can't change this this way or their stats will be wrong. // "race"=>"Race,enum,0,Unknown,1,Troll,2,Elf,3,Human,4,Dwarf,5,Echse", "age"=>"Tage seit Level 1,int", "dragonkills"=>"Drachenkills,int", "dragonage"=>"Alter beim letzten Drachenkill,int", "bestdragonage"=>"Jüngstes Alter bei einem Drachenkill,int", "bio"=>"Bio", "Werte,title", "level"=>"Level,int", "experience"=>"Erfahrung,int", "hitpoints"=>"Lebenspunkte (aktuell),int", "maxhitpoints"=>"Maximale Lebenspunkte,int", "turns"=>"Runden übrig,int", "playerfights"=>"Spielerkämpfe übrig,int", "attack"=>"Angriffswert (inkl. Waffenschaden),int", "defence"=>"Verteidigung (inkl. Rüstung),int", "spirits"=>"Stimmung (nur Anzeige),enum,-2,Sehr schlecht,-1,Schlecht,0,Normal,1,Gut,2,Sehr gut", "resurrections"=>"Auferstehungen,int", "alive"=>"Lebendig,int", "reputation"=>"Ansehen (-50 - +50),int", "Spezialitäten,title", "specialty"=>"Spezialität,enum,0,Unspezifiziert,1,Dunkle Künste,2,Mystische Kräfte,3,Diebeskunst", "darkarts"=>"`4Stufe in Dunklen Künsten`0,int", "darkartuses"=>"`4^--heute übrig`0,int", "magic"=>"`%Stufe in Mystischen Kräften`0,int", "magicuses"=>"`%^--heute übrig`0,int", "thievery"=>"`^Stufe in Diebeskunst`0,int", "thieveryuses"=>"`^^--heute übrig`0,int", "Grabkämpfe,title", "deathpower"=>"Gefallen bei Ramius,int", "gravefights"=>"Grabkämpfe übrig,int", "soulpoints"=>"Seelenpunkte (HP im Tod),int", "Ausstattung,title", "gems"=>"Edelsteine,int", "gold"=>"Bargold,int", "goldinbank"=>"Gold auf der Bank,int", "transferredtoday"=>"Anzahl Transfers heute,int", "amountouttoday"=>"Heute ausgegengener Wert der Überweisungen,int", "weapon"=>"Name der Waffe", "weapondmg"=>"Waffenschaden,int", "weaponvalue"=>"Kaufwert der Waffe,int", "armor"=>"Name der Rüstung", "armordef"=>"Verteidigungswert,int", "armorvalue"=>"Kaufwert der Rüstung,int", "Sonderinfos,title", "house"=>"Haus-ID,int", "housekey"=>"Hausschlüssel?,int", "marriedto"=>"Partner-ID (4294967295 = Viviana/Gwyn),int", "charisma"=>"Flirts (4294967295 = verheiratet mit Partner),int", "seenlover"=>"Geflirtet,bool", "seenbard"=>"Barden gehört,bool", "charm"=>"Charme,int", "seendragon"=>"Drachen heute gesucht,bool", "seenmaster"=>"Meister befragt,bool", "usedouthouse"=>"Plumpsklo besucht,bool", "fedmount"=>"Tier gefüttert,bool", "gotfreeale"=>"Frei-Ale (MSB: getrunken - LSB: spendiert),int", "hashorse"=>"Tier,enum$mounts", "boughtroomtoday"=>"Zimmer für heute bezahlt,bool", "drunkenness"=>"Betrunken (0-100),int", "avatar"=>"Avatar:", "Weitere Infos,title", "beta"=>"Nimmt am Betatest teil,viewonly", "slainby"=>"Gekillt von Spieler,viewonly", "laston"=>"Zuletzt Online,viewonly", "lasthit"=>"Letzter neuer Tag,viewonly", "lastmotd"=>"Datum der letzten MOTD,viewonly", "lastip"=>"Letzte IP,viewonly", "uniqueid"=>"Unique ID,viewonly", "gentime"=>"Summe der Seitenerzeugungszeiten,viewonly", "gentimecount"=>"Seitentreffer,viewonly", "allowednavs"=>"Zulässige Navigation,viewonly", "dragonpoints"=>"Eingesetzte Drachenpunkte,viewonly", "bufflist"=>"Spruchliste,viewonly", "prefs"=>"Einstellungen,viewonly", "lastwebvote"=>"Zuletzt bei Top Wep Games gewählt,viewonly", "donationconfig"=>"Spendenkäufe,viewonly" ); if ($_GET[op]=="lasthit"){ $output=""; $sql = "SELECT output FROM accounts WHERE acctid='{$_GET['userid']}'"; $result = db_query($sql); $row = db_fetch_assoc($result); echo str_replace("<iframe src=","<iframe Xsrc=",$row['output']); exit(); }elseif ($_GET[op]=="edit"){ $result = db_query("SELECT * FROM accounts WHERE acctid='$_GET[userid]'") or die(db_error(LINK)); $row = db_fetch_assoc($result) or die(db_error(LINK)); output("<form action='user.php?op=special&userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"")."' method='POST'>",true); addnav("","user.php?op=special&userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"").""); output("<input type='submit' class='button' name='newday' value='Neuen Tag gewähren'>",true); output("<input type='submit' class='button' name='fixnavs' value='Defekte Navs reparieren'>",true); output("<input type='submit' class='button' name='clearvalidation' value='E-Mail als gültig markieren'>",true); output("</form>",true); if ($_GET['returnpetition']!=""){ addnav("Zurück zur Anfrage","viewpetition.php?op=view&id={$_GET['returnpetition']}"); } addnav("Letzten Treffer anzeigen","user.php?op=lasthit&userid={$_GET['userid']}",false,true); output("<form action='user.php?op=save&userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"")."' method='POST'>",true); addnav("","user.php?op=save&userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"").""); addnav("","user.php?op=edit&userid=$_GET[userid]".($_GET['returnpetition']!=""?"&returnpetition={$_GET['returnpetition']}":"").""); addnav("Verbannen","user.php?op=setupban&userid=$row[acctid]"); addnav("Debug-Log anzeigen","user.php?op=debuglog&userid={$_GET['userid']}"); output("<input type='submit' class='button' value='Speichern'>",true); showform($userinfo,$row); output("</form>",true); output("<iframe src='user.php?op=lasthit&userid={$_GET['userid']}' width='100%' height='400'>Dein Browser muss iframes unterstützen, um die letzte Seite des Users anzeigen zu können. Benutze den Link im Menü stattdessen.</iframe>",true); addnav("","user.php?op=lasthit&userid={$_GET['userid']}"); }elseif ($_GET[op]=="special"){ if ($_POST[newday]!=""){ $sql = "UPDATE accounts SET lasthit='".date("Y-m-d H:i:s",strtotime(date("r")."-".(86500/getsetting("daysperday",4))." seconds"))."' WHERE acctid='$_GET[userid]'"; }elseif($_POST[fixnavs]!=""){ $sql = "UPDATE accounts SET allowednavs='',output='' WHERE acctid=$_GET[userid]"; }elseif($_POST[clearvalidation]!=""){ $sql = "UPDATE accounts SET emailvalidation='' WHERE acctid='$_GET[userid]'"; } db_query($sql); if ($_GET['returnpetition']==""){ // redirect("user.php?".db_affected_rows()); redirect("user.php"); }else{ redirect("viewpetition.php?op=view&id={$_GET['returnpetition']}"); } }elseif ($_GET[op]=="save"){ $sql = "UPDATE accounts SET "; // Ein paar Sicherheiten für Änderungen // Gesamtname geändert if ($_POST['oldname']!=$_POST['name']) { $clearedname = preg_replace('/`./','',$_POST['name']); // Login bleibt gleich if (substr_count($clearedname,$_POST['login'])) { // Titel rausfinden $replace = '(`.)*'; for ($i=0;$i<strlen($_POST['login']);$i++) { $replace .= $_POST['login']{$i}.'(`.)*'; } $_POST['ctitle'] = rtrim(preg_replace('/'.$replace.'/','',$_POST['name'])); if ($_POST['ctitle']=='') $_POST['title'] = ''; elseif ($_POST['ctitle']==$_POST['title']) $_POST['ctitle'] = ''; } // Neuer Login else { // Leerzeichen vorhanden if ($login = strrchr($_POST['name'],' ')) { $_POST['login'] = trim(strrchr($clearedname,' ')); $_POST['ctitle'] = str_replace($login,'',$_POST['name']); if ($_POST['ctitle']==$_POST['title']) $_POST['ctitle'] = ''; } // Kein Leerzeichen vorhanden else { $_POST['login'] = $clearedname; $_POST['title'] = $_POST['ctitle'] = ''; } } } // Login geändert elseif ($_POST['oldlogin']!=$_POST['login']) { if ($_POST['ctitle']!='') $_POST['name'] = $_POST['ctitle'].' '.$_POST['login']; else $_POST['name'] = $_POST['title'].' '.$_POST['login']; } // Titel geändert elseif ($_POST['oldtitle']!=$_POST['title'] && $_POST['ctitle']=='') { if ($_POST['oldctitle']!='') $colname = str_replace($_POST['oldctitle'],'',$_POST['name']); else $colname = str_replace($_POST['oldtitle'],'',$_POST['name']); $_POST['name'] = $_POST['title'].$colname; } // Usertitel geändert elseif ($_POST['oldctitle']!=$_POST['ctitle']) { if ($_POST['oldctitle']!='') $colname = str_replace($_POST['oldctitle'],'',$_POST['name']); else $colname = str_replace($_POST['oldtitle'],'',$_POST['name']); if ($_POST['ctitle']=='') $_POST['name'] = $_POST['title'].$colname; else $_POST['name'] = $_POST['ctitle'].$colname; } reset($_POST); while (list($key,$val)=each($_POST)){ if (isset($userinfo[$key])){ if ($key=="newpassword" ){ if ($val>"") $sql.="password = MD5(\"$val\"),"; }else{ $sql.="$key = \"$val\","; } } } $sql=substr($sql,0,strlen($sql)-1); $sql.=" WHERE acctid=\"$_GET[userid]\""; //output("<pre>$sql</pre>"); //echo "<pre>$sql</pre>"; //redirect("user.php"); //output( db_affected_rows()." rows affected"); //we must manually redirect so that our changes go in to effect *after* our user save. addnav("","viewpetition.php?op=view&id={$_GET['returnpetition']}"); addnav("","user.php"); saveuser(); db_query($sql) or die(db_error(LINK)); if ($_GET['returnpetition']!=""){ header("Location: viewpetition.php?op=view&id={$_GET['returnpetition']}"); }else{ header("Location: user.php"); } exit(); }elseif ($_GET[op]=="del"){ $sql = "SELECT name from accounts WHERE acctid='$_GET[userid]'"; $res = db_query($sql); // inventar und haus löschen und partner und ei freigeben if ($_GET[userid]==getsetting("hasegg",0)) savesetting("hasegg",stripslashes(0)); $sql = "UPDATE items SET owner=0 WHERE owner=$_GET[userid]"; db_query($sql); $sql = "UPDATE houses SET owner=0,status=3 WHERE owner=$_GET[userid] AND status=1"; db_query($sql); $sql = "UPDATE houses SET owner=0,status=4 WHERE owner=$_GET[userid] AND status=0"; db_query($sql); $sql = "UPDATE accounts SET charisma=0,marriedto=0 WHERE marriedto=$_GET[userid]"; db_query($sql); $sql = "DELETE FROM pvp WHERE acctid2=$_GET[userid] OR acctid1=$_GET[userid]"; db_query($sql) or die(db_error(LINK)); $sql = "DELETE FROM accounts WHERE acctid='$_GET[userid]'"; db_query($sql); output( db_affected_rows()." Benutzer gelöscht."); while ($row = db_fetch_assoc($res)) { addnews("`#{$row['name']} wurde von den Göttern aufgelöst."); } }elseif($_GET[op]=="setupban"){ $sql = "SELECT name,lastip,uniqueid FROM accounts WHERE acctid=\"$_GET[userid]\""; $result = db_query($sql) or die(db_error(LINK)); $row = db_fetch_assoc($result); if ($row[name]!="") output("Setting up ban information based on `\$$row[name]`0"); output("<form action='user.php?op=saveban' method='POST'>",true); output("Verbannung über IP oder ID (IP bevorzugt. Bei Usern hinter NAT kannst du eine Verbannung über ID versuchen, die aber leicht ungangen werden kann)`n"); output("<input type='radio' value='ip' name='type' checked> IP: <input name='ip' value=\"".HTMLSpecialChars($row[lastip])."\">`n",true); output("<input type='radio' value='id' name='type'> ID: <input name='id' value=\"".HTMLSpecialChars($row[uniqueid])."\">`n",true); output("Dauer: <input name='duration' id='duration' size='3' value='14'> days (0 for permanent)`n",true); output("Grund für die Verbannung: <input name='reason' value=\"Ärger mich nicht.\">`n",true); output("<input type='submit' class='button' value='Post Ban' onClick='if (document.getElementById(\"duration\").value==0) {return confirm(\"Willst du wirklich eine permanente Verbannung aussprechen?\");} else {return true;}'></form>",true); output("Bei einem IP-Bann gib entweder eine komplette IP ein, oder gebe nur den Anfang der IP ein, wenn du einen IP-Bereich sperren willst."); addnav("","user.php?op=saveban"); }elseif($_GET[op]=="saveban"){ $sql = "INSERT INTO bans ("; if ($_POST[type]=="ip"){ $sql.="ipfilter"; }else{ $sql.="uniqueid"; } $sql.=",banexpire,banreason) VALUES ("; if ($_POST[type]=="ip"){ $sql.="\"$_POST[ip]\""; }else{ $sql.="\"$_POST[id]\""; } $sql.=",\"".((int)$_POST[duration]==0?"0000-00-00":date("Y-m-d",strtotime(date("r")."+$_POST[duration] days")))."\","; $sql.="\"$_POST[reason]\")"; if ($_POST[type]=="ip"){ if (substr($_SERVER['REMOTE_ADDR'],0,strlen($_POST[ip])) == $_POST[ip]){ $sql = ""; output("Du willst dich doch nicht wirklich selbst verbannen, oder?? Das ist deine eigene IP-Adresse!"); } }else{ if ($_COOKIE[lgi]==$_POST[id]){ $sql = ""; output("Du willst dich doch nicht wirklich selbst verbannen, oder?? Das ist deine eigene ID!"); } } if ($sql!=""){ db_query($sql) or die(db_error(LINK)); output(db_affected_rows()." Bann eingetragen.`n`n"); output(db_error(LINK)); } }elseif($_GET[op]=="delban"){ $sql = "DELETE FROM bans WHERE ipfilter = '$_GET[ipfilter]' AND uniqueid = '$_GET[uniqueid]'"; db_query($sql); //output($sql); redirect("user.php?op=removeban"); }elseif($_GET[op]=="removeban"){ db_query("DELETE FROM bans WHERE banexpire < \"".date("Y-m-d")."\" AND banexpire>'0000-00-00'"); $sql = "SELECT * FROM bans ORDER BY banexpire"; $result = db_query($sql) or die(db_error(LINK)); output("<table><tr><td>Ops</td><td>IP/ID</td><td>Dauer</td><td>Text</td><td>Betrifft:</td></tr>",true); for ($i=0;$i<db_num_rows($result);$i++){ $row = db_fetch_assoc($result); output("<tr class='".($i%2?"trlight":"trdark")."'><td><a href='user.php?op=delban&ipfilter=".URLEncode($row[ipfilter])."&uniqueid=".URLEncode($row[uniqueid])."'>Bann aufheben</a>",true); addnav("","user.php?op=delban&ipfilter=".URLEncode($row[ipfilter])."&uniqueid=".URLEncode($row[uniqueid])); output("</td><td>",true); output($row[ipfilter]); output($row[uniqueid]); output("</td><td>",true); $expire=round((strtotime($row[banexpire])-strtotime(date("r"))) / 86400,0)." Tage"; if (substr($expire,0,2)=="1 ") $expire="1 Tag"; if (date("Y-m-d",strtotime($row[banexpire])) == date("Y-m-d")) $expire="Heute"; if (date("Y-m-d",strtotime($row[banexpire])) == date("Y-m-d",strtotime("1 day"))) $expire="Morgen"; if ($row[banexpire]=="0000-00-00") $expire="Nie"; output($expire); output("</td><td>",true); output($row[banreason]); output("</td><td>",true); $sql = "SELECT DISTINCT accounts.name FROM bans, accounts WHERE (ipfilter='".addslashes($row['ipfilter'])."' AND bans.uniqueid='".addslashes($row['uniqueid'])."') AND ((substring(accounts.lastip,1,length(ipfilter))=ipfilter AND ipfilter<>'') OR (bans.uniqueid=accounts.uniqueid AND bans.uniqueid<>''))"; $r = db_query($sql); for ($x=0;$x<db_num_rows($r);$x++){ $ro = db_fetch_assoc($r); output("`0{$ro['name']}`n"); } output("</td></tr>",true); } output("</table>",true); }elseif ($_GET[op]=="debuglog"){ $id = $_GET['userid']; $sql = "SELECT debuglog.*,a1.name as actorname,a2.name as targetname FROM debuglog LEFT JOIN accounts as a1 ON a1.acctid=debuglog.actor LEFT JOIN accounts as a2 ON a2.acctid=debuglog.target WHERE debuglog.actor=$id OR debuglog.target=$id ORDER by debuglog.date DESC,debuglog.id ASC LIMIT 500"; addnav("User Info bearbeiten","user.php?op=edit&userid=$id"); $result = db_query($sql); $odate = ""; for ($i=0; $i<db_num_rows($result); $i++) { $row = db_fetch_assoc($result); $dom = date("D, M d",strtotime($row['date'])); if ($odate != $dom){ output("`n`b`@".$dom."`b`n"); $odate = $dom; } $time = date("H:i:s", strtotime($row['date'])); output("$time - {$row['actorname']} {$row['message']}"); if ($row['target']) output(" {$row['targetname']}"); output("`n"); } }elseif ($_GET[op]==""){ if (isset($_GET['page'])){ $order = "acctid"; if ($_GET[sort]!="") $order = "$_GET[sort]"; $offset=(int)$_GET['page']*100; $sql = "SELECT acctid,login,name,level,laston,gentimecount,lastip,uniqueid,emailaddress FROM accounts ".($where>""?"WHERE $where ":"")."ORDER BY \"$order\" LIMIT $offset,100"; $result = db_query($sql) or die(db_error(LINK)); output("<table>",true); output("<tr> <td>Ops</td> <td><a href='user.php?sort=login'>Login</a></td> <td><a href='user.php?sort=name'>Name</a></td> <td><a href='user.php?sort=level'>Lev</a></td> <td><a href='user.php?sort=laston'>Zuletzt da</a></td> <td><a href='user.php?sort=gentimecount'>Treffer</a></td> <td><a href='user.php?sort=lastip'>IP</a></td> <td><a href='user.php?sort=uniqueid'>ID</a></td> <td><a href='user.php?sort=emailaddress'>E-Mail</a></td> </tr>",true); addnav("","user.php?sort=login"); addnav("","user.php?sort=name"); addnav("","user.php?sort=level"); addnav("","user.php?sort=laston"); addnav("","user.php?sort=gentimecount"); addnav("","user.php?sort=lastip"); addnav("","user.php?sort=uniqueid"); $rn=0; for ($i=0;$i<db_num_rows($result);$i++){ $row=db_fetch_assoc($result); $laston=round((strtotime(date("r"))-strtotime($row[laston])) / 86400,0)." Tage"; if (substr($laston,0,2)=="1 ") $laston="1 Tag"; if (date("Y-m-d",strtotime($row[laston])) == date("Y-m-d")) $laston="Heute"; if (date("Y-m-d",strtotime($row[laston])) == date("Y-m-d",strtotime(date("r")."-1 day"))) $laston="Gestern"; if ($loggedin) $laston="Jetzt"; $row[laston]=$laston; if ($row[$order]!=$oorder) $rn++; $oorder = $row[$order]; output("<tr class='".($rn%2?"trlight":"trdark")."'>",true); output("<td>",true); output("[<a href='user.php?op=edit&userid=$row[acctid]'>Edit</a>|". "<a href='user.php?op=del&userid=$row[acctid]' onClick=\"return confirm('Willst du diesen User wirklich löschen?');\">Del</a>|". "<a href='user.php?op=setupban&userid=$row[acctid]'>Ban</a>|". "<a href='user.php?op=debuglog&userid=$row[acctid]'>Log</a>]",true); addnav("","user.php?op=edit&userid=$row[acctid]"); addnav("","user.php?op=del&userid=$row[acctid]"); addnav("","user.php?op=setupban&userid=$row[acctid]"); addnav("","user.php?op=debuglog&userid=$row[acctid]"); output("</td><td>",true); output($row[login]); output("</td><td>",true); output($row[name]); output("</td><td>",true); output($row[level]); output("</td><td>",true); output($row[laston]); output("</td><td>",true); output($row[gentimecount]); output("</td><td>",true); output($row[lastip]); output("</td><td>",true); output($row[uniqueid]); output("</td><td>",true); output($row[emailaddress]); output("</td>",true); $gentimecount+=$row[gentimecount]; $gentime+=$row[gentime]; output("</tr>",true); } output("</table>",true); output("Treffer gesamt: $gentimecount`n"); output("CPU-Zeit gesamt: ".round($gentime,3)."s`n"); output("Durchschnittszeit für Seitenerzeugung: ".round($gentime/max($gentimecount,1),4)."s`n"); } } page_footer(); ?> ') |
Autor: | Rikkarda [ So 04 Jan, 2009 17:45 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
naja das reicht halt net.. brauch auch die datei wo du die bio als user speicherst.. jedenfalls musst du im usereditor den bereich "bio" halt anpassen auf die daten, die du auch beim user nutzt. ohne direkten sourcelink ist das halt immer doof aber denke der tipp sollte ausreichen, v.a. weil das hier shcon mehrfach disktutiert wurde |
Autor: | Llynya [ So 04 Jan, 2009 17:51 ] |
Betreff des Beitrags: | Re: Server SPackt bei " in RP-Posts und Bios o.O |
Aso, ich glaub ich weiß was du meinst. Danke. ^^ |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |