• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

P3P privacy policy iFrame Cookie - merchii/rack-iframe

th_wolfgang

New member
Hallo,

kann mir bitte jemand helfen, wie ich dies konkret installiere. bzw. wo und wie ich dies: https://github.com/merchii/rack-ifra...k/iframe.rb#L8 in meine Seite einbaue.

Wo muss den die Rubybibliothek hin, in meine Webseite, oder im Host angelegt werden, stehe gerade auf dem schlauch, "ist mein erster Kontakt mit "Rubybibliotheken".

Normale p3p Header funktionieren beim IE11 und Safari im iFrame nicht mehr, daher die Frage, desweiteren bin ich an weiteren Ideen interessiert, wie man die zwei Browser mit redirect iframe Header in den Griff bekommen kann, so das die Cookie ankommen.

Danke & LG
Wolf
 
Zuletzt bearbeitet:
IE11 und Safari Sitzungs-Cookies

Hallo,

Ich habe zwar schon eine ähnliche Post, da ging es allerdings um den Einbau einer Bibliothek.
Ich beschäftige mich immer noch mit dem Thema, wie man in iFrame und Redirect z.B. bei Mobileseiten-Umleitung die Sitzungs-Cookies in den Browsern Safari und IE11 (IE10 funktioniert) nicht „verliert“. Früher habe ich dies mit p3p Headern erledigt, dies funktioniert allerdings leider in den zwei Browsern nicht mehr. (<?php header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"'); )

Danke für eure Tipp’s und Ratschläge,
LG
Wolf
 
Der Github Link funktioniert nicht.

PS: Ich kenne mich nicht so wirklich mit P3P aus, aber was hat das denn mit Cookies zu tun. Und third pary cookies wirst du auch mit einem redirect nicht in den Browser bekommen, wenn die nicht erlaubt sind.
 
AW: IE11 und Safari Sitzungs-Cookies

Hallo und Danke,

Das ist schon so weit klar, aber wie auch geschrieben habe ich das Problem mit 3rd-Cookies (thirdroot cookies) speziell im IE11, daher das p3p. Leider funktioniert dies nicht im IE11 (bis 10 hatte es super funktioniert…) Der Safari macht mir bei 3rd-Cookies auch noch Kopfweh, habe seit Tagen dies nicht lösen können.

Das Problem: Internet Explorer gives lower level of trust to IFRAME pages (IE calls this "third-party" content and cookies). Z.B hatte ich hier, wenn auch nur im Bereich IE einige Ideen gefunden http://stackoverflow.com/questions/...-in-iframe-in-internet-explorer/389458#389458 Aber das hatte bis her nicht funktioniert so recht. Der Safari ist auch sehr entscheidend, da habe ich noch keinen Ansatz, hoffe, wenn der IE11 geht, das der Safari "mitzieht".

Ich suche zwar nach einer besseren Lösungen, aber hier habe ich ein gem gefunden… leider habe ich keine Ahnung wie man ein gem in seine Webseite einbaut (weiß das jemand?) testen kann man ja mal…
Code:
module Rack
  class Iframe

    DEFAULT_P3P = %(CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV").freeze
    DEFAULT_IFRAME_SESSION_PATH = '/iframe_session'.freeze
    DEFAULT_ENV_SESSION_KEY = 'rack.session'.freeze

    def initialize(app, options = {})
      @app, @options = app, options
      @options[:p3p] ||= DEFAULT_P3P
      @options[:iframe_session_path] ||= DEFAULT_IFRAME_SESSION_PATH
      @options[:env_session_key] ||= DEFAULT_ENV_SESSION_KEY
    end

    def call(env)
      # 1) If P3P: Set a random Etag (If-None-Match) to trick backend to not send cached response (304).
      set_invalid_etag!(env) if set_p3p_header?(env)

      # 2) Request
      if iframe_session_path?(env)
        @app.call(env) # ...still call app as we want same ENV.
        @status, @headers, @body = iframe_session_response(env)
      else
        @status, @headers, @body = @app.call(env)
      end

      # 3) If P3P: Attach P3P header.
      set_p3p_header! if set_p3p_header?(env)

      # 4) Response
      [@status, @headers, @body]
    end

    protected

      def user_agent(env)
        env['HTTP_USER_AGENT'] || []
      end

      def set_invalid_etag!(env)
        env['HTTP_IF_NONE_MATCH'] = Digest::MD5.hexdigest(Time.now.to_s)
      end

      def set_p3p_header!
        @headers['P3P'] = @options[:p3p]
      end

      def set_p3p_header?(env)
        user_agents?([:ie, :safari], env)
      end

      def user_agent?(id, env)
        case id
        when :ie
          user_agent(env).include?('MSIE')
        when :safari
          user_agent(env).include?('Safari')
        when :opera
          user_agent(env).include?('Chrome')
        when :opera
          user_agent(env).include?('Opera')
        when :firefox
          user_agent(env).include?('Firefox')
        else
          raise "Define missing browser agent: #{id.inspect}"
        end
      end

      def user_agents?(ids, env)
        [*ids].any? do |id|
          user_agent?(id, env)
        end
      end

      def iframe_session_path?(env)
        env['PATH_INFO'] == @options[:iframe_session_path]
      end

      def iframe_session_response(env)
        begin
          # Write a value into the session to ensure we get a session (cookie).
          session_key = @options[:env_session_key]
          env[session_key][:iframe_session] = true
        rescue => e
          env['rack.errors'].puts "[rack-iframe]: env[#{@options[:env_session_key]}] = #{env[@options[:env_session_key]]}"
        end
        [200, {}, [""]]
      end

  end
end

Hat jemand da noch ein paar Tipp"s oder Erfahrungswerte
LG
Wolf
 
Zuletzt bearbeitet von einem Moderator:
Hallo Danke,
hier noch einmal der Link https://github.com/merchii/rack-iframe/blob/master/lib/rack/iframe.rb#L8

Eine Lösung im JavaScript Bereich wäre mir zwar lieber, allerdings habe ich dies nun mal gefunden, wenn ich noch den Ansatz verstehen würde, wie ich diese Bibliothek in meine Seite richtig einbaue, glaube ich dies der Ansatz ist mein Problem lösen zu können (hoffentlich) suche seit Tagen und nichts klappt so recht…

Eigentlich geht es ja "nur" um die thirdroot cookies im IE11 und Safari.

PS: lieber Admin, kann sein, das ich die verkehrte Sparte gepostet habe, aber mit "Serverseitige Programmierung" hat das dann auch absolut nichts zu tun.

Danke & LG
Wolf
 
Zuletzt bearbeitet:
AW: IE11 und Safari Sitzungs-Cookies

Da es hier ja nicht um ein JS-Problem handelt, hab' ich das mal nach "Serverseitig" verschoben (ist ja Ruby).

Ich kenne mich mit Ruby überhaupt gar nicht aus, aber ich verstehe dein Problem immer noch nicht. Auch der IE11 versteht die domain-Direktive und man kann damit Cookies auch in Subdomains (ich gehe mal davon aus, dass die mobile Seite eine Subdomain ist) verfügbar machen: Cookie Subdomain Test

PHP:
setcookie("crossDomain", "hallo", 0, "/", ".kkapsner.de");

Aber erkläre dein Problem doch mal genauer.
 
Ruby läuft auf dem Server und hat mit JS überhaupt gar nichts zu tun. Ich werde immer verwirrter... was willst du genau machen? Hast du denn eine Testseite, wo wir uns ansehen können, was du genau für eine Konstallation hast?

Und so wie es aussieht, sind deine beiden Threads exakt die gleiche Problemstellung... überlege gerade, ob ich die beiden zusammenfassen sollte...

PS: wenn der Nutzer dem Browser verbietet third party cookies anzunehmen (was ich auch beim FF eingeschaltet habe) kannst du da nicht dagegen unternehmen.
 
Redirect iframe cookie mask url

Hallo,

ich habe wie in der vorhergegangenen Post von meinem Cookie Problem berichtet, dies auch mit p3p Header beim IE11 und Safari auftritt.

Jetzt versuchte ich die Weiterleitung ohne iFrame hinzubekommen, habe es mal mit einer Framepage etc. versucht auch mit JavaScript (hier suche ich noch nach einem guten Javasnipsel). Das Umleiten funktioniert, aber immer wieder Probleme mit Sitzungscookies IE11 / Safari grrr.

Jetzt geht’s weiter versuche es mit php, allerdings kann ich dies nicht recht testen, da immer ein Fehler beim Seitenaufruf erscheint:

Unable to open socked: Connection refused (111)

wie bekomme ich den dummen Fehler weg? Oder hat noch jemand eine Idee, wie ich das Sitzungscookieproblem in den Griff bekomme, wenn ich eine iFrame-Weiterleitung benutze. Beim IE10 geht es z.B. mit p3p Headern.

Hier mal mein php - Code mit dem ich den obigen Fehler erhalte:
(Interessieren würde mich schon ob das mit dem Codeschipsel funktionieren würde...)
PHP:
<?php
$URL = "http://example.com/page.html";
$base = '<base href="'.$URL.'">';
$host = preg_replace('/^[^\/]+\/\//','',$URL);
$tarray = explode('/',$host);
$host = array_shift($tarray);
$URI = '/' . implode('/',$tarray);
$content = '';
$fp = @fsockopen($host,80,$errno,$errstr,30);
if(!$fp) { echo "Unable to open socked: $errstr ($errno)\n"; exit; }
fwrite($fp,"GET $URI HTTP/1.0\r\n");
fwrite($fp,"Host: $host\r\n");
if( isset($_SERVER["HTTP_USER_AGENT"]) ) { fwrite($fp,'User-Agent: '.$_SERVER["HTTP_USER_AGENT"]."\r\n"); }
fwrite($fp,"Connection: Close\r\n");
fwrite($fp,"\r\n");
while (!feof($fp)) { $content .= fgets($fp, 128); }
fclose($fp);
if( strpos($content,"\r\n") > 0 ) { $eolchar = "\r\n"; }
else { $eolchar = "\n"; }
$eolpos = strpos($content,"$eolchar$eolchar");
$content = substr($content,($eolpos + strlen("$eolchar$eolchar")));
if( preg_match('/<head\s*>/i',$content) ) { echo( preg_replace('/<head\s*>/i','<head>'.$base,$content,1) ); }
else { echo( preg_replace('/<([a-z])([^>]+)>/i',"<\\1\\2>".$base,$content,1) ); }
?>
Danke & LG
Wolf
 
Zuletzt bearbeitet von einem Moderator:
AW: Redirect iframe cookie mask url

Ist die URL die du aufrufen willst eventuell geschützt oder nicht verfügbar?

Eventuell hilft auch ein Blick ins Access-Log bzw. ins Error-Log vom Apache. Korrigiert mich wenn ich falsch liege, aber das @ bei Funktionen unterdrückt meines Wissen wertvolle Fehlermeldungen und man sollte dies nach Möglichkeit nicht verwenden.
 
AW: Redirect iframe cookie mask url

Wieder keinen Bezug zu JS -> verschoben.

- - - Aktualisiert - - -

Aber warum baust du das socket und die HTTP-Header eigentlich per Hand? Für sowas gibt es cURL.

Und zu deine grundlegen Problem können wir immer noch nicht was sagen, da du immer noch gesagt hast, was genau deine Konstellation ist.

PS: da alle drei Threads anscheinend die gleiche Ursache haben, fasse ich die mal zusammen.
 
Zurück
Oben