JPA/ Webservice: Passwort Feld einer Klasse fürs Lesen "verschleiern"

G

Gast2

Gast
Hallo jGemeinde. :)

Ich bastel momentan einen Webservice. Die darunterliegende Datenbank enthält u.a. - wie oft üblich - auch eine User-Tabelle mit benutzerspezifischen Daten, also Username, Email, etc. und halt auch ein Passwort. Es soll möglich sein, User über den Webservice zu lesen als auch zu manipulieren, somit sähe die Klasse erstmal grob derart aus:

Java:
public class User{
private String name;
private String email;
private String password;

public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getEmail(){
return email;
}
public void setEmail(String name){
this.email = email;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
}

Soweit so gut oder eben genau der Knackpunkt:
Dass das Passwort gesetzt werden können soll, ist ja ok, zb im Falle eines Anlegens eines neuen Users. Nur tu ich mich schwer mit der Tatsache, dass beim Abrufen von n Users halt alle Daten inklusive der Passwörter - die zwar verschlüsselt sind - aber dennoch verfügbar sein würden.

Mich würde interessieren, was so die best practices wären, derartige Felder "lese zu schützen". Irgendwelche Tips?

Das darunterliegende Framework zur Datenbankinteraktion ist EclipseLink, falls das von Belange sein sollte.

Danke vorab für Ideen und Anregungen.
 
S

SlaterB

Gast
welche bösen Stellen willst du denn ausschließen, den WebService an sich oder dessen Clients?
an den Client kann man ja nun wirklich nur Teil der Daten senden, Passwort manuell auf null setzen,
aufpassen dass bei Update zurückgeliefert nicht in der DB das Passwort gelöscht wird

innerhalb des Servers ist die Lösch-Gefahr noch höher, jedenfalls wenn ich an mein Hibernate denke mit von der Session automatisch nach Änderungen kontrollierte DB-Objekten,
da wäre es denkbar, in dafür geeigneten Bereichen nicht den User mit Passwort an sich zu benutzen, sondern andere Objekte, z.B. SimpleUser,

um die zu bekommen, wieder aus Hibernate-Sicht:
1. in Queries nur bestimmte Felder abfragen, Objekte halb-manuell zusammenbauen
"SELECT new SimpleUser(u.name, u.email) from User u",
solche Objekte werden dann auch nicht von der Session kontrolliert

2. ein separates Mapping auf die Tabelle, ohne das Passwortfeld, SimpleUser ist dann zu User gleichwertig, bis auf ein Feld weniger

---

edit:
der direkte Weg, die get-Methode zu entfernen oder statt public nur protected/ private zu machen,
ist auch nicht zu verachten, das automatische Mapping kann bei manchen dieser Schritte immer noch funktionieren, testen!

set-Methode kann bleiben, ist ja nicht gefährlich,
wenn das Passwort für Vergleiche benötigt wird, reicht evtl.
> public boolean isThisTheRightPasswort(String _otherPasswort);
ohne get
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Danke erstmal für die Antwort. Generell missfällt mir halt eine getPassword()-Methode an sich. Aber um auf die letzte Möglichkeit - des Entfernens/ private oder protected- Machen der get-Methode zu sprechen zu kommen: Nach meinem Verständnis war es doch so, dass via SOAP sowohl Getter als auch Setter existieren müssen, dass ein Feld sichtbar ist oder irre ich mich da?
Wenn das irgendwie möglich ist, wäre das ja durchaus ein Weg. Ansonsten müsste ich mir den Weg über die zweite Klasse durchdenken. Problem ist halt immer - wie Du schon sagst - die korrekte Persistenzabbildung.
 
S

SlaterB

Gast
> Nach meinem Verständnis war es doch so, dass via SOAP sowohl Getter als auch Setter existieren müssen, dass ein Feld sichtbar ist oder irre ich mich da?

ich beziehe mich mit getter/ nicht getter auf innerhalb des Servers/ Anbindung an DB

was bei SOAP/ WEbService passiert hast du doch viel eher unter Kontrolle, da würde ich das Bean nicht kaputtmachen wegen korrekter Übertragung, richtig,
dafür dann kontrollieren, was gesendet werden muss und kann,
beim Anlegen eines Users wird das Passwort, ob original, verschlüsselt oder verhasht übertragen, dagegen hast du ja sicher nix,
nur bei anderen Abfragen, die vielleicht nur die Usernamen anzeigen wollen, dann auch nur die Usernamen übertragen,
das Passwort im zu übertragenden Transferobjekt auf null setzen oder ähnliches
 
G

Gast2

Gast
Passwörter selber herumzureichen ist doch längst out, hashcodes reichen doch.

Gibt's da ein Beispiel für?
Ich muss allerdings dazusagen, dass ich ein bestehendes Projekt ergänze, wo auch Clients - leider Gottes - noch direkt auf die Datenbank zugreifen. Sprich Platz für revolutionäre Änderungen ist sehr klein...
 
M

maki

Gast
Gibt's da ein Beispiel für?
Ich muss allerdings dazusagen, dass ich ein bestehendes Projekt ergänze, wo auch Clients - leider Gottes - noch direkt auf die Datenbank zugreifen. Sprich Platz für revolutionäre Änderungen ist sehr klein...
Hab jetzt kein Beispiel zur Hand, Dr. Google sollte aber welche finden können.
Das Passwort steht aber nicht im Quelltext der Clients? Falls doch, kannst du dir den Aufwand gleich sparen....
 
G

Gast2

Gast
Mir kommt gerade ein anderer Gedanke. Ausgehend von der Klasse aus dem Ausgangs-Thread und anzunehmen, dass alle Variablen auf Datenbankfelder gemappt sind, für den Passwort-Part:

Java:
public class User{
...
@Column(name = "password")
private String password;

public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
...
}

...geändert in...

Java:
public class User{
...
@Column(name = "password")
private String realPassword;
private String password;

protected String getRealPassword(){
return realPassword;
}
protected void setRealPassword(String realPassword){
this.realPassword = realPassword;
}

public String getPassword(){
return null;
}
public void setPassword(String password){
setRealPassword(password);
}
...
}

Das Passwortfeld wäre generell verfügbar via SOAP, liefert aber nichts, sondern kann nur setzen. Gibt es Bedenken in Richtung JPA?
 
S

SlaterB

Gast
was ist denn dabei der Unterschied zu
Java:
public class User{
...
@Column(name = "password")
private String password;

protected String getPassword(){
   return password;
}
public void setPassword(String password){
   this.password = password;
}
...
}
?
 
G

Gast2

Gast
Der Unterschied ist, dass realPassword das tatsächlich gemappte Datenbankfeld ist, aber nicht via SOAP veräusserlicht wird. Das wird password, was eben via getPassword null zurückliefert, seine set-Methode setzt dann das gemappte realPassword.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Error beim Versuch, einen Webservice zu kontaktieren SOA 4
J SOA WebService JAX-WS Java-Klasse per wsimport generieren lassen SOA 3
K Webservice: 4 counts of IllegalAnnotationExceptions SOA 0
D Zertifikat Authentifizierung am Webservice SOA 0
P JBOSS 7 und Restful Webservice SOA 1
N WebService Ausgabe einer ArrayList SOA 2
N Web Services Client aus externen WebService erstellen SOA 4
I SOAP Webservice Methoden und Parameter auslesen SOA 3
F [WebService] Array von eigenen Objekten SOA 0
P SOAP Webservice mit HTTP Basic Authentifizierung SOA 1
M JAVA Webservice Währungsrechner DRINGEND Hilfe SOA 1
A Up-/ Download von Dateien zu WebService SOA 6
D WebService Technik - Aufwand Änderung des Application Server SOA 3
R Webservice Timeout Konfiguration SOA 3
D SOAP Webservice (SAP) SOA 3
MQue WebService Versionierung SOA 9
L [AXIS2] OutOfMemory Exception bei Übertragung von größerer Datei via Webservice SOA 3
A Funktion mit Map als WebService SOA 4
T Webservice serviceName im Handler ermitteln SOA 3
N Webservice Einbinden wsdl SOA 7
M Edit und Remove über Webservice SOA 3
F Client Problem gegen Webservice SOA 3
P Java Webservice mit JWS Bindingnamen customizen SOA 4
L wie ArrayList an Webservice geben? SOA 3
B Webservice Config / SoapStub: Best Practice SOA 3
S Objektübertragung Fehler über Webservice SOA 10
E Webservice durch Java ansprechen SOA 7
L Webservice HTTPS Netbeans SOA 2
G NullPointerException bei Parameterübergabe an Webservice mittels kSoap2 SOA 2
M Webservice per URL ansprechen SOA 14
M Webservice Client erstellen und XML Request senden SOA 3
T Verwendung von Eclipse Projekten im Axis2 Webservice SOA 8
S Webservice als "CronJob" SOA 4
M Webservice (JaxWS) extern verfügbar machen SOA 5
M Welches WebService Framework ist denn das beste FRAMEWORK? SOA 5
D Webservice fürs Internet sichtbar machen SOA 2
W WebService aus einer HTML-Seite SOA 9
T WebService innerhalb von Seam-Projekt, komplexe Datentypen SOA 6
N JAX-WS WebService und Tomcat 7 SOA 11
E Trennung von Daten und WebService und Wiederverwendung der Daten SOA 2
D Sicherheit bei REST-Webservice SOA 19
G WebService, was darf der Client alles sehen SOA 19
M Nutzen des Webservice AWSECommerceService SOA 1
S AXIS2 Webservice: Umgang mit komplexen Datentypen SOA 5
G Webservice Contract first SOA 8
G WebService -> ServletFilter SOA 2
G WebService Concurrency SOA 19
M Fehler beim Veröffentlichen eines Webservice SOA 6
G WebService Types SOA 7
G OpenLigaDB Webservice Client SOA 4
G WebService WSDL SOA 3
A PHP WebService aus Java aufrufen SOA 2
R Proxy WebService erstellen SOA 3
G WebService mit wsdl erstellen SOA 4
P WebService SOA 6
H Webservice: BindingProvider SOA 6
D WebService DB abfrage SOA 4
mabe83 EJB Klassen für Webservice nutzen SOA 2
S Webservice-Client-Klasse gibt immer null zurück SOA 3
G WebService mit komplexen Objekten SOA 5
C Problem mit Java Webservice - SOAPBinding.Style - Wrapper class fehlt SOA 1
T Rest Webservice der 2 verschiedene XML Objekte(JaxB) entgegennimmt SOA 10
S Webservice, Vererbung und Netbeans SOA 3
E Lesen der kompletten SOAP als WebService Provider/Server SOA 4
T WebService Authentifizierung SOA 11
mabe83 Suche Hilfe zum Thema Webservice + EJB SOA 3
T WebService erstellen SOA 28
T Krankes Vorhaben: Von VB auf Java Webservice SOA 10
M Webservice RuntimeModelerException? SOA 5
G Webservice mit Java aufrufen SOA 2
G WebService: mehrere methoden mit demselben Namen SOA 4
T einfacher Webservice SOA 3
G Webservice im JBoss: runtime modeler error SOA 3
V webservice von aussen (webbrowser) ansprechen SOA 2
V Webservice, allgemeine Fragen SOA 9
G Alfresco - WebDav oder WebService SOA 2
0 Webservice nutzen (rpc/enc style) SOA 2
R XML verschicken mit Webservice Server Client SOA 2
R Webservice aufrufen mit SOAP Style.DOCUMENT ? SOA 5
G Webservice zugreifen SOA 6
G Deploy Apache CXF WebService mit Eclipse SOA 2
G Webservice mit JSON SOA 8
T Webservice über Tomcat loggen SOA 5
thE_29 WebService - JAXBElement - richtige Klasse? SOA 2
L Probleme mit komplexen Datentypen in einen Webservice SOA 2
O brauche hilfe bei java/webservice geschichte SOA 29
M Webservice/ Axis/ Bea Weblogic Server 8.1 SOA 12
E Webservice konfigurieren SOA 2
Y Webservice erstellen SOA 4
F Tutorial zu WebService mit JBoss, Eclipse und Jax-ws? SOA 3
C Webservice im Unternehmen SOA 4
L webservice frage (eclipse/wtp, wsdl) SOA 12
U Webservice mit Axis, Hello World Beispiel SOA 2
J Frage zu Webservice SOA 3
L WebService TestClient Problem SOA 2
Z Im PUT Request das doppelte JSON Feld validieren SOA 0

Ähnliche Java Themen

Neue Themen


Oben