end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

javascript? http cookie の httponly 属性を考える → 必要なcookieにのみ付けるべき

以前は、cookieのhttponly 属性に対し、うるさく言われることはありませんでしたが、 最近は、cookieのhttponly 属性を使用していない場合、セキュリティリスクの一つとして、 指摘されます。

ただ、httponly 属性のあるcookieは、javascriptから参照できなくなる為、非常に不便。

なので、必要なcookieにのみ付けるように。

以下、試した perl cgi script。

httponlyの有無により、javascriptからの参照可否を確認できます

#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Cookie;
use Data::Dumper;

main();

sub main {
    my $cgi = CGI->new();

    my $cookie_1 = CGI::Cookie->new(-name    =>  'key_1',
                                    -value   =>  'val_1',
                                    -httponly=>  0);
    my $cookie_2 = CGI::Cookie->new(-name    =>  'key_2',
                                    -value   =>  'val_2',
                                    -httponly=>  1);

    
    print CGI::header(-type=>'text/html',-charset=>'UTF-8',
                      -cookie=>[$cookie_1,$cookie_2]);
    print html_src();
}


sub html_src {

    my $html_src =<<EOF;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script>
function get_cookie(){
  alert( 'cookie_1=' + \$.cookie('key_1') );
  alert( 'cookie_2=' + \$.cookie('key_2') );
}
</script>
</head>
<body>
<button type="button" onClick="get_cookie();">GET COOKIE</button>
</body>
</html>
EOF
}