21

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

では、問題はこれにどのように対処するのが最善かということになります。

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

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

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

アイデア?

4

5 に答える 5

17

私もこの答えにかなり興味があります。私は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() {} );
}
于 2012-05-31T07:12:59.560 に答える
11

これを思いつくために、ここからマイケルズコードを適応させました。

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

これを Google Analytics などのサードパーティの Cookie でテストしたところ、うまく機能しているように見えます ( __utmbCookie を除外すると、Google Analytics で取得されなくなったことを意味します)。おそらくこれを使用して、特定のニーズに合わせて調整できます。

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

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

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; } );

}

}
于 2013-03-08T17:26:14.263 に答える
2

完全に無効にすることはできませんが、デフォルト設定をオーバーライドできます.htaccess

試す

 SetEnv session.use_cookies='0';

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

if(!$isAuth)
{
    ini_set('session.use_cookies', '0');
}
于 2012-04-24T21:38:24.243 に答える
-2

デマに注意を払わないのはどうですか?

これが古いニュースであるという事実は別として、サイトの機能に不可欠ではないCookie にのみ適用されることがテキストで明確に述べられています。つまり、セッション Cookie、ショッピング バスケット、またはサイトの機能に直接関係するものは何でも問題ありません。それ以外のもの (追跡、統計など) は、許可なく「許可されていません」。

于 2012-04-24T21:31:24.043 に答える