用户可以操纵php_sapi_name()返回的值吗?PHP:php_sapi_name()是否安全(用户可以操作它)?
我有一个脚本,看起来像这样:(!)
if(php_sapi_name() !== "cli"){
die("NoAccess");
}
// Do some admin stuff
这个脚本只能通过从命令行调用。上面的代码安全吗?或者有人可以通过HTTP调用脚本并在if条件之外执行它?
用户可以操纵php_sapi_name()返回的值吗?PHP:php_sapi_name()是否安全(用户可以操作它)?
我有一个脚本,看起来像这样:(!)
if(php_sapi_name() !== "cli"){
die("NoAccess");
}
// Do some admin stuff
这个脚本只能通过从命令行调用。上面的代码安全吗?或者有人可以通过HTTP调用脚本并在if条件之外执行它?
php_sapi_name()
的返回值是安全依赖的。它不是从用户数据生成的。
如果你不想让它从你的web服务器被调用,你不应该让你的web服务器可以访问这个脚本。如果你关心安全,这个脚本根本无法访问。
你也提到了.htaccess
......不要使用它,在其他地方使用适当的配置文件。必须为每个请求加载和解析.htaccess
,这是不高效的。
和函数的来源:https://github.com/php/php-src/blob/fa45f64bd87b62f655e6d99c1a088efa5772b5fe/ext/standard/info.c#L1326 –
如果没有人应该直接通过HTTP访问该脚本,那么您应该将其放在http根文件夹之外。 – LorenzSchaef
我知道这是最好的做法,但在这种情况下,这是不可能的。我将通过.htaccess拒绝访问,但即使.htaccess失败,我也希望100%安全,这就是为什么我要将代码放在那里的原因。 – Tream