Apostroph in Namen vs. Inplaytracker - Druckversion +- MyBB.de Forum (https://www.mybb.de/forum) +-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html) +--- Forum: Plugin-Diskussionen (https://www.mybb.de/forum/forum-38.html) +--- Thema: Apostroph in Namen vs. Inplaytracker (/thread-35690.html) Seiten: Seiten:
1
2
|
Apostroph in Namen vs. Inplaytracker - Santhony - 17.06.2018 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. 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 RE: Apostroph in Namen vs. Inplaytracker - doylecc - 17.06.2018 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); RE: Apostroph in Namen vs. Inplaytracker - Santhony - 17.06.2018 Vielen Dank für deine schnelle Rückantwort, Waldo. 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 RE: Apostroph in Namen vs. Inplaytracker - doylecc - 17.06.2018 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' RE: Apostroph in Namen vs. Inplaytracker - Santhony - 17.06.2018 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 RE: Apostroph in Namen vs. Inplaytracker - doylecc - 17.06.2018 (17.06.2018, 19:29)Santhony schrieb: Hat super funktioniert. *_* 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. RE: Apostroph in Namen vs. Inplaytracker - Santhony - 23.11.2022 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 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 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* RE: Apostroph in Namen vs. Inplaytracker - [ExiTuS] - 23.11.2022 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] RE: Apostroph in Namen vs. Inplaytracker - StefanT - 23.11.2022 (23.11.2022, 17:40)[ExiTuS] schrieb: Hallo,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. RE: Apostroph in Namen vs. Inplaytracker - [ExiTuS] - 23.11.2022 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 [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. |