插件文件开头需要清楚地使用多个403禁止的Header()函数

时间:2016-07-27 作者:Naresh Devineni

只需查看以下代码片段。我在正在阅读的一个插件中遇到了这个问题。

if ( ! defined( \'ABSPATH\' ) ) {
  header( \'Status: 403 Forbidden\' );
  header( \'HTTP/1.1 403 Forbidden\' );
  exit;
}
我知道此脚本正在向浏览器发送禁止的403标头响应,以进行未经授权的访问。但为什么是两个403头?第二种是对第一种的回退吗?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

发送状态的正确方式(当WordPress不可用时)是:

http_response_code( 403 );
请参见PHP Manual for its definition.

但在插件文件中,这永远不应该是文件头顶部的“默认”代码。请参见Worthwhile to restrict direct access of theme files?进行讨论。

在WordPress中,使用status_header( 403 ) 如果你需要的话。

关于您发布的代码的注释:

header( \'Status: 403 Forbidden\' );
header( \'HTTP/1.1 403 Forbidden\' );
第一行是对在CGI模式下运行的PHP的“特殊”处理,第二行是在不进行任何检查的情况下使用特定的HTTP协议版本。如果连接是通过HTTP 2或1.1进行的,那么这没有任何意义。

两者都是错误的,因为发送正确状态的正确方法是header() 正在使用该函数的第二个和第三个参数。

所以这会更好:

header( \'Status: 403 Forbidden\', true, 403 );
第二个参数告诉PHP用相同的名称覆盖其他标题,第三个参数用于实际状态。你发布的代码很好counter-示例:)