Avatar billede el_fredo Praktikant
07. november 2002 - 11:28 Der er 27 kommentarer og
1 løsning

Dybe links - forebyggelse

Hej igen. Jeg har før stillet dette spørgsmål, men jeg fik det ikke til at fungere. Problemet er, at på min webside skal man logge ind for at få adgang til de enkelte sider (incl. download siden), ellers sendes man til logon siden. Det er fint nok, men hvis man i browserens sti indtaster den nøjagtige sti til driversiden (fx "https://<IP>/Drivere/DriverX.zip" så kan man downloade den uden at være logget ind. Det jeg fik at vide var, at jeg skulle lægge alle disse filer uden for mit scope (jeg bruger resin webserver), så man ikke har adgang til filerne direkte fra stien, men når man downloader en fil vha. et link, så står der i linket, at man skal henvises til en anden side, som så foretager logon check før man får filen udleveret. Jeg fik det bare aldrig til at fungere. Er der nogen (Disky... ) der har et funktionelt eksempel herpå, så jeg kan forebygge dybe links...? Jeg skal aflevere hovedopgave på onsdag, så jeg har travlt!
Avatar billede el_fredo Praktikant
07. november 2002 - 11:30 #1
Hvis jeg i HTML linien der henviser til filen (A HREF...) skriver C:\xxx\file.zip i stedet, så virker det fint på serveren, men når man prøver fra en anden computer fungerer det ikke, da klienten så henviser til sit eget C: drev.
Avatar billede disky Nybegynder
07. november 2002 - 12:28 #2
lav en database hvor et ID numemr svarer til en path på serveren udenfor resin scope.

Så kalder du din download.jsp?id=418

Så slår download.jsp op i basen finden en sti til filen, loader den og returnerer den som binært output til clienten.
Avatar billede el_fredo Praktikant
07. november 2002 - 12:30 #3
Jeg prøver lige...
Avatar billede disky Nybegynder
07. november 2002 - 12:45 #4
Ellers kontakt mig lige på icq #1413069 så vil jeg se om jeg for tid til at lave et meget simpelt eksempel i aften.
Avatar billede el_fredo Praktikant
07. november 2002 - 14:02 #5
Jeg har lavet en ekstra tabel i databasen, ved navn "download" og den indeholder felterne "downloadID" (fortløbende numre) og "path" som er en tekststreng. Jeg har oprettet en sti til config.sys og path siger nu "C:\Config.sys" i databasen. Hvis jeg indtaster:

<a href="download.jsp?id=2">Version 1.20</a>

i mit jsp dokument, så kommer download.jsp siden frem, hvor der i stien på browseren står:

https://172.19.105.21:8443/download.jsp?id=2

Men det er jo også fint nok, for hvordan skulle download.jsp vide hvad den skal gøre? Hvordan fanger jeg det nummer jeg sender med (i dette tilfælde 2) på download.jsp? Jeg kan godt hente fra databasen, hvis jeg kender nummeret. Desuden ved jeg ikke hvordan man sender en fil til en bruger, hvis ikke det er vha. A HREF. Kan man bruge en response.XXX kommando i jsp? Håber du kan hjælpe disky...
Avatar billede disky Nybegynder
07. november 2002 - 14:23 #6
du skrive:

String id=request.getParameter("id");

Den returnerer der som id er lig med i query'en

Hvis der ikke står noget, er det IKKE en tom streng med 'null' du får retur.

Den med hvordan man sender en fil, kan jeg først hjælpe med når jeg har adgang til min maskine derhjemme.
Avatar billede el_fredo Praktikant
07. november 2002 - 14:26 #7
Kanon! Har du mulighed for at sende funktionaliteten til at sende en fil på min mail (mailto:dm00711@edb.tietgen.dk)? Jeg er ikke hjemme om aftenen, så jeg har kun adgang til internettet mellem 9 og 16. Jeg glæder mig til at få svar, da det vil betyde, at vores side er 100% sikker!!! Yeah!
Avatar billede el_fredo Praktikant
07. november 2002 - 14:51 #8
Jeg har prøvet mig lidt frem. Jeg har skrevet:

response.sendRedirect(path);

i min download.jsp fil, hvor path henviser til den sti jeg har hevet ud af databasen (c:\config.zip) men det er samme problem som før med, at man henter lokalt på klientens pc.
Avatar billede disky Nybegynder
07. november 2002 - 14:54 #9
lige netop, det som skal laves er at filen loades af jsp siden og pakkes ind i en binær response til clienten.
Avatar billede el_fredo Praktikant
07. november 2002 - 14:56 #10
Ok. Jeg glæder mig til at høre fra dig senere... det bliver kanon at få det til at virke... Jeg går ud fra, at det er en simpel kommando man skal skrive, for at sende en fil til brugeren... Håber jeg!
Avatar billede el_fredo Praktikant
07. november 2002 - 15:14 #11
Du kan da ligeså godt smide svaret ind her, som du kan smide det i min mail, kan du ikke? Så kan andre evt. også drage nytte af det.
Avatar billede disky Nybegynder
07. november 2002 - 15:15 #12
helt så simpelt er det ikke, men jeg skal nok poste svaret her :)

Og jeg smider nok også et eksempel på min egen server :)
Avatar billede el_fredo Praktikant
07. november 2002 - 16:20 #13
Kanon. Jeg smutter hjem nu, men jeg glæder mig til at høre fra dig. Hej hej.
Avatar billede disky Nybegynder
08. november 2002 - 09:32 #14
Kig på denne her, den er dog ikke specifikt lavet til dit problem, men viser hvordan jeg fra en servlet spytter et gif billede ud.


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class typo extends HttpServlet

{
    /**
    * Service
    * Handles GET request-response
    * @param    HttpServletRequest, HttpServletResponse
    */
    public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
    {
        res.setContentType("image/gif");
        ServletOutputStream out=res.getOutputStream();

//På denne out stream skal du så sende den binære data, husk at ret mime type for oven
        out.close():
    }

}
Avatar billede el_fredo Praktikant
08. november 2002 - 09:55 #15
Jeg prøver...
Avatar billede el_fredo Praktikant
08. november 2002 - 09:59 #16
Jeg får denne fejl:

Download.java:2: package javax.servlet does not exist
import javax.servlet.*;
Download.java:3: package javax.servlet.http does not exist
import javax.servlet.http.*;

Hvordan får jeg importeret disse packages?
Avatar billede el_fredo Praktikant
08. november 2002 - 10:01 #17
Jeg har fundet ud af, at de åbenbart ikke er del af SDK 1.4.1, så jeg henter dem lige på sun's hjemmeside...
Avatar billede el_fredo Praktikant
08. november 2002 - 10:14 #18
Jeg forstår ikke helt hvad jeg skal gøre. Jeg har installeret javax klasserne, så nu compiler klassen fint. doGet skal have to httpXXX parametre med, men hvad er det for nogen? Hvor stammer de fra? res.setContentType... er det den der sender filen? Og er image navnet på filen, og /gif dens extension? Og hvad er en mime type? Mange spørgsmål, jeg ved det godt, men jeg er lidt på bar bund. Håber du kan hjælpe.
Avatar billede disky Nybegynder
08. november 2002 - 10:31 #19
Du skrive

res.getParameter("ID");

ContentType skal sættes til den mime type som en application har hvis det er en application, eller image/gif hvis det er et gif billede osv.

Der hvor min kommentar står inde i doGet() metoden, skal du sende de binære data fra den loadede fil, ud på out streamen.

Undskyld jeg ikke fik lavet et rigtigt eksempel, men jeg havde for travlt igår.

Jeg mente dette var bedre end ingen ting.
Avatar billede el_fredo Praktikant
08. november 2002 - 10:58 #20
Hvis det fx er en fil i et library på c: - fx c:\files\ og en fil der hedder fil.zip. Hvad er så mime typen? Er det "fil/zip" der skal stå i content type? Har du mulighed for at lave et simpelt eksempel i løbet af fredag/lørdag måske. Ikke at du skal lave det hele, men jeg mangler bare lige at få hul på bylden. Jeg kan heller ikke se hvor jeg skal oprette objektet af typen "typo" som din klasse hedder (jeg har ændret den til "Download"). Hvad skal der skrives i .jsp filen for at kalde funktionaliteten, og hvad skal der står i klassefilen hvis vi forudsætter, at mine filer har extension .zip, og alle ligger i c:\files\ ? Tak for hjælpen indtil videre disky. Den har været uvuderlig!
Avatar billede el_fredo Praktikant
08. november 2002 - 11:11 #21
uvuRderlig, that is! :)
Avatar billede disky Nybegynder
10. november 2002 - 14:31 #22
Denne her viser hvordan man kan gøre det, det skal dog siges jeg ikke har fundet ud af endnu hvordan man specificerer det filenavn folk skal gemme under.
Det er noget med en header men jeg har ikke fundet den korrekte endnu, ps. denne er hardcodet til en specifik fil.

Prøv med www.disky.dk/servlet/Download?id=17

filen er et zip arkiv, med et sjovt billede i:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class typo extends HttpServlet
{
    public static final String     PATH="c:\\apache\\htdocs\\web-inf\\classes\\";
    private fontgrabber fg = null;
    private fontinfo fi = null;

    /**
    * Service
    * Handles GET request-response
    * @param    HttpServletRequest, HttpServletResponse
    */
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
        res.setContentType("application/zip");
        ServletOutputStream out=res.getOutputStream();
       
        String strId=req.getParameter("id");
        int id=0;
        if(strId!=null && strId.length()!=0)
        {
            id=Integer.parseInt(strId);
        }
        //lav har database opslag på baggrund af id jeg har hardcodet det.
       
        String filePath="/home/download.zip";
       
        byte buf[]=new byte[65536];
        int len=0;
        FileInputStream in=new FileInputStream(filePath);
        while( (len=in.read(buf))!=-1)
        {
            out.write(buf,0,len);
        }
       
        in.close();
        out.close();
    }

}
Avatar billede el_fredo Praktikant
10. november 2002 - 14:43 #23
Uha uha uha... Det må jeg lige kigge på. Tak for det Disky. Og god weekend.
Avatar billede disky Nybegynder
10. november 2002 - 15:33 #24
tak i lige måde, og undskyld forsinkelsen
Avatar billede el_fredo Praktikant
10. november 2002 - 17:22 #25
Det gør ikke noget. Vi venter med implementeringen af det der, til efter vi har afleveret. Så kan vi altid finde ud af det, inden vi skal til projekteksamen. Tak for hjælpen so far.
Avatar billede disky Nybegynder
10. november 2002 - 17:46 #26
Jeg har grublet lidt over det, jeg er egentligt ikke 100% sikker på man egentligt kan gøre det vi prøvet på, altså bestemme filnavnet fra serverens side.

Hvis man ikke kan må man gøre noget med at mappe servletten osv, jeg grubler lige over det.
Avatar billede el_fredo Praktikant
10. november 2002 - 20:17 #27
Hehe, ok. Vi har lavet en teoretisk løsning, og begrundet denne i rapporten, så jeg regner med, at vi kan smyge os udenom. Underligt hvordan noget kan virke så simpelt i teorien, når det er så svært at implementere, mens andet virker meget kompliceret, men kan udvikles ved at importere en lille håndfuld javaklasser... hmmm. Der røg endnu en dag med projektarbejde.
Avatar billede disky Nybegynder
10. november 2002 - 20:24 #28
hehe ja sådanne er det bare :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester