Usersuche

Begonnen von spike, 03 Januar 2007, 13:16:03

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Andi

So, das Script ist installiert und wurde aufgerufen. Bei eingeschaltetem Debugmodus ist die Seite erstmal voll mit Fehlermeldungen:
ZitatNotice: Undefined variable: sitename in /modules/Usersuche/index.php on line 49
Notice: Undefined index: bday_day in /modules/Usersuche/index.php on line 95
Notice: Undefined index: bday_month in /modules/Usersuche/index.php on line 106
Notice: Undefined index: user_sexus in /modules/Usersuche/index.php on line 128
Notice: Undefined index: user_sexus in /modules/Usersuche/index.php on line 130
Notice: Undefined index: user_famstatus in /modules/Usersuche/index.php on line 139
Notice: Undefined index: user_smoke in /modules/Usersuche/index.php on line 163
usw....

Notice: Undefined variable: sitename in /modules/Usersuche/index.php on line 49
$sitename ist eine globale Variable aus der config.php, sie muss in der Funktion global verfügbar sein.
also global $sitename; in der Funktion init() zufügen

Notice: Undefined index: bday_day in /modules/Usersuche/index.php on line 95
Notice: Undefined index: bday_month in /modules/Usersuche/index.php on line 106
Notice: Undefined index: user_sexus in /modules/Usersuche/index.php on line 128
usw....
Diese Array-Indexe sind nur vorhanden, wenn das Formular über Post abgesendet wurde und sich selbst wieder aufruft. Es müsste also vor Verwendung der Variablen-Indexe geprüft werden, ob diese überhaupt vorhanden sind. Hier eigentlich nur unschön, aber sauberes Coding ist das nicht und kann unter anderen Umständen zu schweren Sicherheitslücken führen. Das sollte man sich erst garnicht angewöhnen.
Also z.B. diese Zeile: <option value='0'<? if($_POST["user_sexus"] == "0") echo " selected"; ?>>nicht angegeben</option> wie folgt abändern <option value='0'<? if(isset($_POST["user_sexus"]) && $_POST["user_sexus"] == "0") echo " selected"; ?>>nicht angegeben</option>
Ich habe jetzt, dass es schneller geht, folgende Konstrukt in die Funktion eingabe() eingefügt:

if(empty($_POST['uname'])) $_POST['uname'] = '';
if(empty($_POST['realname'])) $_POST['realname'] = '';
if(empty($_POST['user_from'])) $_POST['user_from'] = '';
if(empty($_POST['bday_day'])) $_POST['bday_day'] = '';
if(empty($_POST['bday_month'])) $_POST['bday_month'] = '';
if(empty($_POST['bday_year'])) $_POST['bday_year'] = '';
if(empty($_POST['user_partneralter1'])) $_POST['user_partneralter1'] = '';
if(empty($_POST['user_partneralter2'])) $_POST['user_partneralter2'] = '';
if(empty($_POST['user_sexus'])) $_POST['user_sexus'] = '';
if(empty($_POST['user_famstatus'])) $_POST['user_famstatus'] = '';
if(empty($_POST['user_heigh1'])) $_POST['user_heigh1'] = '';
if(empty($_POST['user_heigh2'])) $_POST['user_heigh2'] = '';
if(empty($_POST['user_gewicht1'])) $_POST['user_gewicht1'] = '';
if(empty($_POST['user_gewicht2'])) $_POST['user_gewicht2'] = '';
if(empty($_POST['user_haar'])) $_POST['user_haar'] = '';
if(empty($_POST['user_augen'])) $_POST['user_augen'] = '';
if(empty($_POST['user_smoke'])) $_POST['user_smoke'] = '';
if(empty($_POST['user_alkohol'])) $_POST['user_alkohol'] = '';
if(empty($_POST['user_piercing'])) $_POST['user_piercing'] = '';
if(empty($_POST['user_tatto'])) $_POST['user_tatto'] = '';
if(empty($_POST['user_sucht'])) $_POST['user_sucht'] = '';
if(empty($_POST['user_beziehung'])) $_POST['user_beziehung'] = '';
if(empty($_POST['user_partnerfigur'])) $_POST['user_partnerfigur'] = '';
if(empty($_POST['ausgabe'])) $_POST['ausgabe'] = '';
Das ist Geschmacksache und ist sicher besser zu machen...


