gpt4 book ai didi

php - 如何在 Symfony2 中创建 IP 黑名单?

转载 作者:可可西里 更新时间:2023-10-31 23:08:53 27 4
gpt4 key购买 nike

是的,我知道有 Voter tutorial in cookbook .但我正在寻找稍微不同的东西。我需要两层不同的黑名单:

  1. 拒绝某些 IP 访问整个网站
  2. 拒绝某些IP登录

我写了 Voter 检查用户的 IP 是否在数据库中。对于第一种情况,我编写了一个内核监听器来检查每个请求并在遇到被禁止的用户时抛出 403:

if (VoterInterface::ACCESS_DENIED === $this->voter->vote($token, $this, array())) {
throw new AccessDeniedHttpException('Blacklisted, punk!');
}

第一个问题出在VoterInterface本身,这迫使我使用 TokenInterface $token,在这种情况下我并不真正需要它。但我想这并不重要。接下来是我实际上不得不使用 AccessDeniedHttpException作为AccessDeniedException总是试图将我重定向到登录页面,并在这种情况下导致无休止的重定向循环。我会接受它,因为它在 dev 环境中工作得很好,但是当我切换到 prod 时,我不断收到 503,并在 prod 日志中显示以下内容:

[2011-11-21 20:54:04] security.INFO: Populated SecurityContext with an anonymous Token [] []

[2011-11-21 20:54:04] request.ERROR: Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: Blacklisted, punk! (uncaught exception) at xxx line 28 [] []

[2011-11-21 20:54:04] request.ERROR: Exception thrown when handling an exception (Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: Blacklisted, punk!) [] []

根据我的阅读,这可能是 xdebug 的问题,但即使我将其关闭也会发生。我还尝试了 vanilla \Exception 并且它做了同样的事情。任何人都知道为什么会发生?或者对于这种列入黑名单的案例,也许还有其他解决方案。

此外,我不知道如何解决第二种情况,因为我不知道如何在用户获得 token 分配之前停止用户。我当前的解决方案是处理 InteractiveLoginEvent ,检查用户是否被列入黑名单,如果是,则删除他的 token 。它似乎不是一个安全的,我对它不太满意。那么,知道如何解决这个问题吗?我想我只是错过了一些明显的“预登录事件”。

最佳答案

要拒绝访问整个网站,您可以调整用于保护开发环境的白名单代码。在 app.php 中粘贴类似这样的内容:

if (in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '1.2.3.4',))) {
header('HTTP/1.0 403 Forbidden');
exit('You are not allowed to access this site.');
}

关于php - 如何在 Symfony2 中创建 IP 黑名单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8218259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com