AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Seltsamer Fehler bzgl. Parameterobjekt

Seltsamer Fehler bzgl. Parameterobjekt

Ein Thema von Jumpy · begonnen am 7. Mai 2014 · letzter Beitrag vom 9. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2   
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#1

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 07:58
Sorry, war gestern nicht mehr online und konnte das nicht weiter ausführen.

Die Tabelle enthält Textbausteine für meine Web-CGI, quasi ein Mini-CMS für Arme.
Sobald aus dem Webrequest ersichtlich ist, welche neue Web-Seite angefordert wurde, wird die Query geöffnet, die da lautet:

SQL-Code:
Select * From
  Webtexte
Where
  Seite='*'
  or Seite='Name der angeforderten Seite'
  or Kategorie='Menuitem'
Das einzige was an dem Statement variabel ist ist der Name der angeforderten Seite. In Delphi sieht die Stelle so as:

Code:
Webtexte.SQL.Add('or Seite = ');
Webtexte.SQL.Add(QuotedStr(GetPagename(RequestedPage)));
Die GetPagename-Funktion liefert nur definierte Namen zurück, so dass ich mich nicht um SQL-Injektion o.ä. sorgen musste und keine Parameter benutze!
Wie man sieht enthält auch die Where-Klausel keinen Vergleich mit einem Text der einen Doppelpunkt enthält.

Es gibt dann eine Funktion, die aus der bereits ohne Fehler geöffneten Datenmenge einen Textbaustein anhand der ID sucht und in dieser tritt mMn der Fehler auf. Sinngemäß (hab Delphi noch nicht auf):

Delphi-Quellcode:
function GetContentFromID(ID:String):String;
begin
  if Webtexte.Active then
    begin
    Webtexte.Locate('ID',ID,[]);
    Result:=Webtexte.FieldByName('DE').AsString;
    end;
end;
Es werden während der Laufzeit der CGI mehrere Textbausteine mit verschiedenen ID's aus der Datenmenge geladen, daher weiß ich, dass diese sich auf jeden Fall öffnet. Nur halt der eine Datensatz, der einen Doppelpunkt enthält, macht halt Probleme. Der Text in dem Datensatz ist:
"Gehen Sie dabei wie folgt vor:"
Laß ich den Doppelpunkt weg, funzt halt alles.

Ich hoffe so wird klarer warum ich das nicht nachvollziehen kann.
Ralph

Geändert von Jumpy ( 8. Mai 2014 um 08:00 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 08:13
Vor Seite fehlt höchstwahrscheinlich ein Leerzeichen, bze es schadet nicht dort eins einzufügen

Webtexte.SQL.Add(' or Seite = '); Zudem würde ich, wie auch schon mehrmals genannt, Parameter verwenden!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.813 Beiträge
 
Delphi 12 Athens
 
#3

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 08:33
Dadurch das SQL.Add eine neue Zeile (tatsächlich einen neuen String in die StringListe, ich weiss) einfügt ist das Leerzeichen vor dem 'or' überflüssig.
Es sei denn natürlich, die verwendeten DB-Komponenten klöppeln daraus einen einzigen zusammenhängenden (nicht durch CR getrennten) String.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 08:38
Zitat:
Dadurch das SQL.Add eine neue Zeile (tatsächlich einen neuen String in die StringListe, ich weiss) einfügt ist das Leerzeichen vor dem 'or' überflüssig.
Nein ist er nicht.
Zitat:
Es sei denn natürlich, die verwendeten DB-Komponenten klöppeln daraus einen einzigen zusammenhängenden (nicht durch CR getrennten) String.
Müssen sie ja, da das Statement an den SQL-Server weitergeben.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.813 Beiträge
 
Delphi 12 Athens
 
#5

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 12:15
Zitat:
Dadurch das SQL.Add eine neue Zeile (tatsächlich einen neuen String in die StringListe, ich weiss) einfügt ist das Leerzeichen vor dem 'or' überflüssig.
Nein ist er nicht.
Zitat:
Es sei denn natürlich, die verwendeten DB-Komponenten klöppeln daraus einen einzigen zusammenhängenden (nicht durch CR getrennten) String.
Müssen sie ja, da das Statement an den SQL-Server weitergeben.


Ist nicht wahr, oder? Gott, jetzt merk ich mal wieder wie sehr Oracle einen verwöhnt.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 12:38


Ist nicht wahr, oder? Gott, jetzt merk ich mal wieder wie sehr Oracle einen verwöhnt.
Ist wohl weniger Oracle als die verwendeten Treiber. Ohne White Spaces hagelt es bei mir auch Fehlermeldungen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 14:28
Hallo,

musste das ruhen lassen (ohne Doppelpunkt in dem Textfeld geht es ja erstmal) und komme erst morgen dazu eure Anregungen einmal aufzugreifen.

Werde wohl versuchen die relevanten Teile in eine GUI-Anwendung zu kopieren oder das Logging erweitern, mal sehen.

Und danach auch mal eure Anregungen aufgreifen, habt ja recht. Aber trotzdem ist es doch seltsam, dass es funzt, wenn der Doppelpunkt im Feld!!! (nicht im Feldnamen, nicht im SQl-Statement) weggelassen wird. Oder das ein Paramter-Fehler gemeldet wird, wo ich doch keine Parameter einsetze.

In anderen Datensätzen ist dies übrigens kein Problem, z.B. gibt es da auch viele Textbausteine für Webformulare mit Einträgen wie "Name:", "Ort:" usw. da klappt alles. Einziger unterschied, da gehe ich nicht über die ID um den Eintrag zu finden sondern über die Felder Seite, Position, Kategorie usw.

Bzgl. Seite='*' noch kurz. D.h. nur, dass wenn ein Textbaustein auf jeder Seite der Webanwendung auftauchen könnte, nicht auf einer konkreten, dann steht da in der Spalte "Seite" halt ein Stern drin. Solange ich nichts mit "like" im SQL mache sollte ich doch da auch keine Schwierigkeiten kriegen, dass das als Wildecard interpretiert wird.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.813 Beiträge
 
Delphi 12 Athens
 
#8

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 15:11


Ist nicht wahr, oder? Gott, jetzt merk ich mal wieder wie sehr Oracle einen verwöhnt.
Ist wohl weniger Oracle als die verwendeten Treiber. Ohne White Spaces hagelt es bei mir auch Fehlermeldungen.
Ein CR/LF ist doch auch ein Whitespace. Oder sieht das der SQLServer anders?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#9

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 08:50
Das einzige was an dem Statement variabel ist ist der Name der angeforderten Seite. In Delphi sieht die Stelle so as:

Code:
Webtexte.SQL.Add('or Seite = ');
Webtexte.SQL.Add(QuotedStr(GetPagename(RequestedPage)));
Die GetPagename-Funktion liefert nur definierte Namen zurück, so dass ich mich nicht um SQL-Injektion o.ä. sorgen musste und keine Parameter benutze!
Wie man sieht enthält auch die Where-Klausel keinen Vergleich mit einem Text der einen Doppelpunkt enthält.
Gerade das sieht man eben nicht, definierte Namen könnten auch Doppelpunkte enthalten.
SQL-Injektion ist eben nur ein (seltener) Grund und warum mit Parametern gearbeitet wird.
Auf jeden Fall kann man mit Parametern diese Fehlerquelle erst einmal ausschließen.

Wenn konkret ein bestimmter Datensatz auf Grundlage der ID benötigt wird, bietet es sich doch an, einfach nur diesen Datensatz mit einer zusätzlichen Abfrage zu holen.
Ein Problem mit Zeilenumbrüchen ist mir nicht bekannt, es spricht aber auch nichts dagegen die einzelnen Bedingungen zu klammern, ist für mich lesbarer.

Auf jeden Fall hilft es nicht alle Vorschläge wegzudiskutieren, ausprobieren bringt dich weiter.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Seltsamer Fehler bzgl. Parameterobjekt

  Alt 8. Mai 2014, 09:15
Also ich habe das mal versucht nachzustellen, konnte aber keine Probleme diesbezüglich feststellen.

Doppelpunkte im Text können mit Locate einwandfrei gefunden werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz