Wordpress如何将httponly和安全标志添加到所有SETCOOKIE()函数中


Wordpress how to add httponly and secure flag to all SETCOOKIE() function?

我是wordpress的新手。在一些插件的代码中,一些setcookie()函数已经设置了HTTPOnly和Secure标志,而一些setcooie()函数在代码中没有HTTPOnly或Secure标志。

如何使用HTTPonly和Secure标志设置所有setcookie()函数,无论是否设置了HTTPonly或Secure标志。

如果我在.htaccess中应用代码将上述标志设置为TRUE,或者在index.php中使用ini_set(),或者在Apache配置中进行更改,这会影响我现有的Wordpress工作吗?

或者有谁有更好的解决方案?

据我所知,不可能仅为任何cookie预设HTTP-但可以为会话cookie设置HTTPOnly。

看看PHP:SetCookie文档

对于Secure bit,您的站点也需要通过SSL运行。对于HTTPOnly-如果任何脚本依赖于这些cookie中的值,则JS无法读取HTTPOnly cookie。

您可以编写自己的setSecureCookie()函数,该函数在内部调用setcookie()。。。但这是一个完整的代码重写。

这里有一种可能性。这取决于各种插件和其他代码在它们的init挂钩中设置cookie,而不是以后。可以在他们被发送之前拦截并修复他们。

为wp_loaded钩子编写一个钩子函数,并以较高的优先级安装它,以便它在该钩子上的其他函数之后运行。

add_action( 'wp_loaded', 'add_httponly_to_my_cookies', 9999, 0 );

然后,在hook函数中,使用php的头操作。这可能对你有用,但在投入生产之前,你应该仔细测试。

header()函数的第二个参数允许我们替换一个标头,而不是添加一个新的标头。

public function add_httponly_to_my_cookies() {
  if ( headers_sent() ) {
    /* darn! too late! cookies already sent. */
    return;
  }
  foreach ( headers_list() as $header ) {
    if ( 0 === stripos( $header, 'Set-Cookie:' ) ) {
      /* this header is a cookie! */
      if ( false === stripos( $header, 'HttpOnly' ) ) {
        /* no HttpOnly item, append it */
        $header .= '; HttpOnly';
        /* replace the cookie in the list of headers */
        header( $header, true );
      }
    }
  }
}

这个php代码需要进入一个插件,或者可能是一个代码片段。