Der Programmiertechnische hintergrund vieler Bugs ist ganz einfach eine fehlende Überprüfung
des Servers ob die Funktion, welche ein Charakter gerade ausühren will, auch tatsächlich gerade
ausgeführt werden darf.
Wenn du zum beispiel in PHP eine Benutzereingabe auf gewisse zeichen überprüfen willst könntest du zum Beispiel folgendermaßen arbeiten:
Code:
if (!preg_match("/^[0-9a-zA-Z]{3,32}$/i", $_POST['Benutzereingabe'])){
//hier der code was passieren soll falls die Benutzereingabe aus anderen zeichen besteht.
}
Nun Stell dir vor du willst die Benutzereingabe weiterverwenden um zum Beispiel mittels dieser
eine SQL Abfrage zu starten.
Weiterhin stell dir nun vor du vergisst allerdings vorher zu prüfen, ob die Benutzereingabe auch
tatsächlich nur die von dir vorgegebenen Zeichen enthält. Und Schwupps du hast eine Lücke gelassen,
durch die ein Angreifer problemlos eine eigene Abfrage starten und damit deine Datenbank zerschiessen
oder dir gar Daten klauen kann (SQL Injection).
Bei Fiesta sollte der Quellcode mehrere Millionen zeilen lang sein,
1, 2, 3 oder gar 4 Millionen Zeilen sind dort ohne weiteres denkbar, ebenso sind dort mehrere tausend
funktionen vorhanden die prinzipiell alle Gewisse bedingungen erfüllen müssen um ausgeführt zu werden.
Bei einer solchen Code größe passiert es aber schnell mal hier und dort gewisse zustände zu überprüfen
und darauf bauen so sämtliche Bugs auf.
Zum Beispiel Character A Handelt Item 1 mit Character B
Server speichert sich nun das Chararacter A mit B handeln will
Server speichert weiterhin das es um item 1 geht und ruft den Slot ab (3) auf dem es sich befindet.
Handel wird nun abgebrochen, server löscht aus dem Speicher das Character A mit B handeln will
löscht aber nicht das Slot 3 gehandelt wird.
Und hier könnte man nun anknüpfen, wenn man es schafft dem server zwar nen handel unterzujubeln
aber dies so zu gestalten, das der Slot nicht neu gelesen wird.
Würde der server nun vor jeder bewegung nochmals überprüfen ob dieses Item in Slot 3 auch
tatsächlich dem Item entspricht welches der Character handeln will wäre dies ja kein Problem
aber der server verlässt sich darauf das es schon so richtig ist wie er es intern vorliegen hat.
Und prompt wird ein Item gehandelt welches zwar auf Slot 3 liegt aber möglicherweise weder dem
Charakter gehört welcher es handelt noch in irgendeiner weise identisch ist mit dem eigentlichem Item
welches ursprünglich gehandelt werden sollte.
Wenn du nun in etwa wissen willst was dort abgeht, solltest du aufmerksam lesen, dies ist zwar nur eine
ganz grobe zusammenfassung aber sollte dich der denkweise ein kleines Stück näher bringen auch wenn
bei 1-4 Mio Zeilen Code die sache durchaus um ein vielfaches komplizierter ist.
Die Erklärung hinkt zwar etwas in der exakten logik aber ich denke man kann in etwa verstehen was damit gemeint ist.
Gruß D0n!