关于内网多线路自动负载均衡时,token如何校验IP,以保证token合法有效

原创
05/11 16:10
阅读数 119

背景

多数网站token做验证时一般都会与登录ip绑定,当用户切换IP时就会失效,则需要重新登录。那么问题来了,像一些学校和企业会有多条线路如移动、电信、联通、多IP时,在网络通信中会自动切换IP,如果不改变验证策略,那么就会出现用户,每隔一会就要重新登录了,这大大地影响网站体验。有人可能会说用cookie不就好了,对当然也可以,但安全会降低一些。

方案

所以,我们把这一组IP都放在后端判断下,属于这个组时就也验证通过。但这对业务有入侵。今天就讲下另外一种应用层的方案,重写IP,假设ip有 

1.1.1.1, 1.1.1.2, 1.1.1.3 我们把它们都当作1.1.1.3就可以了,简单粗暴迅速。

代码

这里因为我有使用cdn且用的是nginx,所以直接在http_realip_module模块中实现重写,7行代码就完成了

static ngx_int_t
ngx_http_realip_handler(ngx_http_request_t *r)
{
    u_char                      *p;
    size_t                       len;
    ngx_str_t                   *value;
    ngx_uint_t                   i, hash;
    ngx_addr_t                   addr;
    ngx_array_t                 *xfwd;
    ngx_list_part_t             *part;
    ngx_table_elt_t             *header;
    ngx_connection_t            *c;
    ngx_http_realip_ctx_t       *ctx;
    ngx_http_realip_loc_conf_t  *rlcf;

    /*           add             */
	char Host[256];
	const char *fmt_base = "%.*s";
	snprintf((char*) Host, sizeof(Host), fmt_base, r->connection->addr_text.len,
			r->connection->addr_text.data);
	if (!strcmp(Host, "1.1.1.1") || !strcmp(Host, "1.1.1.2")) {
		ngx_str_t strr = ngx_string("1.1.1.2");
		r->connection->addr_text = strr;
	}
	  /*        add             */

    rlcf = ngx_http_get_module_loc_conf(r, ngx_http_realip_module);

proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

修改成如下即可
proxy_set_header   X-Forwarded-For $remote_addr;

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部