|
|
||
JavaScriptからdocument.cookieへのアクセスを禁止するという手法が知られていて
Object.defineProperty(document, 'cookie', { get: function(){return false}, set: function(){return false}, configurable:false });
XSS界で有名なMarioさんのスライドで紹介されている http://www.slideshare.net/x00mario/locking-the-throneroom-20
XSS対策としてこのテクニックを使う場合
で、正規のメソッドからはdocument.cookieへの読み書きを許可しつつ、XSSがあった場合には禁止するというのは相当に難しい。あとObject.definePropertyが使えない古いブラウザだと動かないので、古いブラウザだと当然保護されないことになる。
document.cookieがfalse返すのは何か不具合起こす可能性もあるので空文字を返すようにして、ついでにnavigator.cookieEnabledもいじってやろう。こうすると、JavaScriptからはcookieが無効のブラウザであるかのように見える。
(function(){ try{ var e = function(){return ""}; var f = function(){return false}; Object.defineProperty(document, "cookie", { get: e, set: e, configurable:false }); Object.defineProperty(navigator, "cookieEnabled", { get: f, set: f, configurable:false }); } catch(e){ /* not supported */ } })();
Cookieが無効のブラウザであるかのように振舞うことで何が嬉しいかというと、実際にこのテクニックが有用と思われるケースがあったので、何件か調整したらあとで書く。