PHP: php_sapi_name() 函数安全吗?(用户能否操纵它)?

7

用户能否操作php_sapi_name()返回的值?

我有一个脚本,看起来像这样:

if( php_sapi_name() !== "cli" ){
   die( "NoAccess" );
}

// Do some admin stuff

这段脚本应该仅仅(!)通过命令行调用。上面的代码是安全的吗?或者有人可以通过HTTP调用这个脚本并在if条件之外执行它吗?


如果没有人应该通过HTTP直接访问此脚本,则应将其放置在http根文件夹之外。 - LorenzSchaef
我知道这样做是最佳实践,但在这种情况下不可能。我将通过 .htaccess 拒绝访问,但即使 .htaccess 失效,我也希望能够百分之百地安全,这就是为什么我想把代码放在那里的原因。 - Tream
1个回答

4

php_sapi_name()的返回值是安全可靠的,不会受到用户数据的影响。

如果您不希望该脚本被Web服务器调用,那么您不应该将其放在Web服务器上。如果您关心安全性,那么该脚本根本不应该被访问。

您还提到了.htaccess...不要使用它,请在其他地方使用适当的配置文件。.htaccess必须为每个请求加载和解析,这是不高效的。


1
函数的源代码:https://github.com/php/php-src/blob/fa45f64bd87b62f655e6d99c1a088efa5772b5fe/ext/standard/info.c#L1326 - Jared Farrish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接