Einzelnen Beitrag anzeigen
Alt 25.04.2019, 18:29   #22
jazzrul
Neuling
Punkte: 8.401, Level: 61 Punkte: 8.401, Level: 61 Punkte: 8.401, Level: 61
Levelaufstieg: 84% Levelaufstieg: 84% Levelaufstieg: 84%
Aktivität: 33,3% Aktivität: 33,3% Aktivität: 33,3%
Letzte Erfolge
 
Benutzerbild von jazzrul
 
Registriert seit: 12.04.2011
Beitr?ge: 27
Abgegebene Danke: 1
Erhielt 10 Danke für 1 Beitrag
Downloads: 4
Uploads: 0
Nachrichten: 0
Renommee-Modifikator:
0 jazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehenjazzrul genießt hohes Ansehen
Standard

Gibt es Hinweise, welche Stellen der ursprünglichen NV Source kontaminierungsgefährdet sind? Also ganz allgemein z.B. "nicht escapte Get-Parameter in der announce.php", oder "numerischer Wert 'id' lässt unzulässigerweise strings durch". Sowas in der Art. Evtl. hat auch noch jemand konkretere Hinweise, wie die (unhöflichen, weil auch nur publicity-geil, statt hilfreich) Gestalten bei SB-Inno... genauer vorgehen.

Ja, die, bei den jeweiligen Codern weitergewachsenen NV Sourcen sind alle divergiert und zum größten Teil wohl noch mehr "Spaghetti-Code" als vor 10 Jahren. Aber es gibt immer noch Gemeinsamkeiten, die wir hier austauschen können. Ist ja schließlich open Source das Ganze und steht unter GPL (soweit ich mich erinnere).


1. Am allerwichtigsten: Definieren eines globalen DB Objektes, als Wrapper um mysqli::class und im Code dann alles mittels $unsere_db->methode() ansprechen.
dazu empfehle ich die Definition einer Funktion "sqlesc($string)", als Wrapper um mysqli::real_escape_string($string), da man die ziemlich oft braucht, und so weniger tippen muss, bzw. der Code etwas übersichtlicher wird. (Persönliche Vorliebe)


2. Parameter von aussen VOR Verwendung mit isset() prüfen und ggf. mit sinnvollem Null-Wert belegen. Damit es bei späterem Einfügen in die DB keine NULL-Value errors gibt.
Bei enum Werten, mittels php funktion switch(){} den Wert ermitteln und ggf entspr. String  zurückliefern (Stichwort Entkopplung)



3. Die Quirks in den php files ...(das meiste kann man mit prepared Statements, intval() und sqlesc() erschlagen und die Hälfte der Files liegt eh im Admin-Bereich ...) ...:




bookmark.php: komplette Umstellung auf prepared Statements. Da ist fast alles neu, deswegen keine nähere Beschreibung
casino.php einige unescapte $..._id s, die alle mit intval() sicher gemacht werden konnten.
messages.php ca. Zeile 150, escapen  per Adresszeiger: foreach ( $_REQUEST["selids"] as &$rid ) { $rid = intval($rid); } ... $_REQUEST["id"] wird bei späterer Verwendung mit intval() behandelt
userstraffic.php: komplette Umstellung auf prepared Statements.

mypic.php dito

userhistory.php: intval auf $_GET["id"]
uploadapp.php auch hier nahezu komplette Umstellung auf prepared Statements.Nur queries ohne Variablen von aussen können direkt bleiben.
delacctadmin.php komplette Umstellung auf prepared Statements, etc.
takelogin.php: komplette Umstellung auf prepared Statements, etc.

takeprofedit.php: an allen Stellen mit > $updateset[] = "var=".$var < , die $var entspr. escapen  mit intval() oder sqlesc()
modtask.php: ca. Zeile 100: zusätzliches isset() auf $_POST() vars.
include/wo_auch_immer_die_login_funktionen_definiert_sind.php: die entspr. Funktionen auf prepared Statements umstellen.


Hoffe, das hier hilft irgendwem weiter.
LG
jazz



(offtopic: weiß jemand, wie ich bei debian stretch, die limits NOFILE und NPROC ohne reboot dauerhaft verändern kann? Mein mysql zickt mit der Meldung "too much open files" rum)
jazzrul ist offline   Mit Zitat antworten Nach oben