PHP&;HTTP身份验证-使用筛选器_输入获取登录名和密码
我试图使用filter_输入从PHP中的HTTP身份验证中检索用户登录名和密码,但是我得到了PHP_AUTH_用户和PHP_AUTH_PW的空值。我做了一个测试:PHP&;HTTP身份验证-使用筛选器_输入获取登录名和密码,php,http-authentication,Php,Http Authentication,我试图使用filter_输入从PHP中的HTTP身份验证中检索用户登录名和密码,但是我得到了PHP_AUTH_用户和PHP_AUTH_PW的空值。我做了一个测试: $phpAuthUserFV = filter_input(INPUT_SERVER, 'PHP_AUTH_USER'); // gives null $phpAuthUser = $_SERVER['PHP_AUTH_USER']; // gives the user login entered $remoteAddr = fi
$phpAuthUserFV = filter_input(INPUT_SERVER, 'PHP_AUTH_USER');
// gives null
$phpAuthUser = $_SERVER['PHP_AUTH_USER'];
// gives the user login entered
$remoteAddr = filter_input(INPUT_SERVER, 'REMOTE_ADDR');
// gives the remote address
$phpSelf = filter_input(INPUT_SERVER, 'PHP_SELF');
// gives the PHP_SELF value
使用PHP5.5.5和5.3.3进行测试
我错过什么了吗?我只是想知道,为什么这两个$\u服务器密钥的filter\u输入失败,但可以与其他密钥一起使用。虽然这并不能直接回答您的问题-因为似乎存在一些错误-一个不错的解决方法是:
$phpAuthUser = filter_var($_SERVER['PHP_AUTH_USER']);
PHP_AUTH_USER是USER AUTH属性,因此如果没有$\u SERVER var,它将永远无法检索。查看此注释:@Ramesh,我使用PHP作为模块,但无论如何都尝试了注释中的代码。似乎REQUEST_TIME_FLOAT和REQUEST_TIME也是不可访问的——它们是PHP_self之后的最后一个键,已经有一个相关的bug
filter_input(input_SERVER,'PHP_AUTH_USER')
实际上应该从$\u服务器变量获取值,并使用默认过滤器对其进行额外过滤。这是问题所在。但是对于PHPJAuthServer,它不会调用$$Server,因为它把它看作是真实的参数,并且在FieldI~输入中跳过它,这似乎是代码< > FieldItInPoT()/<代码>中的一个缺陷。让我感到奇怪的是,有些东西可以通过超级全局服务器访问,而不是通过通常更安全的filter\u input()
。我也找不到这种行为的有效原因。好吧,这是可行的,但需要检查变量是否存在,或者使用@来避免注意。请不要使用@。只需执行:$phpAuthUser=(isset($\u服务器['PHP\u AUTH\u用户])?过滤器变量($\u服务器['PHP\u AUTH\u用户]):null)“@”是万恶之源。。