从Apache mod_authn_dbd获取环境变量中的其他字段

时间:2016-09-29 05:49:58

标签: php mysql apache authentication

在提到的apache 2.4 文档中,当使用mod_authn_dbd进行身份验证时,可以从db表中获取其他列:

  

如果httpd是针对APR 1.3.0或更高版本构建的,则查询语句返回的第一行中的任何其他列值将存储为名称格式为AUTHENTICATE_COLUMN的环境变量。

但是,例如“phpinfo”的输出不显示其他环境变量。

我们使用

  

openSUSE - 13.2(x86_64)

     

apache2 - 2.4.10-28.1

     

APR的-util1-DBD-MySQL的

的MySQL表:

CREATE TABLE IF NOT EXISTS `USERS` (
  `USER` varchar(20) NOT NULL,
  `PASSWORD` varchar(150) NOT NULL,
  `KUNDE` varchar(20) NOT NULL,
  `TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `REMOTE_IP` varchar(15) NOT NULL,
  `CLIENT_IP` varchar(15) NOT NULL,
  PRIMARY KEY (`USER`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Apache配置:

# mod_dbd configuration
DBDriver mysql
DBDParams "host=127.0.0.1 dbname=Auth port=3306 user=Auth pass=XXXXXXXX"
DBDMin  2
DBDKeep 4
DBDMax  10
DBDExptime 60

Alias /test2/ "/path/test2/"
<Directory "/path/test2/">
    Options Indexes
    AllowOverride All
    require ip 192.168.xxx.0/24 10.xxx.xxx.0/24
</Directory>

<Directory "/path/test2/secure">
  AuthType Basic
  AuthName "Test"
  AuthBasicProvider socache dbd
  AuthnCacheProvideFor dbd
  AuthnCacheContext Test
  AuthnCacheTimeout 60
  AuthDBDUserPWQuery "SELECT PASSWORD FROM USERS WHERE USER = %s"
</Directory>

也许有人可以提供帮助并知道如何使用它。

感谢。

1 个答案:

答案 0 :(得分:0)

也许是因为您的查询中没有其他列?试试例子

AuthDBDUserPWQuery "SELECT KUNDE, PASSWORD FROM USERS WHERE USER = %s"

请注意,这种方法并非真正安全,因为您似乎存储了纯文本密码。