IE - Seitenaufruf beschränken

  • Moin,

    ich arbeite zZt. daran, einen kleinen Browser zu erstellen. Dieser Browser darf jedoch nur in Verbindung mit einem speziellen Hostnamen genutzt werden d.h. ich möchte, dass wenn eine "externe" Seite aufgerufen wird, der Aufruf verhindert wird.

    Wie stelle ich das am besten an?

    Ich schätze mal, dass ich mit

    [autoit]

    _IEPropertyGet($oIE, "locationurl")

    [/autoit]

    und Regex arbeiten muss, oder?

  • howdy

    wäre sicherlich am sinnvollsten, allerdings solltest du ein paar sicherheitslücken schließen bezüglich dieser "proxy"-seiten in denen dann die gewünschte(blockierte) seite eingebettet wird.

    kannst ja versuchen das weitesgehend damit zu unterdrücken indem du eine eine "tut mir leid is leider gesperrt"-seite weiterleitest wenn die seite einen bestimmten ausdruck beinhaltet(z.b. http-proxy o.ä.)

    auslesen kannst du die seite ja wie im anderen thread beschrieben mit

    [autoit]

    $body = _IEBodyReadHTML($oIE)

    [/autoit]


    P.S.:
    du kannst auch vorhandene frames überprüfen ob sie einer gesperrten seite entsprechen

    mfg
    sgtigram

    Einmal editiert, zuletzt von SgtIgram (9. Januar 2012 um 15:02)

  • Also verstehe ich das richtig du möchtest sobald ich in die URL Zeile eine Adresse eingebe wie 'youtube.com' soll der Aufruf blockiert werden?
    wie wäre es mit einer Blacklist? also immer vor dem eigentlichen Laden der Seite den Inhalt aus dem Input auslesen und mit der Blacklist vergleichen, sollte ein Eintrag in der Blacklist sein, dann den Aufruf verhindern ..

    Gruß Marvin

  • Also verstehe ich das richtig du möchtest sobald ich in die URL Zeile eine Adresse eingebe wie 'youtube.com' soll der Aufruf blockiert werden?
    wie wäre es mit einer Blacklist? also immer vor dem eigentlichen Laden der Seite den Inhalt aus dem Input auslesen und mit der Blacklist vergleichen, sollte ein Eintrag in der Blacklist sein, dann den Aufruf verhindern ..

    Gruß Marvin


    dann ist es aber nich abgesichert wenn man über einen link auf der seite auf eine gesperrte seite bekommt.
    den link muss ja nich im input eingeben oda so^^

    z.b.
    ich gebe in google youtube, tube, oder sonstwas ein, und gehe dann einfach auf den link der mich dahinführt. so wird das inputfeld überflüssig^^

    daher:
    in der while-schleife einfach ununterbrochen checken wie die aktuelle adresse ist ;D

    mfg
    sgtigram

  • Und warum lässt dann nicht einfach die Adresszeile in deinem Browser weg, wenn es eh nur mit einer bestimmten Seiten laufen soll?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Weil das Hauptproblem die Hyperlinks sind, nicht die Adresszeile :)

    @Protex

    Richtig. Man darf keine andere Seite besuchen. Ich müsste also

    [autoit]

    _IEPropertyGet($oIE, "locationurl")

    [/autoit]

    prüfen, ob sich der User im "freien Raum" bewegt. Es sei denn, es gibt einfachere Wege.

  • Weil das Hauptproblem die Hyperlinks sind, nicht die Adresszeile :)

    @Protex

    Richtig. Man darf keine andere Seite besuchen. Ich müsste also

    [autoit]

    _IEPropertyGet($oIE, "locationurl")

    [/autoit]

    prüfen, ob sich der User im "freien Raum" bewegt. Es sei denn, es gibt einfachere Wege.


    das is doch schon ein sehr simpler weg ... oder wartest du darauf das dir jemand die schon ohnehin kleine arbeit abnimmt und dir das bastelt?

    mfg
    sgtigram

  • und was hältst du davon, nur eine einzige adresse (bzw. deren unteradressen) in der Adresszeile laden zu lassen?
    D.h.:

    If $adresse = erlaubt Then

    mfg, Stoani

  • Die Unterseiten des Hosts dürfen besuchbar sein :)

    SgtIgram

    Nein, erwarte ich nicht. Es geht mir eher darum zu erfahren, ob dies der richtige Weg wäre, oder ob es bessere Alternativen gibt.

  • und was hältst du davon, nur eine einzige adresse (bzw. deren unteradressen) in der Adresszeile laden zu lassen?
    D.h.:

    If $inhaltadresszeile = $inhalterlaubt Then
    ; dein Script
    ElseIf $adresse <> $inhalterlaubt Then
    ; verhindern
    EndIf


    Ist zwar umständlich aber möglich ;)

    ;------------------------------Edit-------------------


    Sorry für den Doppelpost, mein Browers spinnt grad...


    ;---------------------------Edit2------------------

    @Sgtlgram

    Solche Antworten sind in einem Forum wie diesem einfach nur Kontraproduktiv und Motivationskiller.

    mfg, Stoani

  • woher soll ich das wissen? Weiß ich wie gut derjenige welcher die Frage gestellt hat bereits mit AutoIt vertraut ist?
    Nein.


    _______________________________________________________
    EDIT:


    @SoftCreatR

    Ich hab gerade kein Scite zur Verfügung deshalb kann ich kein Test.- bzw Examplescript schreiben :)

    mfg, Stoani

  • Ich glaube, ich habs :)

    [autoit]

    $sHostname = StringRegExp(_IEPropertyGet($oIE, "locationurl"), '^(http:\/\/)?(www.)?([^\/]+)', 1)

    [/autoit][autoit][/autoit][autoit]

    If $sHostname[2] <> 'domain.tld' Then
    ; Aufruf liegt außerhalb des erlaubten Bereichs
    Else
    ; Aufruf ok
    EndIf

    [/autoit]

    Jemand nen Verbesserungsvorschlag? :D

  • Also war der Tipp mit der If-Abfrage zwar keine Lösung aber ein Denkansatz. Soviel zum Thema unnötig......

    Gefällt mir gut , funtkionierts auch? ^^

    mfg, Stoani

  • Also war der Tipp mit der If-Abfrage zwar keine Lösung aber ein Denkansatz. Soviel zum Thema unnötig......

    Gefällt mir gut , funtkionierts auch? ^^


    es war unnötig da ich durch seine anderen threads gesehen habe das er bereits erfahrung mit php hat.
    meine meinung:

    er war sich zu fein diese 5-6 zeilen selber zu schreiben genau wie bei den andern threads.

  • Das Eine hat doch mit dem Anderen nichts zu tun. Glaube, was du willst... Kann nur nicht jeder mit AutoIt so gut arbeiten, wie du ;)

  • Hallo SoftCreatR,

    ich habe beim ausprobieren (ähnlich enem Blinden im Nebel, mit Taststock) eine interessante Entdeckung gemacht:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: AutoBert: http://www.autoit.de/index.php?page…4679#post164679

    [/autoit] [autoit][/autoit] [autoit]

    Skriptbeispiel für den Umgang mit _IECreateEmbedded, _IEErrorHandlerRegister, _IENavigate, _IEAction GuiCtrlCreateProgress, _IEPropertyGet
    #ce ----------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _IEErrorHandlerRegister()

    [/autoit] [autoit][/autoit] [autoit]

    $oIE = _IECreateEmbedded()
    $SinkObject = ObjEvent($oIE, "IEEvent_", "DWebBrowserEvents2") ; Ereignisse den UDFs zuweisen, beginnend mit IEEvent_
    $hGui =GUICreate("Embedded Web control Test", 640, 600, _
    (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
    $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
    $hInput = GUICtrlCreateInput("Hier URL eingeben: ", 10, 10, 500)
    $hGo = GUICtrlCreateButton("&Go", 520, 10, 50)
    $GUIActiveX = GUICtrlCreateObj($oIE, 0, 40, 640, 480)
    GUICtrlSetResizing($GUIActiveX, $GUI_DOCKAUTO)
    $GUI_Button_Back = GUICtrlCreateButton("Back", 10, 525, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
    $GUI_Button_Forward = GUICtrlCreateButton("Forward", 120, 525, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
    $GUI_Button_Home = GUICtrlCreateButton("Home", 230, 525, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
    $GUI_Button_Stop = GUICtrlCreateButton("Stop", 340, 525, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
    $GUI_Button_Print = GUICtrlCreateButton("PRINT", 450, 525, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
    $idProgress = GUICtrlCreateProgress(0, 555, 640, 18)
    GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState() ;Show GUI

    [/autoit] [autoit][/autoit] [autoit]

    _IENavigate($oIE, "http://www.autoit.de/index.php?page=Thread&postID=164679#post164679")

    [/autoit] [autoit][/autoit] [autoit]

    ; Waiting for user to close the window
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $hGo
    _IENavigate($oIE, GUICtrlRead($hInput))
    Case $msg = $GUI_Button_Home
    _IENavigate($oIE, "http://www.autoitscript.com")
    Case $msg = $GUI_Button_Back
    _IEAction($oIE, "back")
    Case $msg = $GUI_Button_Forward
    _IEAction($oIE, "forward")
    Case $msg = $GUI_Button_Stop
    _IEAction($oIE, "stop")
    Case $msg = $GUI_Button_Print
    _IEAction($oIE, "print")
    EndSelect
    $surl1 =_IEPropertyGet($oIE, "locationurl")
    $surl2 = GUICtrlRead($hInput)
    ;ConsoleWrite($surl1 & " " & $surl2 & " " & GUICtrlRead($idProgress) & @CRLF)
    If $surl1 <> $surl2 And GUICtrlRead($idProgress) > 90 Then GUICtrlSetData($hInput, $surl1)
    WinSetTitle($hGUI, "", _IEPropertyGet($oIE, "title"))
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $SinkObject = 0 ; IE Eventzuweisung aufheben
    $oIE.Quit ; IE beenden
    $oIE = 0
    GUIDelete()
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func IEEvent_ProgressChange($Progress, $ProgressMax)
    $percent = Int(($Progress * 100) / $ProgressMax)
    If $percent >= 0 And $percent <= 100 Then GUICtrlSetData($idProgress, $percent)
    EndFunc ;==>IEEvent_ProgressChange

    [/autoit] [autoit][/autoit] [autoit]

    Func IEEvent_BeforeNavigate2($oIE, $sUrl3, $nFlag, $sFrameName, $sOostData, $sHeaders, $bCancel)
    ConsoleWrite($sUrl3 & " Frame: " & $sFrameName & @CRLF)
    If Not StringInStr($sUrl3, "autoit.de") Then _IEAction($oIE, "stop") ;evtl, noch Hinwaeis ausgeben dass illegale AKtion
    ;if not StringInStr($sUrl3,"autoit.de") then $bCancel = True ;funktioniert bei mir nicht
    EndFunc ;==>IEEvent_BeforeNavigate2

    [/autoit] [autoit][/autoit] [autoit]

    Func IEEvent_NewWindow2($oIE, $bCancel) ;wird leider nicht ausgelöst
    ConsoleWrite("New Window" & @CRLF)
    _IEAction($oIE, "stop")
    ;$bCancel = True
    ;evtl noch eine neue Instanz starten
    EndFunc ;==>IEEvent_NewWindow2

    [/autoit]

    vielleich kannst du ja damit etwas anfangen, beobachte enfach einmal die Konsolenausgabeund versuche damit auf eine andere Seite ausserhalb von autoit.de zu kommen. Literatur dazu gibt es auch: http://msdn.microsoft.com/de-de/library/…v=vs.85%29.aspx Da mein Englisch stark eingerostet ist gehe ich davon aus dass es auch anders (eleganter?) geht

    Stoani und ganz besonders SgtIgram: warum versucht ihr das Thema tot zu reden? Was seine php Erfahrung mit seiner AutoIterfahrung zu tun hat ist mir schleierhaft, dass er logisch denken kann weiss ich. Dass er gerade in php bereit ist Hilfesuchenden zu helfen weis ich aus einem anderen Forum, bis jetzt war er sich noch nie zu fein sein Wissen zu teilen oder eine massgeschneiderte ferige Lösung zu präsentieren. Von daher finde ich

    er war sich zu fein diese 5-6 zeilen selber zu schreiben genau wie bei den andern threads.

    absolut unpassend, auf lc hätte ich anstelle von unpassend einen treffenden Smiley gesetzt (:puke:).
    Naja vielleicht meldet sich ja einer der echten Profi's der sich damit auskennt und bringt meinen Ansatz zu Ende,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (10. Januar 2012 um 02:41)

  • Moin, also habe eben mal das Script von AutoBert angetestet, und beziehe mich mal auf die Stelle "versuche damit auf eine andere Seite ausserhalb von autoit.de zu kommen" , wieso sollte dies nicht gehen? :P also bei mir läut das ganze einwandfrei ^^ die IE_Event Funktionen die den Aufruf unterbrecken sollen mit dem Command "Stop" werden bei mir nicht mal ausgeführt, ich sehe auch im Script nicht wo genau du den Aufruf auch startest :P könnte natürlich auch an meiner etwas älteren IE Version liegen aber ich denke mal nicht.

    ich würde die URL immer beim Klick auf den Go Button Prüfen und dann erst "wenn die URL OK" _IENavigate() andernfalls halt nichts oder so :D

    Gruß Marvin