![]() |
SQL-Abfrage via URL-Parameter
Wenn ich im Browser
mydomain.at/myscript.php?where_string=id=17 eintrage, wird das in meinem php-Script PHP-Code:
Leider funktioniert das nur mit Zahlenfeldern. Wie stelle ich das an, wenn ich ein Textfeld abfragen will: mydomain.at/myscript.php?where_string=Tier=Katze Das funktioniert ohne Hochkommas nicht. Hat da jemand eine Idee? Danke ff |
du mußt $where_string mit einfachem hochkomma einschließen -> '$where_string' ...
|
Das funktioniert leider nicht. Die Variable $where_string soll ja Tier='Katze' liefern und nicht 'Tier=Katze'.
Das Problem sehe ich eher in den URL-Parametern. Wie bringe ich das $where_string="Tier=\'Katze\'" oder so aehnlich in einer URL unter? Danke ff |
aja, jetzt wird mir klar, was du willst ...
dann solltest du nicht beide paramater in einen reinstopfen, sondern diese trennen ... mydomain.at/myscript.php?search_column=Tier&match_string=Katze PHP-Code:
|
Ja, das funktioniert so. Nur bin ich halt dann bei der Abfrage nicht so flexibel, wie ich es gerne haette. Dann braeuchte ich eine weitere Variable fuer den Operator (= ,LIKE, <, >, ...) und was mache ich bei Tier='Katze' AND Farbe='schwarz'?
Vermutlich bilde ich schon wieder etwas ein, was via URL gar nicht moeglich ist . . . schade :( Danke jedenfalls fuer deine Hilfe! ff |
naja, man kann halt nicht alles so wie man es gerne hätte in eine url packen ;) ...
|
aber man soll die Hoffnung nicht aufgeben ;-)
Jedenfalls geht es auch, wenn man nun den Operator in die 1. Variable schreibt! Also: mydomain.at/myscript.php?search_column=Tier =&match_string=Katze bzw. mydomain.at/myscript.php?search_column=Farbe LIKE&match_string=%schwarz% PHP-Code:
ff |
ich würd dann aber den operator auch separat in einer eigenen variable übergeben ;) ...
|
Hast du dafuer eine Begruendung, die ich momentan nicht erkennen kann?
|
bei der parameter-übergabe würde ich jedenfalls leer- und operatorzeichen (=, <, >, !=, <=, >=) möglichst vermeiden ...
statt "=" würde ich das wort "equal" nehmen (analog dazu greater, less_then, not_equal, usw.) ... das ganze dann in php auf das entsprechende operator-zeichen zu ersetzen ist IMHO designmäßig unkritischer (vor allem in bezug auf fehlerquellen bei upgrade oder zusätzlicher einzubindender browser bzw. plattformen) ... |
Tja, jetzt, wo du's sagst . . . ;-)
Danke ff |
tjo, meistens is es einem eh klar - aber erst wenn's einem gesagt, wird denkt man dran :rolleyes: ...
|
Oder wenns kürzer sein soll kann man die abkürzungen:
= eq (equals) < lt (less than) > gt (greater than) verwenden. Rein instinktiv würde ich aber sagen das SQL-Statements per Url zu übergeben böse ist (Stichwort XSS). jak |
Juhu ein Query als GET Parameter... gibts noch was einfacheres als eine DB zu flodden?! :ms:
pong |
Laß ihn, so kann wenigstens jeder die DB auslesen und mit etwas Glück gibts Kundendaten/Kreditkartennummern :D
Sloter |
Ahja? Geht das wirklich? Du meinst, es ist zwar schwierig eine einfache Abfrage in einer URL unterzubringen, sodass man mit mehreren Variablen arbeiten muss, aber boesen Code kann man so ohne weiteres einschlaeusen? Na ich zumindest nicht, da ich keine boesen Gedanken habe, aber wenn das so ist, werde ich die Sache nocheinmal ueberdenken muessen.
Obwohl, alles was aus meinen DBs auszulesen ist, wird ohnehin angezeigt. @Sloter - no comment lg ff |
Zitat:
@ff wie war noch gschwind dir URL ;) pong |
@pong & sloter:
Helfen oder Schweigen! Eure Kommentare sind völlig überflüssig. Wenn ihr schon postings jagts, dann machts wenigstens vernünftige Alternativvorschläge, und hebts Euch diesen reply-style fürn Tuvok auf. |
Zitat:
eine sql-query mit parametern die ungefiltert von einem GET-parameter übernommen werden ist extrem gefährlich für eine datenbank. würd ich mir gut überlegen ob ich das SO mach. |
Ich bleib dabei:
Damit das eine Hilfe wird, gehört imho ein bißchen mehr Info dazu. |
@Klingsor - Danke fuer deine konstruktive Einmischung. Aber sie wollen mir halt nur soweit helfen, bis sie meine DB knacken koennen, um herauszufinden, welche Farbe das Flohband der schwarzen Katze hat. :P
Trotzdem, auch auf die Gefahr hin, dass ich jetzt googeln und zu Tuturials geschickt werde, stelle ich jetzt die Frage anders und bitte um moeglichst sichere Loeungsvorschlaege. Damit meine ich nicht den Vorschlag, die DB offline zu betreiben. Also angenommen, ich erstelle eine html/php-Seite ueber die Entwicklung der Katzen. In einer mysql-DB sind Fotos und Daten von 500 Katzen gespeichert. Auf der html/php-Seite sollen Links sein, die ein neues Fenster oeffnen, wo ergaenzende passende Daten aus der DB angezeigt werden. Wenn es sich nur um 1 Datensatz handelt, ist das einfach. Da sende ich die ID. Damit koennen vermutlich nur ganz besonders boese Buben etwas anstellen. Wenn der Link aber alle "schwarzen nordasiatischen Langhaarkatzen" (z.B. 27 Stueck) anzeigen soll, dann muss ich mehr als die ID liefern. So, wie oben geklaert, funktioniert das auch wunderbar, aber dass dann die boesen Buben eventuell den Katzen das Futter wegfressen koennten, gefaellt mir natuerlich nicht wirklich so gut. In anderen einfacheren DBs arbeite ich mit Kategorien und frage diese einfach ab. Aber bei ueber 100 Kategorien und Subkategorien, die vorher angelegt werden muessten, nur weil man eventuell einmal im Text eine ganz spezifische Auswahl aufruefen moechte, wird die Sache unlustig, wenn eine elegantere Loesung funktioniert. Wenn da nur die boesen Buben nicht waeren . . . lg ff |
@Potassium
Es waere nett von dir, wenn du mir/uns eine Liste mit den "Worten" posten wuerdest, deren Filterung Sinn macht, weil sie in diesem Zusammenhang gefaehrlich sein koennen. Also nicht saemtliche mysql-Befehle. Hier ist Erfahrung gefragt, die mir in dieser Hinsicht fehlt. Ausserdem merke ich mir nur die Befehle, die ich brauche und verwende. Ich habe wirklich keine Lust, meine Energie damit zu verschwenden, saemtliche php und mysql-Befehle zu durchforsten und zu ueberlegen, ob man damit eventuell etwas anstellen koennte. Da frage ich doch viel lieber im wcm-Forum nach, ob sich schon jemand diese Arbeit angetan hat . . . :) Danke ff |
http://de.wikipedia.org/wiki/SQL-Injektion
lies mal. und noch zusätzlich: http://de.wikipedia.org/wiki/XSS |
Zitat:
Was ist von dir gekommen? Denke du bist auf Sternderljagd, zum Thread hast du nichts beigetragen. Sloter |
Zitat:
Mittlerweile gibt's ja auch schon sachliche Beiträge. Ich interessiere mich zwar dafür, aber auf der sachlichen Ebene warte ich doch gerne, bis (wirkliche!) Routiniers ihre Kenntnisse dadurch bezeugen, dass sie methodisch umsetzbare Informationen liefern. |
|
Zitat:
Es würde schon reichen etwas seinen Kopf einzuschalten... Wenn man Query "a" ungehindert, ungeprüft und uneingeschränkt ausführen kann, was hindert einem dann daran jede x-beliebige Query zu senden? Weiters wäre es halt sehr sinnvoll Manual bzw. Dokumentation über die Produkte zu lesen, welche man gedenkt einzusetzen pong |
@Potassium - Danke fuer die interessanten Links!
Ich habe das Beispiel mydomain.at/myscript.php?search_column=Tier GO EXEC cmdshell('format C') -- getestet und somit hat sich das Problem erledigt . . . ;-) Nun im Ernst, wenn das funktionieren wuerde, dann haette ja auch meine eigene "Injektion", wegen welcher ich diesen Thread eroeffnet habe funktioniert. Allerdings ist mir jetzt bewusst, dass die php.ini-Einstellung "magic_quotes_gpc = On" das verhindert. mysql_real_escape_string() habe ich hier auch als "guten Buben" gefunden. Allerdings muss ich dafuer vorher auf mysql 4 upgraden. Das ist ohnehin in den naechsten Tagen geplant. @Sesa_Mina - Danke fuer den Link! Das lege ich mir einmal unter den Kopfpolster . . . @pong - Falls DU die geistigen Faehigkeiten besitzt, das komplette php-, perl-, mysql-, apache- und Linux-Manual durchzuackern, dir alles zu merken, dich dann hinzusetzen und alles von Grund auf richtig, alle guten und boesen Aspekte beruecksichtigend, zu programmieren, dann kann ich dir nur meine volle Hochachtung und Bewunderung aussprechen. Ich besitze leider diese Faehigkeit nicht und muss mit "learning by doing" vorlieb nehmen. Und dazu gehoert auch, ab und zu eine Frage in das WCM-Forum zu stellen, um die neu zu lernenden Inhalte mit Hilfe der Forumgemeinde einzugrenzen. Dabei habe ich ueberhaupt kein schlechtes Gewissen, da jede(r) Helfende das freiwillig macht. In Bereichen, wo ich selbst Erfahrungsvorsprung besitze, helfe ich auch anderen gerne. lg ff |
@Klingsor
IMHO muss ich da pong & Sloter schon recht geben ... oft reicht auch schon der hinweis, dass die lösung suboptimal ist, um ein umdenken zu bewirken ... wenn dann der fragende bereit ist (wie auch bei ff festgestellt), andere lösungsansätze zu verfolgen, dann wird er, sofern er nicht selbst einen lösungsweg findet, erneut um hilfe fragen ... gerade das "selbst nach einer lösung suchen" bewirkt meiner erfahrung nach den besten lerneffekt ... |
Zitat:
Manche begeilen sich halt lieber an ihrer vermeintlichen abgehobenen Überlegenheit, hinter der oft nicht viel ist, statt produktiv an einem Forum teilzunehmen. |
Na ja...lieber Klingsor....abgehoben sicher nicht.
Pong und ich haben etwas gewitzelt und aufgezeigt das der Weg nicht unbedingt gut ist. FF ist imho sicher so weit, das er seine Idee erweitert ohne das ich ihm jede Zeile aufschreiben muss. Vielleicht ein wenig sarkastisch, aber bei FF ist die Botschaft sicher angekommen. Wenn du wie ich fast täglich mit so einer Art von Attacken zu tun hast und immer zurück bekommst das es nicht so Schlimm ist und dann später das große Gehäule hörst, das es doch so ist. Möchtest du doch die Botschaft loswerden, das es leider viele böse Buben gibt. Du wirst mir recht geben, das man Lücken und diverse Arten von Attacken nur kennt wenn man auch auf der dunklen Seiten unterwegs war/ist und somit auch ein wenig Vorrausschauender handeln kann. FF hat eine super Idee für seine Homepage und investiert sicher viel Zeit. Es wäre total schade, wenn er eines Morgens eine veränderte Startseite vorfindet. Irgenwie kann ich nicht glauben das du meinen Wink mit dem Zaunpfahl nicht verstehen kannst/möchtest, deshalb verstehe ich nicht, warum du mich und pong anmachst. Ausser du bist Amerikaner,die pudel`n sich gerne auf, was sie eigentlich nichts angeht :D Du bist weiterhin auf Sternderljagd ;) Sloter |
Zitat:
Dein Beitrag ist nun aber schon ganz was anderes, als diese provokanten Einzeiler. Ich finde, bei all den Trotteln, die auch hier posten, sollte man grundsätzlich einmal bei ernsten und sinnvollen Fragen nicht primär witzeln. Ist später eh voll OK. Aber bis zu meinem Ordnungsruf ist in diesem Thread nur wieder einmal der Netti konstruktiv gewesen. Und wenn Du Dein "...es wäre total schade, wenn er eines Morgens..." ernst meinst, dann weißt Du ja schon auch, was ich meine ;) |
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag