通过SSL管理

为了轻松通过SSL启用(并执行)WordPress管理,您可以在网站中定义两个常数wp-config.php文件。在插件文件中定义这些常数是不够的。它们必须在您的wp-config.php文件。您还必须已经在服务器上配置了SSL,并且在网站与设置为true的这些常数正常工作之前,为安全服务器配置了(虚拟)主机。

笔记:force_ssl_login被弃用版本4.0。请使用force_ssl_admin。

强制SSL登录SSL管理员访问

可以在wp-config.php文件中将常量的force_ssl_admin设置为true以强制所有登录所有管理会议都会通过SSL进行。

顶部↑

例子

define('force_ssl_admin',true);

顶部↑

使用反向代理

如果WordPress托管在提供SSL但没有SSL的反向代理后面,则这些选项最初将将任何请求发送到无限的重定向循环中。为了避免这种情况,您可以配置WordPress以识别HTTP_X_FORWARDED_PROTO标头(假设您已正确配置了反向代理以设置该标头)。

顶部↑

例子

define('force_ssl_admin',true);//在某些设置中,http_x_forwarded_proto可能包含//逗号分隔列表,例如http,https //因此,请检查是否存在https存在,如果($ _ server ['http_x_forwarded_proto'],'https')!== false)$ _server ['https''https'] ='on'on'on';

顶部↑

更多信息

本文的其余部分用作信息,以防您使用旧版本的WordPress(理想情况下您不应该!),否则您的SSL设置有些不同(即,您的SSL证书适用于不同的域)。

有时,您希望整个WP-Admin使用HTTPS协议在安全连接上运行。从概念上讲,该过程是这样的:

  1. 设置两个具有相同URL(博客URL)的虚拟主机,一个安全,另一个不是。
  2. 在安全的虚拟主机上,设置一个重写规则,该规则将所有非WP-ADMIN流量驶向不安全站点。
  3. 在不安全的虚拟主机上,设置一个重写规则,该规则将所有流量驶向WP-ADMIN到安全主机。
  4. 放入过滤器(通过插件)中,该过滤器过滤WP-ADMIN中的链接,以便一旦激活,将重写管理链接以使用HTTPS,并编辑Cookie仅在加密的连接上工作。

下面的指南是使用httpd.conf中的重写规则(与.htaccess文件相对)中的重写规则,适用于WordPress 1.5和Apache运行mod_rewrite,但可以轻松修改以适合其他托管场景。

顶部↑

虚拟主机

除了非安全站点外,您还需要为安全服务器配置的(虚拟)主机。在此示例中,安全虚拟主机使用相同DocumentRoot作为不安全的主人。假设您可以使用带有不同名称的主机,例如wpadmin.mysite.com,并将文档root链接到WPADMIN目录。

请要求您的ISP为您设置安全的虚拟主机,或者如果您拥有自己的管理访问权限。注意您不能使用基于名称的虚拟托管来识别不同的SSL服务器

顶部↑

重写不安全主机的规则

在httpd.conf中的.htaccess或虚拟主机stanza中,当您浏览http://mysite.com/wp-admin/或http:// mysite时,将此重写规则添加到自动转到安全主机.com/wp-login.php

这应该在主WordPress重写块上方。

rewriteCond%{the_request} ^[a-z] {3,9} \/(。\ .php)https://mysite.com% {request_uri}%{query_string} [r = 301,qsa,l]

如果您使用的是永久链接重写规则,则必须在此行之前重写 ^。*$ - [s = 40]

该块中的一个重要想法是使用the_request,它可以确保仅重写实际的HTTP请求,而不是本地直接文件请求,例如inclage或fopen。

顶部↑

重写安全主机的规则(可选)

这些重写规则是可选的。他们通过安全连接禁用对公共站点的访问。如果您希望使用以下插件登录网站的公共部分,则必须不是添加这些规则,因为该插件可以通过未加密的连接禁用cookie。

安全虚拟主机应在.htaccess文件或虚拟主机声明中具有两个重写规则(请参阅使用永久链接有关重写的更多信息):

重写! ^/wp -admin/(。

第一条规则将WP-Admin目录排除在下一个规则之外,该规则将到达安全站点的流量调整到了不安全的站点,以使您的受众保持良好和无缝。

顶部↑

设置WordPress URI

为了某些插件工作,雷竞技出于其他原因,您可能希望通过制作此设置https://mysite.com将WordPress URI设置为反映HTTPS协议的选项。您的博客地址不应改变。

顶部↑

示例配置节

注意:下面的配置与WordPress 2.8+不兼容,WordPress 2.8使用了WP-rudes文件夹中的某些文件。第一组重写规则引入的重定向可能会引起某些用户的安全警告。看https://core.trac.www.kotonoha369.com/ticket/10079了解更多信息。

 ServerName www.mysite.com SSLEngine On SSLCertificateFile /etc/apache2/ssl/thissite.crt SSLCertificateKeyFile /etc/apache2/ssl/thissite.pem SetEnvIf User-Agent ".*MSIE。)http://www.mysite.com/qul 1 [qsa,l]  ... #insecure site  servername www.mysite www.mysite.com document root/var/var/var/www/www/ii/mysite<目录/var/www/ii/mysite>  repriteEngine on RewriteBase/rewriteCond%{request_filename} -f [or] rewriteCond%{requewriteCond%{request_filename} -d rewriterule ^rewriterule ^rewriterule ^wp -admin/(//www.mysite.com/wp-admin/qul $ 1 [c] rewriterule ^。*$  -  [s = 40] rewriterule ^feed/(feed | rdf | rss | rss | rss2 | atom)/?$/index.php?&feed = $ 1 [QSA,l] ...   ... 

顶部↑

重写登录和注册

将SSL用于用户登录和注册可能是一个好主意。考虑以下替代重写。

不安全
重写 ^/wp-(admin |登录|寄存器)(。
安全的
重写!^/wp-(admin |登录|寄存器)(。*) -  [c]

顶部↑

重写在端口443或端口80上运行的站点

#开始wordpress 在rewriteBase /#上rewriteEngine在端口443上运行的站点或否则(SSL上的http)rewriteCond%{server_port}!^80 $ repriterule!。} -f [or] rewriteCond%{request_filename} -d rewriterule ^wp-(admin | login |登记|寄存器)(。} ^80 $ rewriteCond%{request_filename}!-f rewriteCond%{request_filename}!/index.php [l] 

顶部↑

概括

此方法确实如此不是修复一些固有的安全风险在WordPress中,它也不保护您免受中间人的攻击或其他可能削弱安全连接的风险。

但是,这个应该使恶意人更难偷走您的饼干和/或身份验证标题,并使用它们来模仿您并获得WP-Admin。它还混淆了嗅探您的内容的能力,这对于可能需要严格保护的文件草案的法律博客可能很重要。

顶部↑

确认

在作者的服务器上,日志表明GET和发布请求都超过SSL,并且在不安全主机上使用WP-ADMIN的所有流量都将其穿梭到安全的主机上。

示例邮政日志行:

[THU APR 28 09:34:33 2005] [INFO]后续(第5号)https请求为儿童6(服务器foo.com:443)xx.xxx.xxx.xxx.xxx--- [28/apr/2005:2005:09:34:33 -0500]“ post/wp-admin/post.php http/1.1” 302-“ https://foo.com/wp-admin/post.php?acti on = edit&post = edit&post = 71”/5.0(Windows; U; Windows NT 5.1; EN-US; RV:1.7.7)壁虎/20050414 Firefox/1.0.3“

最好使用数据包嗅探器和一些硬核网络分析工具进行更多测试,这将有助于确认。

顶部↑

限制

The author assumes (but hasn’t checked) that if the user has stored cookies/told their browser to remember passwords (not based on form fields but if using certain external auth mechanism) and hits http://www.mysite.com/wp-admin/, those packets are sent in the clear and the cookie/auth headers could be intercepted. Therefore, to ensure maximum security, the user should explicitly use the https host or always log in at the beginning of new sessions.

本文是否有帮助?如何改进?