Skip to content

防火墙

slardar 支持拦截一些可能造成攻击的危险请求,例如启用了BlackPath的过滤器后,则会对相应的请求path进行拦截并返回。

内置过滤器

内置了几个常见的过滤器,主要有:

请求 path 黑名单

对配置的path进行拦截返回,支持配置:

yaml
slardar:
  firewall:
    black-path:
      enabled: true
      paths: /api/open/**

请求头参数限制

yaml
slardar:
  firewall:
    headers:
      enabled: true
      forbidden-names: 'X-my,X-time'

host 地址限制

yaml
slardar:
  firewall:
    hosts:
      enabled: true
      allowed-hosts: localhost,127.0.0.1

自定义实现

除了使用内置的防火墙过滤器,当然也支持自定义实现,自定义实现需要实现接口 SlardarFirewallHandler, 且注册为 spring bean, 如:

java
@Component
public class MyFirewallHandler implements SlardarFirewallHandler {

    /**
     * 执行校验
     *
     * @param request  请求对象
     * @param response 响应对象
     * @param context  上下文 用于在运行时获取bean等
     * @param params   预留扩展参数
     */
    @Override
    public void execute(HttpServletRequest request, HttpServletResponse response, SlardarContext context, Object params) throws SlardarException {
        Enumeration<String> parameterNames = request.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String parameterName = parameterNames.nextElement();
            if (parameterName.contains("xss")) {
                throw new SlardarException("参数key中包含敏感词!");
            }
        }
    }

    /**
     * 是否启用该 handler 默认true
     *
     * @return
     */
    @Override
    public boolean isEnabled() {
        // false : 不启用
        return true;
    }
}

启用后,一旦请求参数含有 xss 字符串,则返回错误信息:

json
{
  "message": "参数中包含敏感词!",
  "code": 500
}

Released under the MIT License.