绑定Apache信息

在apache的使用中,如果是一个apache代理服务器,并且使用的证书的话, 我们不可避免的需要将从前端和证书中的信息传递给后端处理。 一般情况下,我们都是将这些信息绑定在http头中,cookie项中,这样后端比较容易处理。

幸运的是,apache为我们提供了这么一个可选函数,可以任何的一个模块中获取 你需要的信息。 这个可选函数是在模块 mod_nw_ssl 中定义。 >APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);

可选函数

[apache 可选函数原理]()

可选函数实现

声明

APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup,                        
 ​                        (apr_pool_t *,  server_rec *,                        
 ​                        conn_rec *, request_rec *,                        
 ​                        char *));

实现

char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, char *var)

注册

APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);

获取

static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *pfn_ssl_lookup = NULL; pfn_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);

调用

if (pfn_ssl_lookup) {
  	server_rec *s = r->server ? r->server : c->base_server; 
  	value = pfn_ssl_lookup(pool, s, c, r, var);
}

信息绑定原理

可查询信息

  • http 头中的信息
  • ssl 的参数,和对应使用的用户证书的各项内容。
  • 连接 socket 的各项参数- 格式化的各种时间
  • 保存在 r->notes 中的的环境变量- 如何找不到 key 对应的 value,则返回空字符串。

如何防止假冒参数

? 如果用户服务器里面有一个与网关相同的参数,你会怎么处理?

  • 用下划线替换假冒URL参数名的第一个字符