Wordpress 如何向所有 SETCOOKIE() 函数添加 httponly 和 secure 标志?

问题描述 投票:0回答:2
我是 WordPress 新手。在一些插件的代码中,一些 setcookie() 函数已经设置了 HTTPOnly 和 Secure 标志,而一些 setcookie() 函数在代码中没有 HTTPOnly 或 secure 标志。

如何设置所有带有 HTTPOnly 和 Secure 标志的 setcookie() 函数,无论是否设置了 HTTPOnly 或 Secure 标志。

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

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

php wordpress apache cookies php-ini
2个回答
0
投票
据我所知,不可能为任何 cookie 预先设置 HTTPOnly - 不过可以为会话 cookie 设置它。

查看

PHP:SetCookie 文档

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

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


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

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

add_action( 'wp_loaded', 'add_httponly_to_my_cookies', 9999, 0 );
然后,在钩子函数中,使用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 代码需要放入插件或可能是

代码片段

© www.soinside.com 2019 - 2024. All rights reserved.