Package: libapache-request-perl Version: 1.33-1 Severity: wishlist As best I can tell Apache::Cookie has no direct way to add the HttpOnly flag to the cookies it sets. Although browser support for this feature is still spotty, it is a useful measure to limit the impact of cross-site scripting attacks in supported browsers. http://msdn.microsoft.com/workshop/author/dhtml/httponly_cookies.asp provides some info on the intended syntax and support.
Thanks, Robert Stone
diff -Naur libapache-request-perl-1.33.old/c/apache_cookie.c libapache-request-perl-1.33/c/apache_cookie.c --- libapache-request-perl-1.33.old/c/apache_cookie.c 2004-11-26 15:02:03.000000000 -0800 +++ libapache-request-perl-1.33/c/apache_cookie.c 2007-02-21 15:42:01.924134177 -0800 @@ -59,6 +59,14 @@ } retval = c->secure ? "on" : ""; break; + case 'h': + if(val) { + c->httponly = + !strcaseEQ(val, "off") && + !strcaseEQ(val, "0"); + } + retval = c->httponly ? "on" : ""; + break; default: ap_log_rerror(APC_ERROR, "[libapreq] unknown cookie pair: `%s' => `%s'", key, val); @@ -78,6 +86,7 @@ c->r = r; c->values = ap_make_array(r->pool, 1, sizeof(char *)); c->secure = 0; + c->httponly = 0; c->name = c->expires = NULL; c->domain = NULL; @@ -201,6 +210,9 @@ if (c->secure) { cookie_push_arr(values, "secure"); } + if(c->httponly) { + cookie_push_arr(values, "HttpOnly"); + } cookie = ap_pstrcat(p, escape_url(p, c->name), "=", NULL); for (i=0; i<c->values->nelts; i++) { diff -Naur libapache-request-perl-1.33.old/c/apache_cookie.h libapache-request-perl-1.33/c/apache_cookie.h --- libapache-request-perl-1.33.old/c/apache_cookie.h 2004-11-26 15:02:03.000000000 -0800 +++ libapache-request-perl-1.33/c/apache_cookie.h 2007-02-21 15:45:47.076077858 -0800 @@ -29,6 +29,7 @@ char *expires; char *path; int secure; + int httponly; } ApacheCookie; #ifdef __cplusplus diff -Naur libapache-request-perl-1.33.old/Cookie/Cookie.pm libapache-request-perl-1.33/Cookie/Cookie.pm --- libapache-request-perl-1.33.old/Cookie/Cookie.pm 2004-11-26 15:02:04.000000000 -0800 +++ libapache-request-perl-1.33/Cookie/Cookie.pm 2007-02-21 17:27:45.176540603 -0800 @@ -146,6 +146,13 @@ my $secure = $cookie->secure; $cookie->secure(1); +=head2 httponly + +Get or set the HttpOnly flag for the cookie: + + my $HttpOnly = $cookie->httponly; + $cookie->httponly(1); + =back =head1 CAVEATS diff -Naur libapache-request-perl-1.33.old/Cookie/Cookie.xs libapache-request-perl-1.33/Cookie/Cookie.xs --- libapache-request-perl-1.33.old/Cookie/Cookie.xs 2004-12-06 06:49:46.000000000 -0800 +++ libapache-request-perl-1.33/Cookie/Cookie.xs 2007-02-21 17:28:25.687726275 -0800 @@ -130,6 +130,9 @@ #define ApacheCookie_secure(c, val) \ ApacheCookie_attr(c, "secure", val) +#define ApacheCookie_httponly(c, val) \ +ApacheCookie_attr(c, "httponly", val) + MODULE = Apache::Cookie PACKAGE = Apache::Cookie PREFIX = ApacheCookie_ PROTOTYPES: DISABLE @@ -297,6 +300,11 @@ Apache::Cookie c char *val +char * +ApacheCookie_httponly(c, val=NULL) + Apache::Cookie c + char *val + void ApacheCookie_bake(c) Apache::Cookie c diff -Naur libapache-request-perl-1.33.old/libapreq.pod libapache-request-perl-1.33/libapreq.pod --- libapache-request-perl-1.33.old/libapreq.pod 2004-11-26 15:02:04.000000000 -0800 +++ libapache-request-perl-1.33/libapreq.pod 2007-02-21 17:26:16.902210826 -0800 @@ -243,6 +243,12 @@ of I<On> or I<Off>. The default is I<Off>. +=item -httponly + +Sets the I<HttpOnly> field to true or false using a given string value +of I<On> or I<Off>. +The default is I<Off>. + =back Example: