allgemeines zum thema java security

Status
Nicht offen für weitere Antworten.

ARadauer

Top Contributor
ich beschäftige mich gerade mit acegi.
ich habe eine swing anwendung, über spring remoting wird dann auf eine zentrale server schicht zugegriffen welche wiederum daten aus der db ausließt.

wie kann ich es verhindern, dass ein benutzer die anwendung decompiliert, die security mechanismen ausbaut/verändert wieder compiliert und ohne richtige zugangsdaten auf die daten zugreift.

Er könnte zb einfach eine zeile einfügen, in der er eine gültige Authentication dem SecurityContext von acegi setzt und schon ist er drinn...
 
Die Authentifizierung/Authorisierung sollte der Server machen, dann kann der User so oft den Client dekompilieren wie er will.
 
vielleicht hab ich mich da verschaut, aber mir kam sofor, dass wenn ich spring security verwende, der client auf einen globalen
SecurityContext zugreifen kann.
http://www.acegisecurity.org/acegi-...cegisecurity/context/SecurityContextImpl.html

Mir ist gestern so vorgekommen, als könnte er selber die Authentication setzen, die er vorher manipuliert haben könnte... mhn kann sein, das ich mich abger auch getäuscht habe... ich poste dann am abend mal ein beispiel..
 
Der Server erwartet Authentifizierung. Da kann der Client das nur bedienen... oder nicht.
Usernamen und Passwörter gehören nicht in den Code... sicher ist das Ding.
 
Mach dich erst mal mit JAAS bekannt. Wenn du die Theorie einigermaßen drin hast, löst sich dein gedanklicher Knoten.
 
ok passt schon, meine bedenken haben sich erübrigt...
mein Client sieht ungfähr so aus

Code:
	    ApplicationContext appContext =
	      new ClassPathXmlApplicationContext( "remotetest/client/rmi-client.xml" );
	    IOrderService dienst =
	      (IOrderService) appContext.getBean( "idMeinRemoteDienst" );
	    
	    AuthenticationProvider provider = (AuthenticationProvider) appContext.getBean("myauthenticationProvider");
	    try {		
	        Authentication auth = provider.authenticate(new UsernamePasswordAuthenticationToken("asdf", "test"));
	        SecurityContextHolder.getContext().setAuthentication(auth);
	    } catch (AuthenticationException e) {
			System.out.println("Fehler: "+e.getMessage());
		}
	    dienst.testSay("test");

und am server habe ich einen profisorischen AuthenticaionProvider

Code:
public class AuthMan implements AuthenticationProvider {

	@Override
	public Authentication authenticate(Authentication a)
			throws AuthenticationException {
		System.out.println(a.getName());
		if(a.getName().equals("andreas")){
			return new UsernamePasswordAuthenticationToken(a.getPrincipal(),a.getCredentials(),new GrantedAuthority[] { new GrantedAuthorityImpl("ROLE_MANAGER") });
		}
		throw new AuthenticationCredentialsNotFoundException("Falscher Name");
	}

	@Override
	public boolean supports(Class arg0) {
		return true;
	}
ich dachte mir wenn ich am client, sowas einhacke..

Code:
 Authentication fakeAuthentikation = new UsernamePasswordAuthenticationToken("asdf", "test",new GrantedAuthority[] { new GrantedAuthorityImpl("ROLE_MANAGER") });
	    SecurityContextHolder.getContext().setAuthentication(fakeAuthentikation);
würde ich durchkommen... ist aber nicht der Fall, wird brav vom MethodSecurityInterceptor abgefangen und der AuthenticaionProvider schmeißt brav die exception
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben