Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 3 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, 19: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, 19: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
#7
Halli hallo hallöle ihr Lieben.
Lang lang ist meine Anfrage hier schon her. ^^

Und bis vor kurzem lief auch alles reibungslos und wie geschmiert.
Aber mein Serveranbieter hat von MySQL jetzt auf MariaDB umgestellt und das bedeutet, dass diverse Fehler wieder aufgetaucht sind.
Die meisten konnte ich beheben.
Aber hier stehe ich wieder wie ein Ochse vorm Berg. -.-°

Beim Versuch, das Profil eines Aposthrophlers aufzurufen kommt diese Fehlermeldung:
Code:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Challa' AND (il4_forums.parentlist LIKE '11,%' AND NOT il4_forums.parentl...' at line 4

Query:
    SELECT COUNT(*) AS inplayposts 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 = 'T'Challa' AND (il4_forums.parentlist LIKE '11,%' AND NOT il4_forums.parentlist LIKE '%,103%') AND il4_posts.visible = '1'

Diese Meldung erscheint, wenn man versucht einen Apostrophler einer Szene hinzuzufügen.
Code:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Challa'' at line 1
Query:
    SELECT uid FROM il4_users WHERE username = 'T'Challa'

Ich hab mir die Inplaytracker.php mal angesehen, weiß aber nicht so wirklich, wo ich da jetzt was escapen muss. :X

Vielen Dank schon im Voraus für eure Hilfe.
*kekse da lässt*
Zitieren
#8
Hallo,

ich würde überhaupt nicht versuchen, hier zu escapen.
Ersetze die umhüllenden Hochkommata mit Backticks - Dann sollte Problem behoben sein.
Alternativ probiere mit Variablen als Benutzernamen innerhalb von SQL zu arbeiten.

[ExiTuS]
MyBB + innovative Themes:
NokiaPort.de Forum Nokia-Traditionsforum seit 2006.
Live Escape Game Forum Diskussionsplattform für Escape-Rooms.
Unlösbares Problem, Dilemma? -> das Nötel Smile
Zitieren
#9
(23.11.2022, 17:40)[ExiTuS] schrieb: Hallo,

ich würde überhaupt nicht versuchen, hier zu escapen.
Ersetze die umhüllenden Hochkommata mit Backticks - Dann sollte Problem behoben sein.
Alternativ probiere mit Variablen als Benutzernamen innerhalb von SQL zu arbeiten.

[ExiTuS]
Die Variablen zu escapen ist aber eigentlich Pflicht, ansonsten ist SQL-Injection möglich. Bei deinem Vorschlag hast du bei Backticks genau das selbe Problem.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#10
Da hast du völlig recht. Ehrlich gesagt, ging ich gar nicht davon aus, dass hier überhaupt nackte Benutzernamen verwendet werden, sondern die von MyBB bestimmten und bereits gesicherten Variablen, die man rundherum benutzt bzw. benutzen sollte Wink

[ETS]

PS.
Es wäre interessant zu wissen, wie denn überhaupt der Code und insbesondere die SQL-Abfragen aussehen, um das besser beurteilen zu können.
MyBB + innovative Themes:
NokiaPort.de Forum Nokia-Traditionsforum seit 2006.
Live Escape Game Forum Diskussionsplattform für Escape-Rooms.
Unlösbares Problem, Dilemma? -> das Nötel Smile
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Inplaytracker popcorn6889 1 730 09.04.2024, 08:57
Letzter Beitrag: Sauron04
  Inplaytracker zeigt Szenen nicht im Profil an Skairippa 1 1.598 25.04.2017, 14:50
Letzter Beitrag: SCOTTISH.