2017-01-09 71 views
3

用户可以操纵php_sapi_name()返回的值吗?PHP:php_sapi_name()是否安全(用户可以操作它)?

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

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

// Do some admin stuff 

这个脚本只能通过从命令行调用。上面的代码安全吗?或者有人可以通过HTTP调用脚本并在if条件之外执行它?

+0

如果没有人应该直接通过HTTP访问该脚本,那么您应该将其放在http根文件夹之外。 – LorenzSchaef

+0

我知道这是最好的做法,但在这种情况下,这是不可能的。我将通过.htaccess拒绝访问,但即使.htaccess失败,我也希望100%安全,这就是为什么我要将代码放在那里的原因。 – Tream

回答

3

php_sapi_name()的返回值是安全依赖的。它不是从用户数据生成的。

如果你不想让它从你的web服务器被调用,你不应该让你的web服务器可以访问这个脚本。如果你关心安全,这个脚本根本无法访问。

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

+1

和函数的来源:https://github.com/php/php-src/blob/fa45f64bd87b62f655e6d99c1a088efa5772b5fe/ext/standard/info.c#L1326 –

相关问题