Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\在运行CGI的主机上删除了服务器变量_Php_Cgi - Fatal编程技术网

Php $\在运行CGI的主机上删除了服务器变量

Php $\在运行CGI的主机上删除了服务器变量,php,cgi,Php,Cgi,变量$\u SERVER['PHP\u AUTH\u USER']和$\u SERVER['PHP\u AUTH\u PW']返回为空,因为我的主机设置(在CGI界面上运行)。是否有任何工作,让他们工作,因为我需要使用他们的身份验证。我无法移动主机或更改界面 我正在通过curl向url/api/projects/发送身份验证请求。。。 它由modrewrite解释,然后根据规则进行处理 当我在运行MAMP的本地主机上尝试此操作时,或者使用其他主机时,它工作正常(不使用CGI接口),但在需要运行它

变量$\u SERVER['PHP\u AUTH\u USER']和$\u SERVER['PHP\u AUTH\u PW']返回为空,因为我的主机设置(在CGI界面上运行)。是否有任何工作,让他们工作,因为我需要使用他们的身份验证。我无法移动主机或更改界面

我正在通过curl向url/api/projects/发送身份验证请求。。。 它由modrewrite解释,然后根据规则进行处理

当我在运行MAMP的本地主机上尝试此操作时,或者使用其他主机时,它工作正常(不使用CGI接口),但在需要运行它的服务器上,变量被删除


有人能帮我吗?

根据手册,只有当PHP作为Apache模块运行时,这些变量才可用

您可以尝试与主机提供商联系,看看他们是否可以在CGI发送请求时向您提供这些信息。

根据,这两个变量在CGI模式下不可用

PHP中的HTTP身份验证挂钩仅在作为Apache模块运行时可用,因此在CGI版本中不可用


不过,请深入研究用户提供的笔记。有许多人声称已经成功地解决了这些问题,例如。也许值得一看。

如果是为了自动使用,根本不需要使用HTTP auth。只需发送一个秘密令牌作为凭据

http://example.com/service.php?auth=A235BDA74456CC3

默认情况下,Apache web服务器会阻止CGI应用程序的
HTTP\u AUTHORIZATION
环境变量,这是PHP用来填充
PHP\u AUTH\u USER
/
PASS
的。可以通过使用设置的标志重新编译Apache来关闭此行为

“安全漏洞”是指共享服务器上的任何其他用户都可以看到使用您的站点进行身份验证的用户的密码。这是否真的是你的安全漏洞取决于你;通常不会

如果您使用的是cheapo共享服务器,则很可能无法重新编译Apache

你知道有没有可能使用类似于这里的工作环境

是的,如果您有
mod_rewrite
可用,它应该可以。(关于它可能是一个“安全漏洞”的警告仍然适用。)

然而,它是丑陋的,并且使部署复杂化。给出的示例脚本也存在一些问题(使用
explode
会丢弃密码中的任何
字符,并且
echo
s未正确使用
htmlspecialchars()
会引入XSS漏洞。)

这种胡说八道是HTTP身份验证越来越不受欢迎的原因之一。大多数站点部署基于表单/cookie的身份验证。对于API,您通常会拥有自己的基于令牌的身份验证,而不是依赖于基本身份验证。

请检查


关于这一点的讨论和详细的解决方法。

我应该检查一下。不幸的是,他们可以;我不能把它们提供给我。您知道是否可以使用类似于此处的工作环境:这实际上取决于您可以使用哪些环境变量。一个起点可能是
print\r($\u SERVER)
并检查CGI向您提供了什么。通过添加:RewriteCond%{HTTP:Authorization}^(.*)RewriteRule^(.*)-[E=HTTP\u Authorization:%1]我已经使PHP\u AUTH\u PW&PHP\u AUTH\u用户对我可用,这似乎还可以。到一半了!只需要内部服务器请求即可工作!可以使用远程地址处理内部请求?如果REMOTE_ADDR是您正在运行的服务器的ip地址,那么您可以假定它是一个内部请求。这确实会带来安全问题,因为与您在同一台服务器上的人可能会发出看起来是内部的请求。啊,好的,我将对此进行研究。这是否意味着我可以在一个目录的脚本中使用curl来在另一个目录中使用api。远程地址将在哪里使用?发送还是接收?对不起,我问了这么多的问题,我在我的头!这个问题解决了一半,谢谢。出于某种原因,现在它可以从外部位置访问它,即:从我的本地主机,我可以调用api并获得响应。但是从服务器到另一个目录中的api失败了!奇怪!我会继续找的!我不能重新编译,但我有修改可用。到目前为止,我已经使用了这个方法,它似乎是有效的:RewriteCond%{HTTP:Authorization}^(.*)RewriteRule^(.*)-[E=HTTP\u Authorization:%1]如果我能以某种方式让它以不同的目录向自己的API发送请求,我将被编造出来!:D谢谢你详细的回答。现在很有道理了