ERLEDIGT
NEIN
NEIN
ANTWORTEN
15
15
ZUGRIFFE
903
903
EMPFEHLEN
-
hallo,
thema paging: ich hab eine suchseite gemacht, bei der pro seite max. 10 DS ausgegeben werden sollen. das script dafür funktioniert an sich gut. jetzt hab ich aber das problem der datenherkunft. der sql string der anzeigeseite ruft eine funktion auf. dem sql string übergebe ich zwei eingabewerte: den eintrag des textfeldes und ein sprachenkürzel (bsp. de). die erste seite wird noch korrekt angezeigt. blättere ich jedoch weiter, dann werden keine DS mehr angezeigt. hat jemand vielleicht eine idee, wie ich dieses problem lösen kann. vielleicht den recordset in ein array oder eine variable speichernweiß nur nicht, wie es geht...
gruß
tob
-
Hi
es gibt viele Möglichkeiten für ein paging in ASP.
http://www.aspheute.com/artikel/20000403.htm
http://www.aspfaq.de/index.asp?RID=2...bsolute&OSFI=1
ich kann jetzt noch ein paar Links aufzählen.
Wie Du siehst, ist Deine Frage nicht zu beantworten ohne dass man den Scriptcode dafür kennt.liebe Grüße, die Luzie
-
hi,
ich glaube, dass der code in dem erstmal zweitrangig ist. wie schon beschrieben, ist die datenquelle eine funktion auf dem sql server, die von mir zwei eingabeparameter bekommt.
hier der code:
Code :1
SqlJunk = "SELECT * FROM fu_art_suche('" & Request.Form("eingabe") & "', 'de')"
zum blättern rufe ich ja immer wieder diese eine seite auf. und ist wohl das problem.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<% 'Display PREV page link, if appropriate If Not CurrentPage = 1 Then Response.Write "<a href='" & ScriptName & "?page=" & CurrentPage - 1 & "'>Prev</a> | " Else Response.Write "Prev | " End If 'Display NEXT page link, if appropriate If Not CurrentPage = TotalPages Then Response.Write "<a href='" & ScriptName & "?page=" & CurrentPage + 1 & "'>Next</a>" Else Response.Write "Next" End If %>
und jetzt der komplette code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
<% 'Fetch the name of this script ScriptName = Request.ServerVariables("art_list.asp") Dim SqlJunk, strComplete strComplete = "PROVIDER=MSDASQL;Driver=SQL Server;Server=test;UID=User;PWD=PWD;Database=Artikel;" ' --- Öffnen der Datenbankverbindung Set dbGlobalWeb = Server.CreateObject("ADODB.Connection") dbGlobalWeb.open strComplete 'Set how many records per page we want Const NumPerPage = 10 'Retrieve what page we're currently on If Request.QueryString("page") = "" then CurrentPage = 1 'We're on the first page Else CurrentPage = CInt(Request.QueryString("page")) End If SqlJunk = "SELECT * FROM fu_art_suche('" & Request.Form("eingabe") & "', 'de')" Set rsGlobalWeb = Server.CreateObject("ADODB.Recordset") rsGlobalWeb.Open SqlJunk, dbGlobalWeb, 3 If Not rsGlobalWeb.EOF Then rsGlobalWeb.MoveFirst rsGlobalWeb.PageSize = NumPerPage TotalPages = rsGlobalWeb.PageCount 'Set the absolute (current) page rsGlobalWeb.AbsolutePage = CurrentPage End If Dim Count %> <html><head> <title>Database Paging Sample</title> </head><body> <p><font size="2" face="Arial"><b> <% 'Display PREV page link, if appropriate If Not CurrentPage = 1 Then Response.Write "<a href='" & ScriptName & "?page=" & CurrentPage - 1 & "'>Prev</a> | " Else Response.Write "Prev | " End If 'Display NEXT page link, if appropriate If Not CurrentPage = TotalPages Then Response.Write "<a href='" & ScriptName & "?page=" & CurrentPage + 1 & "'>Next</a>" Else Response.Write "Next" End If %> <table cellspacing="0" cellpadding="0" class="innertable"> <tr> <td class="black12"> <form name="ArtSuche" action="art_list.asp" method="Post"> <input type="text" name="eingabe" size="20" value="<%=Request.Form("eingabe")%>" /> <input type="submit" value="Suchen" name="B1"> </form> </td> </tr> </table> </b></font></p> <p><b><font size="2" face="Verdana">Displaying page <%=CurrentPage%> of <%=TotalPages%>:</font></b></p><p> <% 'Loop to display data on current page. Do While Not rsGlobalWeb.EOF and Count < rsGlobalWeb.PageSize Response.Write rsGlobalWeb("art") & "<br>" rsGlobalWeb.MoveNext Count = Count + 1 Loop %> </body></html>
wenn ich als datenherkunft eine normale abfrage defieniere, funktioniert es natürlich...
gruß
tob
-
Hi
dann musst Du die Suche einfangen und über die Seitennavigation oder über eine Session wieder mitschicken. Anders bekommst Du die Auswahl nicht zustande.
Dies ist übrigens eine Sicherheitslücke.
Wo ist die Bedingung?
Ich kenne jetzt Deine Datenbank nicht.
SqlJunk = "SELECT * FROM fu_art_suche('" & Request.Form("eingabe") & "', 'de')"
Einfach mal über sql-Injection informieren. z.b. auf www.aspheute.comGeändert von Luzie (30.09.05 um 15:16 Uhr)
liebe Grüße, die Luzie
-
hi,
kannst mir sagen, wie ich die suche "einfangen" soll?vielleicht mit einem code bsp.?
gruß
tob
-
Zum einen solltest Du den Request zumindest escapen
Code :1 2 3
dim eingabe, suche eingabe = Request.Form("eingabe") & Request.QueryString("eingabe") suche = Replace(eingabe,"'","''")
Dann für das Statement
Code :1
sql="Select * from Tabelle where suchfeld='" & suche & "'"
dann musst Du die betreffenden Links entsprechend den neuen Anforderungen umbauen
Code :1 2 3 4 5 6 7 8 9
dim what what = "" if eingabe <> "" then what="&eingabe=" & suche If Not CurrentPage = 1 Then Response.Write "<a href=""" & ScriptName & "?page=" & CurrentPage - 1 & what & """>Prev</a> | " Else Response.Write "Prev | " End If
Kommen noch mehr Einschänkungen dazu, kannst Du die Variable what noch erweiteren
z.B.
if dies = das then what = what & "&dies=" & das
Zu Bedenken ist, das Du einmal einen Parameter über ein Form übergibst und im Link über die URL. Also muss beides angefordert werden können.Geändert von Luzie (30.09.05 um 15:39 Uhr)
liebe Grüße, die Luzie
-
Moinsen,
also das mit dem Ausfiltern von dem einfachen Anführungsstrich ist zwar ein netter Versuch, hält aber einen Hacker nicht wirklich davon ab sein böses Werk zu vollenden. Einerseits wäre diese Filterrung nur bei Textfeldern wirksam und würde bei Zahlenwerten schon scheitern. Auch gibt es noch andere Möglichkeiten einen Anführungsstrich zu erzeugen, die ASP nicht abfangen kann und erst im SQL-Server zu einem Schaden führen ... Stichwort hier z.B. ASCII-Codes ... oder auch andere Möglihckeiten die ich hier nicht aufzählen will. Einen Weg um diese Filterung gibt es immer.
Die einzigen Möglichkeiten die ein SQL-Injection verhindern können sind die parametrisierten Anweisungen. Dabei wird der SQL-String im Prinzip vorkompiliert und der Server weiß jetzt, dass nur noch die Parameter fehlen. Aber der String selber kann nicht mehr verändert werden. Somit ist ein SQL-Injection schon unterbunden. Möchte man jetzt auch noch einen Buffer Overflow unterbinden, dann sollte man die eingegebenen Daten noch auf Plausibilität prüfen. Damit meine ich ob die Zeichen richtig sind (Zahlen, Texte, ...) und ob die Länge nicht zu lang sind für das Daten-Feld.
Eines sollte euch immer klar sein, ein Hacker freut sich immer über Fehlermeldungen ... vor allem die Systemfehlermeldungen. Daraus kann man Informationen beziehen, die ein Hacker besser nicht wissen sollte. Darum das Debugging immer ausschalten und eigene Fehlerabfang-Routinen schreiben.
Weitere wichtige Informationen dazu findet man bei ASPHeute.com
So long,
Chrisu
-
Moinsen,
anstelle von
könnte man auchCode :1
eingabe = Request.Form("eingabe") & Request.QueryString("eingabe")
verwenden. Dadurch muß man keine Unterscheidung zwischen .Form und .QueryString machen. Ist aber kein wirklich sauberer Programmierstil und sollte wenn es geht vermieden werden. Besser ist es, wenn man sich für eine Methode (GET/POST) entscheidet und dann auch nur diese eine Methode verwendet.Code :1
eingabe = Request("eingabe")
So long,
Chrisu
-
Zitat von Chrisu
Huhu
wird aber auch jeder andere Request mit durchgenudelt. (serverlastig)
Wenn man genau weiss, dass dieser Request nicht aus einer SV oder einem Cookie kommt, sollte man sich einfach die Mühe machen, es AUSzuschreiben. bzw. zu differenzieren.Geändert von Luzie (30.09.05 um 21:38 Uhr)
liebe Grüße, die Luzie
-
Hi
was die Sicherheitsfrage anbetrifft, kann ich auch nur auf informative Websites verweisen. Ein verdoppeln der Hochkomma ist eine ganz wichtige Sache
Bin allerdings nicht dem Forum oder dem User verpflichtet, eine sichere Möglichkeit zu programmieren. Hinweise habe ich gegeben, indem ich das Problem erkannt und einen Link geboten habe.liebe Grüße, die Luzie
-
Moinsen,
das mit den Hochkommas war auch kein Vorwurf sondern nur ein Hinweis. Ich weiß auch das man auf vielen Seiten im Internet so einen Hinweis findet. Leider sind diese Hinweise falsch und vermitteln einem ein Sicherheitsgefühl das nicht wirklich gegeben ist. Ich hab lange Zeit selber genau diese Sicherheitslücke auf vielen von mir erstellten Seiten gehabt (wie bei ca. 70-80% aller Webseiten im Internet übrigens auch). Und ich hab mich immer sicher gefühlt. Bis zu dem Zeitpunkt wo wir unsere Seiten mal von einer Sicherheitsfirma prüfen haben lassen. Und glaub mir, mir habe ganz schön die Ohren geschlackert als man mir die ganzen Sicherheitsprobleme aufgezählt hat. Ich hab zwei Stunden mit dem Sicherheitsexperten diskutiert und wir haben über gesprochen wie man eine Seite sicher bekommt. Und leider gehört die Methode mit dem Ausfiltern der Hochkommas nicht dazu. Die Hacker kennen viele Methoden genau diese Methode zu umgehen. Außerdem gibt es leider noch viele andere Zeichen wie ";" oder "--" die niemals in einen SQL-String geraten sollten. Aus diesem Grund sollte man auch niemals einen String nach unerlaubten Zeichen durchsuchen. Man vergisst mit 100%-Sicherheit irgendein Zeichen. Viel besser ist es wenn man nur erlaubte Zeichen durchlässt.
Ich will jetzt keine Hilfestellung schmälern oder kritisieren. Nichts liegt mir ferner. Dazu bin ich viel zu dankbar, dass es dieses Forum mit seinen vielen Helfern gibt. Ich möchte nur meine Erfahrungen und Erkenntnisse weitergeben und darauf hinweisen, was man dafür tun muss.
Ich weiß auch, dass so ein zusammengebauter SQL-String viel bequemer ist, aber bei der Sicherheit sollte man niemals sparen.
Also bitte nicht böse sein. Ich meinte es wirklich nur gut und wollte dich nicht kritisieren.
Schöne Grüße,
Chrisu
-
@Christu
ach Quatsch, ich lese Deine Postings sehr gern, vermittelst den Usern hier absolut viel Hintergrundwissen, was diejenigen sich sonst ergooglen müssen
Ich setze Deine Ausführungen bzgl. des Sicherheitsaspektes überhaupt nicht in Frage.
Man muss halt nur differenzieren, wo hat der User sein Problem.
Wird auf die Sicherheitsfrage nicht reagiert, gehe ich davon aus, dass dies erledigt ist, wie auch immer,so oder so.
Konzentriere mich auf die eigentliche Fragestellung.liebe Grüße, die Luzie
-
hallo,
ich muss die sache nochmal kompliziert machen
ich hab den code von Luzie eingefügt und angepasst, doch es funktioniert nicht. jetzt hatte ein kollege folgende idee: die funktion, die auf dem sql server anspreche, liefert mir ja an sich eine tabelle zurück. dieses ergebnis sollte sich in ein array packen lassen, womit ich die daten weiter verarbeiten kann.
jetzt schießen mir gleich 1000 fragen durch den kopf. wie bekomme ich das ergebnis einer anfrage in ein array? und wie kann ich dann das paging umsetzen?
gruß
tob
-
Hiho,
ich bin mir sicher, dass Du ganz genau weisst, was Du willst, und auch weisst, warum der Scriptteil nicht funktioniert.
Uns bleibt dies leider verborgen.
sorryliebe Grüße, die Luzie
-
hi,
nun gut, würde ich wissen, wo der fehler ist, dann würde ich das forum nicht mit dem problem "zumüllen"
hab jetzt schon viel probiert und es geht immer noch nicht - also lass ich´s sein....
trotzdem danke für die hilfe
Ähnliche Themen
-
Datagrid Paging
Von jma im Forum .NET Windows FormsAntworten: 3Letzter Beitrag: 28.03.06, 14:04 -
Display Tag Library - Paging problem
Von Tentoxa im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 28.11.05, 10:16 -
Array Paging
Von NgiseD im Forum ASPAntworten: 0Letzter Beitrag: 22.10.05, 01:18 -
Paging Problem ?! ASP.NET
Von KroaX_Net im Forum .NET Web und KommunikationAntworten: 2Letzter Beitrag: 21.09.05, 14:59 -
Paging mit MS-SQL
Von nafets im Forum ASPAntworten: 4Letzter Beitrag: 24.12.04, 00:41





Zitieren
Login





