Struts - Direktaufruf eines URL verhindern

Dieses Thema Struts - Direktaufruf eines URL verhindern im Forum "Allgemeines EE" wurde erstellt von synthesist, 4. Jan. 2007.

Status des Themas:
Es sind keine weiteren Antworten möglich.

Thema: Struts - Direktaufruf eines URL verhindern Hallo, wie macht man es, dass ein url, der in einem <html:link> einen id Parameter übergeben bekommt, nicht direkt...

  1. Hallo,
    wie macht man es, dass ein url, der in einem <html:link> einen id Parameter übergeben bekommt, nicht direkt ueber die manuelle Adresseingabe im Browser aufgerufen werden kann, sondern nur über diesen link auf diesen url verweist.

    zb wird jemand über einen link an diese seite geleitet

    http://localhost:8080/projekt/newEntry.do?action=new&s_id=1

    momentan ist es so, dass derjenige auch manuell im browser dies eintippen könnte und er würde inhalt sehen, der nicht für ihn bestimmt ist.
    http://localhost:8080/projekt/newEntry.do?action=new&s_id=2

    Wie kann ich sowas verhindern, dass Seiten nur über den Link aufgerufen werden können bzw. das der url ein wenig vershclüsselt wird, so dass ein mancher nicht auf die idee kommen könnte urls auszuprobieren und nicht zugewiesenen inhalt sieht ?

    Thanks a lot. Vielen Dank.
     
  2. Hinweis: KOSTENLOSE Java-Grundlagen DVD. Sichere dir hier den kostenlosen Zugriff auf 7 Stunden Video Java-Know How und starte richtig durch!
  3. 'ein wenig' verschlüsseln kannst du am einfachsten mit Post-Aufrufen,
    dann fallen die Parameter weg,

    das geht mit einem Link nicht, aber jeden Link kannst du wohl auch als Formular darstellen
    (da ist die Frage, obs nur als Button geht oder auch als Text-Link)

    nur Tipp in die richtige Richtung, keine fertige Lösung ;)

    ------


    auf jeden Fall kann man spätestens mit dem Anschauen des HTML-Quelltextes jeden verwendbaren Link erkennen,
    alles was der Browser können muss, das kann auch der User,

    -------

    auf Serverseite könntest du noch tricksen, indem du für eine bestimmte Session die versendeten Links (oder Ids) merkst und nur diese zulässt,
    wenn andere kommen, dann hat die wohl ein User manuell eingetippt,

    gibt evtl. Probleme, wenn der User in der lokalen History wandert und Links von früheren Seiten aufruft
     
  4. Hallo,

    du kannst deine Request Information vielleicht auch einfach mit sun.misc.BASE64Encoder oder anders verschlüsseln.
    Dann würde der Link so aussehen (vorher noch mit dem java.net.URLEncoder drüber, wegen dem '=' nach Base64):
    Code (Text):
    http://localhost:8080/projekt/newEntry.do?command=YWN0aW9uPW5ldyZzX2lkPTE%3D
    Das hält wengistens den Hauptteil der Nutzer ab, in der URL rumzufuschen.

    Grüße,
    Matthias
     
  5. Hallo,
    leider kriege ich das mit den "post" links überhaupt nicht hin, das scheint wohl nur mit Button Links zu gehen.
    Mathias Knorr, hättest du vielleicht ein Beispiel oder Ansatz wie ich das machen könnte ?

    Vielen Dank im voraus.
     
  6. der Vorschlag von MatthiasKnorr ist soweit gut. Würd das so lösen, dann haste auch nicht das Problem dass du bei jedem Link per Javascript das Formular posten musst.
     
  7. Hallo synthesist,

    kannst du bitte kurz erklären (vielleicht mit etwas Code) was du gemacht hast und was daran nicht funktioniert?
    Zur Zeit ist mir nicht klar, was du mit 'Post' oder 'Button' Links meinst.

    Grüße,
    Matthias
     
  8. das kommt doch von meinem Post drüber,

    bei
    <form method = post, action=..
    <submit>
    </form>
    usw. werden die Parameter nicht angezeigt,
    aber zumindest standardmäßig ist Submit ein Button und kein 'normaler' Link
     
  9. ja, deswegen die frage: ist es möglich mit einem normalen Textlink ein post zu senden ? Mein derzeitiger Link sieht so aus:
    Code (Text):


     <logic:iterate
                  id="currententry"                          
                  name="entries"            
                  indexId="i"        
     >  
     <td
        <html:img src="import/list.gif" align="absmidlle"/></td>
         <td width="430">
             <html:link action="/NewEntry.do?action=neuerEintrag"
                                 paramName="currententry"
                                 paramProperty="customer_id"
                                 paramId="customer_id"                   
             >
            <bean:write name="currenentry" property="inhalt"/>
            </html:link
    </td>  

    </logic:iterate>
     
    Dies führt zu einer Reihe von Links, die nach Anklicken im Browser so aussehen:

    http://localhost:8080/MyApplication/NewEntry.do?action=neuerEintrag&customer_id=7


    Und mein Problem ist nun, dass jemand der es darauf anlegt, manuell einfach im Browser eingibt

    http://localhost:8080/MyApplication/NewEntry.do?action=neuerEintrag&customer_id=7
    http://localhost:8080/MyApplication/NewEntry.do?action=neuerEintrag&customer_id=8
    http://localhost:8080/MyApplication/NewEntry.do?action=neuerEintrag&customer_id=9
    http://localhost:8080/MyApplication/NewEntry.do?action=neuerEintrag&customer_id=13

    usw.

    eingibt, und dadurch unbefugten Inhalt sieht. (Die IDs sind die tatsächlichen Ids wie sie in der Datenbank auch sind).

    Dann habe ich probiert, die Zahl nach der customer_id durch einen Random Long und einer HashMap zu "verschlüsseln", was auch gut funktioniert hat. Doch leider musste ich feststellen, dass auch dies nur eine oberflächliche Sicherheit war. Denn selbst wenn dies im Browser erscheint

    http://localhost:8080/MyApplication/NewEntry.do?action=neuerEintrag&customer_id=188574637847234

    kann der Nutzer immer noch

    http://localhost:8080/MyApplication/NewEntry.do?action=neuerEintrag&customer_id=2

    manuell eingeben, und nix wars mit den Randoms.

    Dann hab ich mir überlegt, ob es auf DB Ebene eine Möglichkeit gibt, jedesmal einen neuen, zufälligen und eindeutigen Primary Key zu erzeugen. Weiß ich nicht. Weiß auch nicht ob man das so machen würde.

    Jedenfalls suche ich einen Mechanismus,
    - der den Direktaufruf einer Action oder jsp verhindert (ohne alles in WEB-INF 'verstecken' zu müssen)
    - eine andere Lösung für die Parameterübergabe einer Action ?


    Danke nochmal für alle Vorschläge!
     
  10. Setzt in der Session die ID.
    Dann musst du sie nicht aus dem Request auslesen sondern kannst Sie aus der Session auslesen.
    Und die Session wird kann der User nicht manipulieren
     
  11. ms
    ms
    @synthesist

    Wozu brauchst du das eigentlich?
    Wenn das dein Berechtigungskonzept für deine User ist, dann überdenke das bitte nochmal.
     
  12. wollte ich gerade erwähnen - bevor man sich solche komplexe Pseudo-Verschlüsselungsmaßnahmen überleget, wie wär's, wenn nur User auf Inhalte zugreifen können, die auch nur für sie bestimmt sind? Dann kommt man mit den get-parametern nicht weit, sollte jemand diese manuell verändern.
     
  13. Ein Workaround wäre sowas:

    Code (Text):
    <form name="hiddenForm" action="blablub" method="post">
        <input name="foo" value="bar" type="hidden"/>
        [url="#"]Link mit hidden Post[/url]
    </form>
    Funktioniert halt nur, wenn Javascript aktiviert ist.
     
  14. Kostenlose Java-Grundlagen DVD im Wert von 29,95 € heute kostenlos sichern (Klick)
Die Seite wird geladen...

Struts - Direktaufruf eines URL verhindern - Ähnliche Themen

Forum Datum
Schulung zu Tomcat/JSP/Struts gesucht Allgemeine Java-Themen 16. Jan. 2015
Struts2 / Freemarker / Maven2: Markieren von Deployment-Stufen in der View-Schicht Web Tier 22. Okt. 2012
heutzutage Struts 1 oder 2 in der Praxis? Web Tier 28. Dez. 2011
Tomcat/Struts2 Benutzer bestimmt Name der URL Web Tier 8. Dez. 2011
Struts forwarded lokal auf fertige Webseite Web Tier 17. Juli 2011
Status des Themas:
Es sind keine weiteren Antworten möglich.
Interessante Stellenangebote


Weitere Stellenanzeigen

Stellenanzeige Mediadaten