So, jetzt zur eigentlichen Suchfunktion.
Grundsätzlich sollte die Usertabelle über den User-Prefix angesprochen werden. Also in die Funktion search() folgendes hinzufügen: global $user_prefix; und in sämtlichen Datenbankabfragen, in denen die Usertabelle angesprochen wird den Namen der Usertabelle mit dem user_prefix anstatt dem prefix ergänzen.

Dann finden sich Konstrukte in der Art in der Suchfunktion:    if(!empty($_POST["uname"])){
        $sql.=" && uname LIKE '%".trim($_POST["uname"])."%'";
    }
    if(!empty($_POST["user_heigh1"])){
        $sql.=" && user_heigh > ".trim($_POST["user_heigh1"]);
    }
Der Operator && ist zwar in mysql toleriert, aber normalerweise sollte das Schlüsselwort AND verwendet werden.
Desweiteren sollten Usereingaben auf jeden Fall auf Gültigkeit überprüft werden und Sonderzeichen "escaped" werden. Bei einer Suchfunktion, in denen beliebige Strings über Formulare eingegeben werden können, ist natürlich nicht viel auf Gültigkeit zu überprüfen. Evtl. könnte man Sonderzeichen ausfiltern und die Länge beschränken. Der USername darf z.B. nur 25 Zeichen lang sein. Das ist hier jetzt aber zu komplex, um das vollständig zu behandeln.
Zum escapen der Sonderzeichen empfiehlt sich in pragmaMx die API-Funktion mxAddSlashesForSQL(). Übergabevariablen, die normalerweise nur eine Zahl enthalten dürfen, können z.B. mit intval() zwangsweise in eine Zahl umgewandelt werden.
Die oben genannten Zeilen würden dann etwa so aussehen:
    if(!empty($_POST["uname"])){
        $sql.=" AND uname LIKE '%".trim(mxAddSlashesForSQL(substr($_POST["uname"], 0, 25)))."%'";
    }
    if(!empty($_POST["user_heigh1"])){
        $sql.=" AND user_heigh > ".intval($_POST["user_heigh1"]);
    }


Die eigentliche Datenbankabfrage, weiter unten,
$result=mysql_query($sql);
$Anzahl=mysql_num_rows($result);
$sql=$sql." order by uname ASC limit ".$_POST["Anfangsposition"].",".$ZeilenProSeite;
$result=mysql_query($sql);

muss in pragmaMx mit der API-Funktion sql_query() erfolgen, nicht wie in dem Script mit der normalen PHP-Funktion mysql_query(). Nur so greift der volle Schutz durch das integrierte Detection System. Konsequenterweise sollten dann auch die anderen Datenbankfunktionen der pragmaMx-Datenbank-API (sql_layer.php) verwendet werden.
Auch in der Limit-Begrenzung der Datenbankabfrage lauert eine Sicherheitslücke. Die beiden Parameter Start und Anzahl für das Limit dürfen nur eine Zahl sein. Ein Hacker könnte hier durch das einschleusen von einem String die Abfrage manipulieren.

Die abgeänderten Zeilen würden dann so aussehen:
$result=sql_query($sql);
$Anzahl=sql_num_rows($result);
$sql=$sql." order by uname ASC limit ".intval($_POST["Anfangsposition"]).",".intval($ZeilenProSeite);
$result=sql_query($sql);


Das war's erstmal grob zur Sicherheit. Ich denke da kommen jetzt sicher noch Fragen ;)


Für jeden, der das nachvollziehen will, habe ich die unveränderte Datei hier mal angehängt.
Also nicht für den Einsatz, nur zum guggen und mitmachen!!
Deswegen habe ich den Thread jetzt auch in die Coder und Bastlerecke verschoben ;)
schön´s Grüssle, Andi

lemming

hy  :smile:,
ech stark! danke für die gute erklärung andi!

werd das script daheim jetzt nochmal überarbeiten und dann einsenden. zwecks providerwechsel hab ich grad kein dsl aber im normalfall bin ich ende der woche wieder online.

nochmal vielen dank für die gute gegenüberstellung der einzelnen kritischen punkte! bookmark!
greetz,
Jörg

