[php] en beetje [java] Post naar andere URL met Java Applet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 14-10 13:39

WHiZZi

Museumdirecteurtje

Topicstarter
Hoi,

Ik hoop dat er hier mensen zijn die mij kunnen helpen. De situatie is als volgt:
Systeem "I" en Systeem "E". Op "I" (Intern) draait een database met hierin VNC wachtwoorden (en VNC poorten). Nou draait hier ook een interne website om deze VNC dozen te maken/beheren.

So far, so good. Het is alleen zo dat deze "vnc console" op een remote host draait, remote host E dus (extern). Deze website wordt ook gebruikt door klanten die uiteraard hun eigen VNCPoort+Password hebben (simpele website met daarop een form die POST naar lokaal. Hier draait dus ook een Java Applet zodat men via een website in kan loggen op hun VNC-doos. Dit gedeelte werkt.

Intern (op systeem I) staan alle wachtwoorden en gezien wij deze niet allemaal willen onthouden ( :P ) hebben ik op ons interne systeem een knopje gemaakt die nu een browser window opent en dus feitelijk een POST uitvoert naar het E-systeem. Klinkt makkelijker dan het is, wat voornamelijk te maken heeft met Java.

Doe ik via php-curl een post bouwen en vervolgens de website openen, begint de Java Applet te zeuren dat de domeinnaam (vnc.bedrijf.nl) niet matcht met lokaal. In de nieuwste Java JRE is dit een bescherming.

Doe ik een POST niet via curl, maar via http_build_query , dan werkt het ook niet.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        $data = array('vncport'=>$port,'vncpassword'=>$pass);
        $url = "http://vnc.bedrijf.nl/";               
        $post = http_build_query($data);
        $context = stream_context_create(array("http"=>array(
             "method" => "POST",
             "header" => "Content-Type: application/x-www-form-urlencoded\r\n" .
                         "Content-Length: ". strlen($post) . "\r\n" .
                         "Status: 200 \r\n" .
                         "Referer: http://vnc.bedrijf.nl \r\n".
                         "Location: http://vnc.bedrijf.nl \r\n", 
             "content" => $post,
        ))); 

        $page = file_get_contents($url, false, $context);
        header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
        header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
        echo $page;


De broncode van vnc.bedrijf.nl
PHP:
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
<?
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Toegang VPS-platform</title>
</head>
';

// Display form if there's no data to process.
if (empty($_POST)) {
    // Announce we're going to send UTF-8 HTML.
    Header("Content-Type: text/html; charset=utf-8");

    // Output HTML form.
    echo '<body>
        <form action="index.php" method="post">
                VNC-poort: <input type="text" name="vncport" /><br />
                VNC-wachtwoord: <input type="text" name="vncpassword" /><br />
                <input type="submit" name="submit" value="Maak verbinding!" />
        </form>
</body>
</html>';
        exit(1);
}

// Check for an entered VNC port.
if (empty($_POST["vncport"])) {
        echo "Geef een geldige VNC-poort op..";
        exit(1);
}

// Check for an entered VNC password.
if (empty($_POST["vncpassword"])) {
        echo "Geeft een geldig VNC-wachtwoord op.";
        exit(1);
}

// Store variables.
$vncport = $_POST["vncport"];
$vncpassword = $_POST["vncpassword"];

echo '<applet code="com.tigervnc.vncviewer.VncViewer" archive="VncViewer.jar" width="1024px" height="768px">
    <param name="HOST" value="vnc.bedrijf.nl">
    <param name="PORT" value="' . $vncport . '">
    <param name="PASSWORD" value="' .$vncpassword . '">
</body>
</html>';
?>


De headers zijn al reeds getest, maar bieden geen oplossing. De POST werkt wel, alleen wordt de Java Applet gestart vanuit je lokale PC (met een lokale referer??) waardoor deze niet mag/kan verbinden met vnc.bedrijf.nl ..

Ik heb ook al gekeken of dit via een GET op te lossen is en dan werkt het (omdat ik dan rechtstreeks een javascript open window kan doen met GET variabelen). Het grootste en enige bezwaar is dat username/password dan opduiken in de Apache logs en dat willen we niet...

Hier nog een stukje curl-code die ik heb gebruikt (en dus hetzelfde resultaat als bovenstaande code)
PHP:
1
2
3
4
5
6
7
8
9
10
        $fields = "vncport=".$port."&vncpassword=".$pass;
        $url = "http://vnc.bedrijf.nl";
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        $response = curl_exec($ch);
        echo $response;
        curl_close ($ch);


Iemand een idee hoe ik dit kan oplossen voordat ik voor elke entry een SUBMIT button moet maken die een POST uitvoert naar de betreffende URL ...

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 22:20
Lijkt me dat je alleen dit stuk moet kopieren en aanpassen voor de interne pagina
code:
1
2
3
4
5
<form action="index.php" method="post"> 
                VNC-poort: <input type="text" name="vncport" /><br /> 
                VNC-wachtwoord: <input type="text" name="vncpassword" /><br /> 
                <input type="submit" name="submit" value="Maak verbinding!" /> 
        </form>


naar iets als:

code:
1
2
3
4
5
<form action="http://vnc.bedrijf.nl/index.php" method="post"> 
                VNC-poort: <input type="text" name="vncport" /><br /> 
                VNC-wachtwoord: <input type="text" name="vncpassword" /><br /> 
                <input type="submit" name="submit" value="Maak verbinding!" /> 
        </form>

Een dropdown lijstje met klanten en stukje javascript dat die velden invult en submit en je bent volgens mij klaar.

let the past be the past.


Acties:
  • 0 Henk 'm!

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
moet je <param name="HOST" value="vnc.bedrijf.nl"> niet gewoon vullen met $_SERVER['HTTP_HOST']


http://www.php.net/manual/en/reserved.variables.server.php

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 14-10 13:39

WHiZZi

Museumdirecteurtje

Topicstarter
Spee en Tiemez:

Misschien was ik onduidelijk. Waar dit form op staat, is de E-server (vnc.bedrijf.nl). Ik wil dus vanuit de I-server naar de E-server posten waar dan deze Java Applet wordt geladen (vanaf de E-server).

Ik heb de Java-Applet ook al op de I-server gehad, maar dan krijg ik, net als nu overigens, de foutmelding van de Java Applet terug:
Error: access denied (java.net.SocketPermission vnc.bedrijf.nl resolve)
Als ik dus direct op de E-server (http://vnc.bedrijf.nl) het form invul en post, werkt het wel (en gaat de vncviewer laden)

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • BeRtjh
  • Registratie: Juli 2009
  • Laatst online: 16-07-2023
echo '<applet code="com.tigervnc.vncviewer.VncViewer" archive="VncViewer.jar" width="1024px" height="768px">
Probeer het archive-pad eens absoluut te maken? Waarschijnlijk probeert ie 'm nu op server I in te laden, en kan ie 'm niet vinden?

Dus: http://vnc.bedrijf.nl/VncViewer.jar (als ik 't goed heb :) )

  • momania
  • Registratie: Mei 2000
  • Laatst online: 21:44

momania

iPhone 30! Bam!

Die applet moet signed worden en dan kan je als gebruiker toestemming geven voor de remote verbinding. Of je moet je policy file aanpassen van de jvm waarin de applet draait. http://java.sun.com/devel...ramming/JDCBook/appA.html

Neem je whisky mee, is het te weinig... *zucht*


  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 14-10 13:39

WHiZZi

Museumdirecteurtje

Topicstarter
BeRtjh schreef op donderdag 29 december 2011 @ 09:15:
[...]


Probeer het archive-pad eens absoluut te maken? Waarschijnlijk probeert ie 'm nu op server I in te laden, en kan ie 'm niet vinden?
Dus: http://vnc.bedrijf.nl/VncViewer.jar (als ik 't goed heb :) )
Heb ik zojuist gedaan en werkt niet :|
momania schreef op donderdag 29 december 2011 @ 09:15:
Die applet moet signed worden en dan kan je als gebruiker toestemming geven voor de remote verbinding. Of je moet je policy file aanpassen van de jvm waarin de applet draait. http://java.sun.com/devel...ramming/JDCBook/appA.html
Ik ga hier even in duiken. Geen idee hoe dat werkt met Java (laatste keer dat ik iets deed in Java is een jaar of 10 geleden :X ). Volgens mij heb ik zelfs de source code van deze applet. Wil iemand mij een hint geven wat ik in die source code kan zetten zodat het gaat werken? Ik ga zelf ondertussen wel vast googlen ;)

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • momania
  • Registratie: Mei 2000
  • Laatst online: 21:44

momania

iPhone 30! Bam!

WHiZZi schreef op donderdag 29 december 2011 @ 09:24:
[...]


Ik ga hier even in duiken. Geen idee hoe dat werkt met Java (laatste keer dat ik iets deed in Java is een jaar of 10 geleden :X ). Volgens mij heb ik zelfs de source code van deze applet. Wil iemand mij een hint geven wat ik in die source code kan zetten zodat het gaat werken? Ik ga zelf ondertussen wel vast googlen ;)
Heeft niets met de source te maken, maar met de sandbox waarin de applet draait. Door te signeren met bepaalde voorwaarden (de remote verbinding) laat je het aan de gebruiker om expliciet toestemming te geven buiten die sandbox te komen.
Of je moet dus via een jvm parameter de sandbox aanpassen, alleen gaat je dat niet lukken aangezien het bij iedere gebruiker in z'n eigen jvm draait.

