I am getting the java.lang.SecurityException: Permission denied: file:////Videos/public/scripts/screenshot.jar when I try to use an applet.
Here is the applet code:
<applet code="Screenshot" archive="file:////Videos/public/scripts/screenshot.jar" width="100px" height="100px">
</applet>
I've signed the applet using this 3-step guide, but it doesn't seem it worked for me, as I am still getting the error.
http://www.narendranaidu.com/2007/11/3-easy-steps-to-self-sign-applet-jar.html
Your jar URL looks strange. Personally I have never seen that somebody tries to download applet from URL other than HTTP. Actually it means that your applet will work only for users that are into your LAN where they have access to shared computer named "Videos". Are you sure this is what you want?
The second thing is: try to just copy and paste the JAR URL to your web browser and see what will happen. If you are able to download the jar file directly without entering password this should work when URL is placed into the applet tag. Otherwise it will not. So, first check your URL and fix its problem.
Related
I have a Java web app which has a JSP page which has a couple c:import lines in it. The content referenced is on the same web server as the Java app, but is not bundled in the war file. My site has dns entries to allow for access to this app from a browser with a full name https://abc.123.def.com/app or a short name of just https://abc/app for users on our network.
If I access the jsp page via the alias https://abc/app I can get to the jsp page in the browser, but I get a server exception Problem accessing the absolute URL "https://abc//webfiles/included_file.html". java.net.SocketException: Connection reset on the page. But, when I access the jsp page via the fqdn like https://abc.123.def.com/app the include works perfectly, the jsp compiles, and all is well.
If I put the address of the file to be included in my browser it works with either short name or fqdn. So even though the error is saying the JSP can't find the file https://abc//webfiles/included_file.html I can plug that address in my browser and get to it fine. That's true from my separate user machine, or from a browser on the server itself. (Yes I see that double // there, it seems to not be a problem, it loads in the browser and loads fine as an include when using the fqdn).
I have good reason to believe the code is fine, this code worked fine on my old server which had JBoss 5. We've moved it to JBoss 6.4 on a new server and are now encountering this alias/short name include problem. I'm thinking it's some JBoss or IIS configuration issue. Of course we have lots of external links to this application utilizing the short name so simply using the fqdn will not work.
So IIS can serve up both the jsp via a fqdn or short name, it can also serve up the included_file path using the fqdn or short name. But Java for some reason can't see that included_file when using the short name, only the fqdn.
I've confirmed that the DNS suffix search list in the server's ipconfig includes the domain the site is in.
I'm not a JBoss config admin, and have no experience with IIS really, just a developer of the app, but I've been thrust into JBoss config/debugging out of desperation. Any help much appreciated.
I have JAR which is properly signed with a valid certificate from a trusted company. Im running an applet using HTML applet tag. My Manifest file includes following permissions:
Application-Name ="XYZ"
Permissions="all-permissions"
Codebase="*"
Trusted-Library="true"
I get the following warning message when running applet in browser:
I do not want this message to appear when my users open my applet. Can you advise me why this warning message is appearing and how to avoid it from appearing for my users?
Thanks!
how to avoid it from appearing for my users?
There is no way to avoid it. It is the choice of the user as to whether to run trusted code, and the decision of Sun/Oracle that they should be prompted.
Why exactly does the applet require all-permissions?
Im trying to use java applet on my web page. I try/search lots of thing but no chance. So here is the case.
My applet code is simple in app.html :
<applet codebase="." archive="applet.jar" code="de.escape.quincunx.dxf.apViewer" width="640" height="480" name="TEST">
<param name="file" value="40.dxf">
<param name="framed" value="false">
<param name="frameWidth" value="800">
<param name="frameHeight" value="600">
</applet>
This html file is working when i directly open in browser. Its working when i serve it with apache but its not working and give error "Incompatible magic value 21877456 in class file" when i try to serve with IIS. In apache i try php and html, both is working.
Is there any special configuration need on IIS when i try to serve applet?
Thank you for your answers.
I think IIS is not serving the right file for a .class, probably it is returning a 404 error or something similar, since it cannot find the file.
That error means that Java was expecting a .class file, all class files start with 0xCAFEBABE, which is a magic number with which Java can check that the file it is receiving is in fact a class file. In your case, however, the file returned by IIS is not a class file, it does not start with 0xCAFEBABE, and Java is unable to parse it.
The most common reason for it is that the web server is not able to serve the file, often because of a 404 error.
You should check what happens under the hood, search in IIS logs for requests of .class files, or use a tool (maybe even firebug) to see what is returned to the browser.
Finally i found a solution. Actually its not the exact solution but thank you for your answer Simone Gianni. His answer lead me to deeply search in IIS access logs and compare them with APACHE access logs. And yes, both was same and looks like couple of classes are not in place in the JAR file. So apVPORT.class is not in the jar file and developer who wrote this applet leave the calls for those classes in the other part of applet even he is not using them.
If someone can answer the reason why apache don't send any information or "its okey" information to java and continue loading rest of the applet even it see the 404 for apVPORT.class but IIS send 404 to java, this will be the final answer for this question.
Incompatible magic value 21877456 in class file : I found that this error comes when page is not able to reach /read the jar file.
in aspx page -
<applet code="FileAccess.class"
archive="../applet/SignFileAccessApplet.jar" width="325" height="325">
</applet>
in archive check whether url is proper or not by using "pickurl" option provided by intellisense of Visual Studio.
class file path in jar file need to be given in code attribute.
This may be old error but I am stuck here.
I created Java applet to access an Oracle database. I am going to put this applet in Local Network. My applet works fine in Eclipse and Netbeans but when I run through 'appletviewer' it goes at connection string and showing an error:
Error e java.security.AccessControlException: access denied (
"java.util.PropertyPermission" "oracle.net.wallet_location" "read")
I already signed applet using this Oracle technique for Signed Applets.
I used the user of database who has full rights. Also when I run using policy file, it shows the same error.
How do I connect the applet to the database successfully?
The HTML used to load the applet is:
<applet
code=tree.pacg.DrawApplet.class
codebase=c:\tree\pacg
archive=DrawApplet.jar,ojdbc14.jar
height="800"
width="1000">
</applet>
Its solved !!
I signed the ojdbc14.jar file and it works !!
also I create new policy file and gave it 'All' access permission then it also work through 'appletviewer'
Thanks..Thank you sir..
when i run the applet in ie, it show security warning Java has discovered application components that could indicate a secuirty concern.
Something like this?
BTW - if you click No at this point, the code should not be blocked and should therefore run.
But even seeing that dialog is a nuisance. If it can be confusing to developers, it is bound to be confusing to an end user.
See Mixing Signed and Unsigned Code
Ensuring Application and Applet Security for an explanation of this behavior. But see particularly Deploying Signed Applications and Applets Securely Without a Mixed Code Warning for how to allow mixing of unsigned & signed code.
The other alternative - to sign all Jars using the same certificate - also works, but is sometimes forbidden by deployment licenses or other factors.
On signing the code.
Me.
3) ojdbc14.jar needs to be digitally signed when deploying this way. Is ojdbc14.jar digitally signed?
OP.
3) ojdbc14.jar is a oracle database drivers so that they are already signed
..followed 4 hours later by..
I signed the ojdbc14.jar file and it works !!
I have a Java Applet inserted on a simple HTML page located at http://localhost:8080/index.html:
<applet id="applet" code="SomeCode.class" archive="lib.jar" Width="1" Height="1"></applet>
The Java Applet has a method that looks similar to the code below:
public void PostStuffToServer() {
String server = "http://localhost:8080/PostHandler.ashx";
URL u = new URL(server);
URLConnection con = u.openConnection();
con.setDoOutput(true);
con.getOutputStream().write(stream.toByteArray());
con.connect();
}
When I execute the applet code from JavaScript like so:
obj = document.getElementById('applet');
obj.getClipboardImageURL();
I get the following error:
access denied (java.net.SocketPermission 127.0.0.1:8080 connect,resolve)
It seems like the Java code resolves the domain localhost to its equivalent IP address and therefore raises a cross domain security restrain. It works fine when I execute the same code from http://127.0.0.1:8080/index.html. The lib.jar file is signed.
Is there anyway to avoid this?
I encountered the same problem after installing Java 6 Update 22. My applet has been online for several years with no reported errors. When I downgrade to version 6 Update 21, everything works perfect. My applet is not signed.
SOLUTION:
It took me ha while to find the cause of the problem. Actually in my case there were several factors causing the security error. The problem was solved by the crossdomain.xml file. The Java applet tried to download the crossdomain file, failed, and did not even bother to display an error in the java console (debug level 5). Java tried to download the file from the ip adress of my domain (http://ip-address/crossdomain.xml), and not the root of my website (http://domain-name/crossdomain.xml). I guess it is better for the security aspect? I then had to configure the webserver to expose the crossdomainfile on the IP address. In my case I have removed the default website in ISS for security reasons, and had to create a new website. I then discovered that the java applet did not work with the crossdomain files i use with flash:
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-http-request-headers-from domain="*" headers="*"/>
<allow-access-from domain="*" />
</cross-domain-policy>
I had to remove the site-control and allow-http-request-headers-from nodes from the xml file in order to make the applet work.
I think I'm too late, but anyways... Guys you cannot believe how easy a solution this problem has.
The problem is that Java applet code called from JavaScript has only permissions that are the intersection of the JavaScript's code and your applet code - and somehow the JavaScript's permissions are seen as less, which results in this Exception.
Here is what I did: assume you have a function innocentFunc() that throws the java.net.SocketPermission exception, so your code is something like so:
String s = innocentFunc();
Now what you can do is to change it to something like so:
String s = AccessController.doPrivileged(
new PrivilegedAction<String>() {
public String run() {
return innocentFunc();
}
}
);
This AccessController call basically states to the Java Virtual Machine that the code it runs should not obey to the permissions from the call chain, but rather only the caller's permissions in its own.
Of course, you should do something like this only after making sure that this innocentFunc call can't do anything bad, even if invoked by malicious code.
Just to add, there's some stuff here which exactly matches the issue I've been getting - it specifically mentions controlling an applet with JavaScript.
http://www.oracle.com/technetwork/java/javase/6u22releasenotes-176121.html
The fix for CVE-2010-3560 could cause
certain Java applets running in the
new Java Plug-in to stop working if
they are embedded in web pages which
contain JavaScript that calls into
Java in order to perform actions which
require network security permissions.
These applets may fail with a network
security exception under some
circumstances if the name service
which resolved the original web page
URL host name does not return a
matching name as the result of a
reverse address lookup.
Their suggestion is to add a special crazy just-for-Java A record to the DNS, like:
10.11.12.13 foo.bar.com.auth.13.12.11.10.in-addr.arpa
I'm getting the same thing with Update 22, and not Update 21.
I'm using the TinyPlayer applet, which I'm controlling via JavaScript.
I'm loading audio files from the same domain (mydomain.example.com, IP 1.2.3.4) as the page the applet is loading on - everything is referenced using relative URLs.
When I try to play the audio, it fails to play and I get:
access denied (java.net.SocketPermission 1.2.3.4:80 connect,resolve)
Looking at the access logs, I get a request for crossdomain.xml right before this happens. But the catch is that Java isn't asking for a crossdomain.xml from
mydomain.example.com/crossdomain.xml
...but instead from
1.2.3.4/crossdomain.xml
The workaround that seems to work for me is to set up a virtual host that responds for the IP address 1.2.3.4, and give it a crossdomain.xml, so that Java can find the crossdomain.xml in the (wrong) place that it's looking for it.
I just tested with the contents:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
...but it's probably possible to make this more restrictive.
With that in there, the audio plays correctly.
IIRC, the JavaScript same-origin policy prevents access to same-host/different-port. The PlugIn's LiveConnect enforces this policy for localhost only.
See: http://download.oracle.com/javase/tutorial/deployment/applet/security.html
Unsigned applets can perform the following operations:
They can make network connections to the host they came from.
If Java does not resolve the originating system to localhost then the applet will not be able to open sockets.
I had the similar issue and it only occurs when I use the "localhost" as a part of the URL for the page with the applet. When I used the URL with the actual host name or IP address as a part of the URL, the problem didn't happen. I am not sure this is a defect for the Java plug-in...
For example when I used the URL like http://localhost:9080/app_id/appletPage the problem occurred but when I use the URL by using the actual IP or host name, the problem did not occur.
I don't think is possible to made the crossdomain.xml file more restrictive, at current time Java applets only support the (domain="*")
see here http://www.oracle.com/technetwork/java/javase/index-135519.html#CROSSDOMAINXML
You should check your virtual directory permissions.
Update from #Kristian above saved my day.
I had access denied (java.net.SocketPermission <server_ip>:<server port> connect,resolve) from an applet in a web application.
There had been change in our DNS, such that the IP of the load-balancer of the application server was not resolving to a name with domain. Therefore the suspected "cross-domain connection" from applet back to server was blocked.
I added crossdomain.xml with
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
to <tomcat-home>/webapps and checked that it is accessible with http://<server name>:<server port>/crossdomain.xml