Suchfunktion Problem

So.... hier mal die wesendlichen problematischen code blocke, die plaintext abfrage dazu, und der jeweilige URL Encoded string. Letzteren posste ich vor allem weil einige sachen nicht das zu sein scheinen wonach sie aussehen.

PHP:
        $terms = explode(" ", $k); 
	$query = "SELECT * FROM search WHERE ";
Wozu die variablen? - die werden nirgendwo verwendet und nur wieder überschrieben.
PHP:
        <input type='text' name='k' size='50' value='<?php echo $_GET['k']; ?>' />
script.php?k='><script>alert("You Suck");</script>
->
script.php?k=%3D%27%3E%3Cscript%3Ealert%28%22You+Suck%22%29%3B%3C%2Fscript%3E

PHP:
        foreach ($terms as $each){
            $i++;
            if ($i == 1)
Kürzer ->>
PHP:
foreach($terms as $i => $each) { 
  if($i == 0)

PHP:
            if ($i == 1)
                $query .= "keywords LIKE '%$each%' ";
            else
                $query .= "OR keywords LIKE '%$each%' ";
script.php?k=';DROP TABLE search;--
->
script.php?k=%27%3BDROP%09TABLE%09search%3B--

Anm: das sind keine spaces, sondern tabs, wird also von deinem splitting ignoriert und 1:1 an die DB weiter geleitet.

PHP:
            echo "No results found for \"<b>$k</b>\"";
script.php?k=<script>while(1) { alert("nix is"); }</script>
->
script.php?k=%3Cscript%3Ewhile%281%29+%7B+alert%28%22nix+is%22%29%3B+%7D%3C%2Fscript%3E



Code quality: 10 WTFs/min oder so ;)
 
hallo chibisuke,
danke für Deine Nachricht. Das dumme, ich komme heute nicht dazu das alles zu probieren. Habe wichtige priv. Dinge zu erledigen. Denke Morgen bin ich wieder voll im Einsatzt. Bis dann.
 
Nimm das Script von TheHacker NICHT, das ist, wie dir chibisuke schon versucht hat zu verdeutlichen, extrem anfällig für Scriptkiddies (landläufig auch "hacker" genannt).

Ich empfehle dir, nichts willkürlichen Leuten zu nehmen, wenn du selber gar keine Ahnung hast, und so scheint es. Schau dich lieber nach etwas renomierteren Leuten um, die hier im Forum sehr viel Antworten und helfen, denn diese haben meist mehr Ahnung.
Nicht, dass das hier gegen TheHacker läuft, oder ich ihn beleidigen wollte, er hat aber leider nicht viel Ahnung (eigentlich keine) was Sicherheit im Web angeht (wie man leicht an seinem Code sehen kann)
 
hallo CookieBuster,
danke für Deinen Hinweis. Von den renommierten Leuten hat sich allerdings niemand zu meinem Problem geäußert. Ich bin schon seit Tagen am googlen nach Alternativen, aber ich finde nichts was ich auch nur annähernd auf meine Belange abändern könnte, denn wie Du richtig erkannt hast, ich habe keine Ahnung.
 
chibisuke hat dir in 3 Postings sehr detailiert beschrieben, wie du an die Sache rangehen könntest. Daher finde ich das jetzt etwas - sagen wir mal - ungerecht ihm gegenüber. Eine Suchfunktion ist nun mal keine triviale Angelegenheit, wenn man die Suchergebnisse gut eingrenzen will. Wenn du bei google nach den zwei Worten suchst, bekommst du auch sehr unterschiedliche Ergebnisse, die nicht unbedingt mit dem übereinstimmen, was du suchst. Deswegen wird der Algorithmus von Google auch gehütet wie ein Augapfel, weil deren Ergebnisse immer besser werden.

Du kannst schon mal dafür sorgen, das allen Schlüsselworten ein + Zeichen angehängt wird, dann könnten die Ergebnisse schon mal etwas akurater werden, so arbeite auch Google. Aber das hat dir chibisuke auch schon in einem Post erklärt.

Wenn man ein gutes Produkt haben will, muss da auch Hirnschmalz reingesteckt werden. Eine popelige Suche, dir auch nur um ein paar Zacken sicherer ist, als dass, was dir thehacker (ich finde den Nick übrigens spitze - leider nicht bezeichnend) geliefert hat.

Vielleicht kannst du ja deine Suche so umbauen, dass sie die Ergebnisse liefert, die du wünschst. Ich würde es so angehen:

Erstelle im Such-Formular einen Haken, der aussagt, das alle eingegeben Suchworte im Text vorkommen müssen. Der Haken ist standard-mäßig eingeschaltet (wenn du nicht weißt, wie das geht, nachfragen). Im PHP-Code wird der Status des Hakens ausgewertet, ist er gesetzt, werden die Suchworte folgendermaßen zusammen gesetzt (der Code stammt aus deinem ersten Posting):

PHP:
//jedes einzelne Suchwort ausgeben, aber nur, wenn alle Suchworte im Ergebnis vorkommen...
if ($items != 0 && isset($_GET['alle_such_worte_muessen_vorgekommen'])) {
  // Wir überschreiben das Array durch einen String, bei dem alle Suchworte durch ein sog. Wildcard (Platzhalter) getrennt werden
  $suchteile = implode('%', $suchteile);

  // Sicherheit: !!Gefährliche Zeichen escapen!!
  $suchteile = mysql_real_escape_string($suchteile);
  // Sicherheit: !!HTML-Code filtern!!
  $suchteile = strip_tags($suchteile);

/* Die Schleife wird nicht mehr benötigt
for($x=0; $x<$items; $x++) {
$n = $x + 0;
echo " <b>$n. Suchwort: $suchteile[$x] </b> <br>";
*/

//Datensätze in denen das gesuchte Wort ($suche) vorkommt; % = unbekannte Zeichen
$abfrage = "SELECT * FROM shop_internet
WHERE lower(kategorie) LIKE '%$suchteile%' OR lower(name) LIKE '%$suchteile%'
OR lower(ort) LIKE '%$suchteile%'";
$ergebnis = mysql_query($abfrage);

echo '<table id="tab1" width="750" border="0">';

while($row = mysql_fetch_object($ergebnis))

Warum durchsuchst du eigentlich so viele Spalten? Dann ist ja klar, dass das Ergebnis größer wird. Vielleicht solltest du auch mal einen Auszug aus den Daten deiner Tabelle zur Verfügung stellen, und aufzeigen, was du wie in Kombination haben willst.

Du kannst natürlich auch alle Suchworte ohne Leerzeichen wieder zusammen fügen, das geht auch mittels der Funktion implode(), aber dadurch beschränkst du die Suche schon sehr.
 
hallo saftmeister,
danke für Deine ausführliche Nachricht. Du hast in allen Dingen recht, ich weiß die Mühe zu schätzten die chibisuke sich gemacht hat und bin dabei mir selbst eine Suchfunktion zu bauen mit der bereits von Euch erhaltenen Hilfe. Gestern habe ich eine HP gefunden die SQL sehr verständlich in einzelnen Bausteinen erklärt. Denke ich werde das hinkriegen. Danke Euch allen für die Mühe.
 
hallo thehacker,
ich bin bei meinem ursprünglichen script geblieben, bis auf ganz kleine Änderungen. Mein Objekt ist abgeschlossen. Wenn Du möchtest kannst Du es Dir anschauen. http://www.opfer.esBedankt habe ich mich bei Dir schon. Mal ne Frage: Gibt es Geld dafür wenn dieser Danke Button geklickt wird ? Alle sind so scharf drauf.
Gruß Peter
 
Nein, es gibt kein Geld, wenn darauf geklickt wird. Wir sind hier alle freiwillig und dieser Knopf ist einfach nur eine Möglichkeit jemanden seine Wertschätzung zu zeigen. Dadurch verändert sich der Balken unter deinem Nutzernamen, welcher dein Renommee anzeigt.
 
Zurück