Niets nieuws onder de zon trouwens, dit is al heel lang zo (of je hebt een heeeeeeel oude jvm gehad :X )

Trouwens, je vrouw is toch java programmeur? Die zou dit toch moeten weten ;)

Neem je whisky mee, is het te weinig... *zucht*


  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 14-10 13:39

WHiZZi

Museumdirecteurtje

Topicstarter
momania schreef op donderdag 29 december 2011 @ 09:28:
[...]

Heeft niets met de source te maken, maar met de sandbox waarin de applet draait. Door te signeren met bepaalde voorwaarden (de remote verbinding) laat je het aan de gebruiker om expliciet toestemming te geven buiten die sandbox te komen.
Of je moet dus via een jvm parameter de sandbox aanpassen, alleen gaat je dat niet lukken aangezien het bij iedere gebruiker in z'n eigen jvm draait.

Niets nieuws onder de zon trouwens, dit is al heel lang zo (of je hebt een heeeeeeel oude jvm gehad :X )
Ik heb geen idee wat standaard bij Ubuntu zit/zat of wat hier recentelijk is aangepast. Het heeft tot vorige maand gewerkt op alle Ubuntu machines hier en vermoedelijk na een update niet meer.
Trouwens, je vrouw is toch java programmeur? Die zou dit toch moeten weten ;)
Correct, maar wij doen andere dingen als we bij elkaar zijn :+. Ik zal het haar eens vragen :P

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
momania schreef op donderdag 29 december 2011 @ 09:28:
Trouwens, je vrouw is toch java programmeur? Die zou dit toch moeten weten ;)
Ik gok dat de overgrote meerderheid van Java programmeurs nooit iets met applets doet.

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 22:20
Misschien was ik onduidelijk. Waar dit form op staat, is de E-server (vnc.bedrijf.nl). Ik wil dus vanuit de I-server naar de E-server posten waar dan deze Java Applet wordt geladen (vanaf de E-server).
Ik had het begrepen.
Echter, waarom zou de I-server naar de E-server posten? De client moet het toch doen?
Als de client de aangepaste form van de I-server gebruikt en die post naar de E-server, dan bereik je toch hetzelfde? Een aanroep naar de E-server met de juiste parameters. :?
Vergeet je dus niet een parameter: de client ;)

let the past be the past.


  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 14-10 13:39

WHiZZi

Museumdirecteurtje

Topicstarter
Vanaf de I-server werken wij en daar hebben we een database op staan met alle wachtwoorden. Op de E-server draait o.a. een Java Applet, de VNC-server in deze en een simpele login pagina voor klanten die met hun eigen wachtwoord kunnen inloggen.

Als wij in sommige gevallen ondersteuning willen bieden, wil ik niet elke keer het wachtwoord opzoeken en met een simpele druk op de knop in een mooi Javascript popup ding een post uitvoeren naar extern en dat gaat dus fout.

Wat Remus zegt is ook waar trouwens, mijn vrouw kon mij alleen verwijzen naar een document over de beveiliging van de JVM en hoe je hier eventueel een policy in kon zetten. Kortom, ik heb het systeem anders gemaakt en achter elke klant heb ik een form gebouwd met een submit button die direct post naar de E server en dus ook een window opent op de E-server..

Problem solved wat mij betreft. Toch dank voor het meedenken eenieder :)

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.

Pagina: 1