web-dev-qa-db-ja.com

JavascriptまたはPHPを使用してCookieが設定されるのをブロックすることは可能ですか?

多くの方はおそらく新しいEUプライバシー法を知っているでしょうが、知らない人にとっては、基本的に、EUに居住する会社が運営するサイトが「ウェブサイトの運営に不可欠ではない」と分類されるCookieを設定できないことを意味します明示的な許可がない限り、訪問者のマシン上で。

だから、問題はこれに最もよく対処する方法になりますか?

ブラウザには、組み込みの特定のWebサイトからのCookieをブロックする機能があることは明らかです。私の質問は、JSまたはPHPを使用して同様のことを行う方法はありますか?

つまり、設定しようとしている可能性のあるCookie(AnalyticsやFacebookなどのサードパーティのCookieを含む)を傍受し、ユーザーが同意しない限りそれらをブロックします。

一度設定すればすべてのCookieを削除することはもちろん可能ですが、そもそも設定を許可しないのと同じことですが、この場合は設定が不十分なので十分ではないと思います。法律の文言を遵守してください。

アイデア?

18
freestate

私もこの答えにかなり興味があります。 PHPで達成する必要があることは達成しましたが、JavaScriptコンポーネントはまだ私を理解していません。

これが私がPHPでそれをしている方法です:

$dirty = false;
foreach(headers_list() as $header) {
    if($dirty) continue; // I already know it needs to be cleaned
    if(preg_match('/Set-Cookie/',$header)) $dirty = true;
}
if($dirty) {
    $phpversion = explode('.',phpversion());
    if($phpversion[1] >= 3) {
        header_remove('Set-Cookie'); // php 5.3
    } else {
        header('Set-Cookie:'); // php 5.2
    }        
}

次に、ユーザーがCookieを受け入れるときにこれをオフにする追加のコードがいくつかあります。

問題は、JavaScriptを介してCookieを操作するサードパーティのプラグインが私のサイトで使用されており、それらをスキャンしてdocument.cookieにアクセスするプラグインを特定できないことです。これらのプラグインは引き続きCookieを設定できます。

それらがすべて同じフレームワークを使用していると便利なので、setCookie関数をオーバーライドできる可能性がありますが、そうではありません。

Document.cookieを削除または無効にして、アクセスできなくなったらいいのにと思います...

編集:Cookieを取得または設定するためのJavaScriptアクセスを防ぐことができます。

document.__defineGetter__("cookie", function() { return '';} );
document.__defineSetter__("cookie", function() {} );

編集2:これがIEで機能するためには:

if(!document.__defineGetter__) {
    Object.defineProperty(document, 'cookie', {
        get: function(){return ''},
        set: function(){return true},
    });
} else {
    document.__defineGetter__("cookie", function() { return '';} );
    document.__defineSetter__("cookie", function() {} );
}
12
Michael

これを思い付くために、ここからMichaelsコードを適合させました。

基本的には、defineGetterメソッドとdefineSetterメソッドを使用して、ページ上のすべてのCookieを設定してから、ユーザーが指定したCookieを削除します。もちろん、これが目的の場合は、この役割を逆にすることもできます。 。

私はこれをGoogleAnalyticsなどのサードパーティのCookieでテストしましたが、うまく機能しているようです(___utmb_ Cookieを除いて、Google Analyticsで取得されなくなったことを意味します)。これを使用して、特定のCookieに適合させることができます。ニーズ。

参照用にCookie名が___utmb_でないかどうかについての部分を含めましたが、これらの値を配列から簡単に取得して、そのようにループすることができます。

基本的に、この関数には、if( cookie_name.trim() != '__utmb' ) { all_cookies = all_cookies + cookies[i] + ";"; }を示す部分で指定されたものを除くすべてのCookieが含まれます。

ORまたはANDフィルターを使用してこれに追加するか、配列、データベース、ユーザー入力、または特定のものを除外したいものからプルすることができます(必須Cookieと非必須Cookieの決定に役立ちます)。

_function deleteSpecificCookies() {

var cookies = document.cookie.split(";");
var all_cookies = '';

    for (var i = 0; i < cookies.length; i++) {

        var cookie_name  = cookies[i].split("=")[0];
        var cookie_value = cookies[i].split("=")[1];

        if( cookie_name.trim() != '__utmb' ) { all_cookies = all_cookies + cookies[i] + ";"; }


    }

if(!document.__defineGetter__) {

    Object.defineProperty(document, 'cookie', {
        get: function(){return all_cookies; },
        set: function(){return true},
    });

} else {

    document.__defineGetter__("cookie", function() { return all_cookies; } );
    document.__defineSetter__("cookie", function() { return true; } );

}

}
_
10

完全に無効にすることはできませんが、デフォルト設定を.htaccessで上書きできます。

試してみてください

 SetEnv session.use_cookies='0';

一部のユーザーにとってオプションの場合は、.htaccessを使用しないでください

if(!$isAuth)
{
    ini_set('session.use_cookies', '0');
}
2
Baba

少し古いですが、私はあなたがうまくいく答えに値すると思います:

手順1:サードパーティのスクリプトコードを実行しないでください。

ステップ2:Cookieバナーを表示します。

ステップ3:ユーザーが同意するまで待ちます。これで、サードパーティのスクリプトコードを実行できます。

私のために働いた。

0