tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
15
ZUGRIFFE
903
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mi_tob mi_tob ist offline Mitglied
    Registriert seit
    Sep 2005
    Beiträge
    11
    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
     

  2. #2
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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

  3. #3
    mi_tob mi_tob ist offline Mitglied
    Registriert seit
    Sep 2005
    Beiträge
    11
    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">&nbsp;
     
                            </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
     

  4. #4
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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.com
    Geändert von Luzie (30.09.05 um 15:16 Uhr)
     
    liebe Grüße, die Luzie

  5. #5
    mi_tob mi_tob ist offline Mitglied
    Registriert seit
    Sep 2005
    Beiträge
    11
    hi,

    kannst mir sagen, wie ich die suche "einfangen" soll?vielleicht mit einem code bsp.?

    gruß

    tob
     

  6. #6
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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="&amp;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 & "&amp;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

  7. #7
    Avatar von Chrisu
    Chrisu Chrisu ist offline Mitglied Gold
    Registriert seit
    Mar 2003
    Ort
    Kiel
    Beiträge
    163
    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
     

  8. #8
    Avatar von Chrisu
    Chrisu Chrisu ist offline Mitglied Gold
    Registriert seit
    Mar 2003
    Ort
    Kiel
    Beiträge
    163
    Moinsen,

    anstelle von
    Code :
    1
    
    eingabe = Request.Form("eingabe") & Request.QueryString("eingabe")
    könnte man auch
    Code :
    1
    
    eingabe = Request("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.

    So long,
    Chrisu
     

  9. #9
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Zitat Zitat von Chrisu
    Moinsen,

    anstelle von
    Code :
    1
    
    eingabe = Request.Form("eingabe") & Request.QueryString("eingabe")
    könnte man auch
    Code :
    1
    
    eingabe = Request("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.

    So long,
    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

  10. #10
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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

  11. #11
    Avatar von Chrisu
    Chrisu Chrisu ist offline Mitglied Gold
    Registriert seit
    Mar 2003
    Ort
    Kiel
    Beiträge
    163
    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
     

  12. #12
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    @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

  13. #13
    mi_tob mi_tob ist offline Mitglied
    Registriert seit
    Sep 2005
    Beiträge
    11
    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
     

  14. #14
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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.
    sorry
     
    liebe Grüße, die Luzie

  15. #15
    mi_tob mi_tob ist offline Mitglied
    Registriert seit
    Sep 2005
    Beiträge
    11
    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

  1. Datagrid Paging
    Von jma im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 28.03.06, 14:04
  2. Display Tag Library - Paging problem
    Von Tentoxa im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 28.11.05, 10:16
  3. Array Paging
    Von NgiseD im Forum ASP
    Antworten: 0
    Letzter Beitrag: 22.10.05, 01:18
  4. Paging Problem ?! ASP.NET
    Von KroaX_Net im Forum .NET Web und Kommunikation
    Antworten: 2
    Letzter Beitrag: 21.09.05, 14:59
  5. Paging mit MS-SQL
    Von nafets im Forum ASP
    Antworten: 4
    Letzter Beitrag: 24.12.04, 00:41