Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.17 veröffentlicht (16.07.18)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Apostroph in Namen vs. Inplaytracker
#1
Hallo und guten Tag.

Ich wollte einmal fragen, ob mir jemand eventuell bei einem Problem weiter helfen kann.
Und zwar geht es um das böse Apostroph in Usernamen, die sich mit dem Plugin Inplaytracker nicht vertragen und folgende Fehlermeldung rauswirft, wenn man zum Beispiel das Profil des Users aufrufen will:
Code:
MyBB has experienced an internal SQL error and cannot continue.

SQL Error:1064 - 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 'Connor' AND (il4_forums.parentlist LIKE '11,%' OR il4_forums.parentlist LIKE' at line 4Query:SELECT il4_posts.dateline FROM il4_posts LEFT JOIN il4_threads on il4_threads.tid = il4_posts.tid LEFT JOIN il4_forums on il4_forums.fid = il4_threads.fid WHERE il4_posts.username = 'Daewon O'Connor' AND (il4_forums.parentlist LIKE '11,%' OR il4_forums.parentlist LIKE '%,103%') AND il4_posts.visible = '1'

Oder wenn man versucht, den Namen bei den beteiligten Usern in der Szene einzufügen:
Code:
SQL Error:1064 - 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 'Connor'' at line 1Query:SELECT uid FROM il4_users WHERE username = 'Daewon O'Connor'

Link zum Forum: HIER


Ich "weiß" *hust* aus gaaaanz alten Zeiten, dass das Apostrop sich mit den Strings in einer der PHPs des Plugins wohl beißt und auskommentiert werden muss?!
Aber ich hab Null Plan wo/wie/und sowieso.

Hoffe, dass mir jemand hier von euch dabei helfen kann, denn den User kann ich nicht wirklich davon überzeugen aus seinem Namen ein O`Connor zu machen; er besteht auf sein O'Connor. *augenroll*

*kekse da lässt*
Vielen Dank im Voraus.

MfG
Santhony
Zitieren
#2
Es sieht so aus, als würden die Namen nicht richtig escaped.

In der Funktion inplaytracker_profile() gibt es zwei DB-Abfragen, die diese Zeile enthalten:
Code:
WHERE ".TABLE_PREFIX."posts.username = '$memprofile[username]'

$memprofile[username] wird hier ohne $db->escape_string() verwendet, was zu deinem ersten SQL-Fehler führt, wenn der Username ein einfaches Anführungszeichen enthält.

Der zweite Fehler entsteht vermutlich, weil in den Funktionen inplaytracker_do_newthread() und inplaytracker_do_editpost() die Variable $partner zwar escaped wird, sie aber dann nicht wieder zugewiesen wird, was es praktisch wirkungslos macht.
Es müsste eigentlich beide Male die Zeile 
Code:
$db->escape_string($partner);

geändert werden z.B. zu
Code:
$partner = $db->escape_string($partner);
Zitieren
#3
Vielen Dank für deine schnelle Rückantwort, Waldo. Smile

Habe die Änderungen vorgenommen.
Problem 2 mit den Hinzufügen der Szenen hat sich mit deiner Lösung erledigt.

Zu Problem Nr. 1:
Verstehe ich das dann richtig, dass ich die Abfrage des Profils dann wie folgt abändern muss?
Code:
WHERE ".TABLE_PREFIX."posts.username = '$memprofile[username]' $db->escape_string($memprofile[username]);

Lieben Gruß
Santhony
Zitieren
#4
Du könntest auch in der Funktion inplaytracker_profile() zB gleich oben unterhalb von
PHP-Code:
$lang->load('inplaytracker'); 

das hier einfügen:
PHP-Code:
$profilename $db->escape_string($memprofile['username']); 

und dann die beiden Zeilen der DB-Abfragen ändern zu:
PHP-Code:
WHERE ".TABLE_PREFIX."posts.username '$profilename' 
Zitieren
#5
Hat super funktioniert. *_*

Aber jetzt für mich noch einmal zum Verständnis so als Nerd. ^^°
(Versuche ja doch irgendwie auch zu begreifen, was was bewirkt, um euch hier nicht ständig mit meinen Fragen zu nerven. ^^°)

Der escape_string bewirkt also das "auskommentieren" von Apostrophe?
Und zur Vereinfachung/Übersichtlichkeit der DB-Abfrage Zeile über WHERE wird profilename um den escape_string ergänzt, um dann die einfachere $profilename dann in die WHERE Abfrage zu packen?


Auf jeden Fall noch mal einen herzlichen Dank.
Und ich wünsche dir noch einen schönen Abend.

MfG
Santhony
Zitieren
#6
(17.06.2018, 20:29)Santhony schrieb: Hat super funktioniert. *_*

Aber jetzt für mich noch einmal zum Verständnis so als Nerd. ^^°
(Versuche ja doch irgendwie auch zu begreifen, was was bewirkt, um euch hier nicht ständig mit meinen Fragen zu nerven. ^^°)

Der escape_string bewirkt also das "auskommentieren" von Apostrophe?

Nicht nur von Apostrophen, auch anderen Zeichen. Dies verhindert nicht nur solche Fehler wie oben, sondern vor allem auch Sicherheitsrisiken, sonst wählt einfach mal jemand einen "speziellen" Usernamen, der von der DB als Befehl interpretiert wird, wenn er nicht escaped ist, und dem unbefugten User wäre es damit möglich, Daten auszulesen oder zu ändern.

(17.06.2018, 20:29)Santhony schrieb: Und zur Vereinfachung/Übersichtlichkeit der DB-Abfrage Zeile über WHERE wird profilename um den escape_string ergänzt, um dann die einfachere $profilename dann in die WHERE Abfrage zu packen?

In dem Fall ja. Dadurch wurde escape_string nur einmal angewendet und profilename konnte dann aber für beide Abfragen verwendet werden.
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Inplaytracker zeigt Szenen nicht im Profil an Skairippa 1 349 25.04.2017, 15:50
Letzter Beitrag: SCOTTISH.