------------------------
Mitgliedersuche v.0.3 *new*

lemming

besser spät als nie :) an alle die auf das modul warten. ich habs soeben Andi per email für den downloadbereich zugeschickt.

gruß,
jörg
greetz,
Jörg

------------------------
Mitgliedersuche v.0.3 *new*

lemming

sorry für doppelpost aber konnts nicht mehr editieren...hier kann man sichs mal anschauen:

http://www.party-calw.de/modules.php?name=Usersuche
greetz,
Jörg

------------------------
Mitgliedersuche v.0.3 *new*

CanKan

Hallo,

danke für das super Modul  :thumbup:


Wenn man User sucht und ergebnisse bekommt schaut man sich irgendein Profil. Und wenn man zurück auf die Ergebnisseite klickt ist die Seite abgelaufen. Man muss dann die Seite aktualisieren damit die Ergebnisse wieder zurückkommen. Könnte man dagegen was machen damit die Ergebnisse mit dem Zurückbutton sofort erscheinen?

Und ein kleines Usersuche Block wäre aus Super mit den Suchkriterien Username Stadt alter und suche mit dem Bild z.B.  :smile:


Danke nochmals


MfG

CanKan
Der Hund bellt, die Karawane zieht weiter.

lemming

hy,

bevor jetzt hier alle fragen wo ers her hat. ich habs ihm nur mal zum testen gegeben. bitte wartet noch, bis andi oder jemand anders es für den download bereich freigeschaltet haben.

wegen dem zurück weiß ich spontan grad nichts zu.

block ist von meiner seite aus erstmal keiner geplant.

gruß,
jörg  :)
greetz,
Jörg

------------------------
Mitgliedersuche v.0.3 *new*

shaky84

hey Leute,

sagt mal wann wird der Download denn jetzt freigeschaltet?
würde das script auch gern haben.

lg

wob

Gibt es hier schon neue Infos ???:gruebel:

Gruss
Ideen sind immer gut, nur diese Idee`n umsetzen ist eine andere frage :-)

lemming

hi wob  :),

weiß nicht ob du das hier schon gelesen hast:

http://www.pragmamx.org/Forum-topic-22506-start-msg152879.html#msg152879

mehr gibts bisher nicht. sollte das nichts mehr werden mit dem freischalten, würd ichs natürlich auch so weitergeben denn bei mir läufts ohne probleme bisher! aber ich denke bischen warten lohnt sich noch.

gruß
greetz,
Jörg

------------------------
Mitgliedersuche v.0.3 *new*

wob

Thx lemming.

Ok dann warten wir doch lieber, mal hoffen das Andi dieses die nächsten Tage schafft :-)

Gruss & Danke für deine Antwort
Ideen sind immer gut, nur diese Idee`n umsetzen ist eine andere frage :-)

baraber

Hallo,

wie is der Stand der Dinge ? Weiss jemand was ?

Gruß

Tony

Eudossi

Hallo,

das Modul würde mich auch brennend interessieren. Wann wird das Modul denn freigegeben bzw. besteht die Möglichkeit das Modul vom Entwickler zu bekommen?

Grüße
Eudossi

breakdancer

Hallo zusammen,

ich schieb nochmal ganz lieb hoch, ist ja nun schon fast ein Monat wieder rum...  :BD:

Nur mal so, damit es nicht ganz in Vergessenheit gerät.

Liebe Grüße

Markus

Chris007

Ja als geduldiger User wobei 6. Monate hmm  :gruebel:

werde ich es mal auch hochschieben in der hoffnung mal zu erfahren was aus dem modul geworden ist.

Liebbe Grüße

Chris

JoergK

Hoi ;)

Die ganze Hochschieberei bringt überhaupt nichts, solange der User lemming seine Arbeit nicht erneut in die Downloads stellt. Es liegt uns zur Zeit kein derartiger Download zur Freigabe vor.

Und damit das hier nicht wieder nen endloser "Wann kommt das Modul denn endlich?" Thread wird, mach ich an dieser Stelle den Thread zu.

Sollte das Modul erneut eingestellt und auch freigegeben werden, sind evtl. auftretende Probleme sowieso in neuen Threads zu erörtern. ;)
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody