Avatar billede t_skytte Nybegynder
13. september 2003 - 06:01 Der er 7 kommentarer og
1 løsning

Sikkerhedsproblemer med java applet, der bruger sockets

Jeg har problemer med at anvende sockets i en javaapplet. Såvidt jeg kan se, er det spørgsmål om sikkerhed, der gør, at appletten ikke virker. Den virker nemlig fint som en almindelig applikation. Jeg har vedlagt kildekoden forneden.

Håber der er nogen, der kan hjælpe eller idet mindste give et svar på, hvad der er galt.

**************************************************
import java.net.*;
import java.io.*;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class counter extends Applet{
      public void init() {
        String link = "http://www.yahoo.dk";
          String referent = "http://www.minreferent.dk";

        Socket socket = null;
        BufferedReader input;
        PrintWriter output;
        String host = "";
        String file = "";
        String sizeStr = "0";

        // Filnavn og host findes
        try {
            URL url = new URL(link);
            host = url.getHost();
            file = url.getFile();
        } catch(MalformedURLException e) {System.out.println("Excepton: "+e);}

        // socket-request konstrueres
        String message = "GET "+file+" HTTP/1.1\nAccept: text/plain, text/html\nAccept-Language: en-gb\nAccept-Encoding: deflate\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\nReferer: "+referent+"\nHost: "+host+"\nConnection: Close\n\n";

        // Socket opretter forbindelse til serveren
        try {
            socket = new Socket(host, 80);
        } catch (UnknownHostException e) {System.out.println("Excepton: "+e);}
          catch (IOException e) {System.out.println("Excepton: "+e);}

        try {
            BufferedWriter wr = new BufferedWriter(
            new OutputStreamWriter(socket.getOutputStream()));
            wr.write(message);
            wr.flush();
        } catch (IOException e) {System.out.println("Excepton: "+e);}

        try {
            BufferedReader rd = new BufferedReader(
            new InputStreamReader(socket.getInputStream()));
            String str;
            while ((str = rd.readLine()) != null) {
                if(str.equals("")){
                    rd.close();
                }
            }
            rd.close();
        } catch (IOException e) {System.out.println("Excepton: "+e);}
      }
}
Avatar billede erikjacobsen Ekspert
13. september 2003 - 08:17 #1
Du kan ikke fra en applet forbinde dig til andre servere end præcis dér hvor
appletten kommer fra - nemlig: sikkerhed. Er det derfor?
Avatar billede repsak Nybegynder
13. september 2003 - 10:02 #2
Avatar billede arne_v Ekspert
13. september 2003 - 10:09 #3
Du kan se i Java konsollen præcis hvad fejl du får. Hvis du psoter den,
så kan vi sige med sikkerhed hvad problemet er.

Som Erik skriver så kan en applet i normalt kun connecte til til den
server som den er hentet fra. (og jeg formoder at din applet ikke
ligger på http://www.yahoo.dk/).

Det er muligt at give en applet særlige priviligier. Men de fleste
finder det meget besværligt at arbejde med.

I stedetfor at bruge en Socket kunne du spare en del kode
ved at bruge en URLConnection/HttpURLConnection.

Jeg tror at det vil være nemmere at lade din
applet connecte til et server side script på samme server
som appletten er hentet fra og så lade det server side
script hente det der skal bruges.¨
Avatar billede t_skytte Nybegynder
13. september 2003 - 14:41 #4
Jeg var også meget betænksom, da sikkerheden blev overtråd godt og grundigt, men det var da forsøget værd ;)

Omkring psote, hvordan virker det (evt. et lille eksempel)? Jeg har aldrig hørt om det!
Avatar billede arne_v Ekspert
13. september 2003 - 14:46 #5
tyrk fejl

"poster"

hvis du copy pastede fejlen fra java console så kunen vi sige mere
præcist hav det var
Avatar billede t_skytte Nybegynder
13. september 2003 - 15:04 #6
Java consolen laver bare et rødt kryds, når den køres i en browser. Med appletviewer kommer følgende i prompten:

sun.applet.AppletSecurityException: checkconnect.networkhost1
at sun.applet.AppletSecurity.checkConnect(AppletSecurity.java:576)
at sun.applet.AppletSecurity.checkConnect(AppletSecurity.java:618)
at sun.applet.AppletSecurity.checkConnect(AppletSecurity.java:518)
at java.net.InetAddress.getAllByName0(Compiled Code)
at java.net.InetAddress.getByName(Compiled Code)
at java.net.Socket.<init>(Socket.java:89)
at counter.init(Compiled Code)
at sun.applet.AppletPanel.run(Compiled Code)
at java.lang.Thread.run(Thread.java:466)
Avatar billede arne_v Ekspert
13. september 2003 - 15:27 #7
Java consollen er ikke appletten men vinduer med Java
fejl meddelelser og lignende.

Men fejlen fra applet vieweren bekræftiger hyptesen.

Den brokker sig over at forsøger at slå et node navn op.
Avatar billede t_skytte Nybegynder
13. september 2003 - 16:53 #8
Jeg tror ikke jeg kommer videre i sagen. Tak for hjælpen :)
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