2013-10-03 3 views
1

В моем Symfony 2.3.1 Security YML у меня есть эта строка.Symfony2 Secure by IP не работает

security.yml

access_control: 
    - { path: ^/mysecurearea, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 0.0.0.0 } 

Исходя из этого: http://symfony.com/doc/current/book/security.html

я был под впечатлением, что этот маршрут и маршруты, как это, например,/mysecurearea/что-то должно быть доступно только для запроса от IP 0.0.0.0

Проблема в том, что я все еще могу получить к ней доступ.

Любые идеи?

+0

Вы зарегистрированы при попытке получить доступ к mysecurearea? – 0x1gene

+0

Нет. Я выяснил, в чем проблема, но я подожду пару дней и посмотрю, найдет ли кто-нибудь другой ответ. Затем я могу дать им баллы, отметив их ответ как правильный. – Adi

+0

Вы очистили свой кеш? Что находится в разделе брандмауэров? –

ответ

5

Итак, все, что я хотел сделать, - это остановить людей от доступа к области, если у них нет действительного IP-адреса. То, что я не совсем понял, было то, что access_control может давать только роли, а не запрещать доступ. (Имеет смысл в ретроспективе.)

- { path: ^/mysecurearea, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 0.0.0.0 } 
    - { path: ^/mysecurearea, roles: ROLE_NO_ACCESS } 

Так добиться того, что я искал, мне нужно, чтобы добавить дополнительную строку выше. ROLE_NO_ACCESS фактически не существует. Вам просто нужно добавить туда какой-нибудь текст, который будет описательным, и обратите внимание на действительную роль. Поскольку это не действительная роль, запросчик больше не может получить доступ к этой области. Это немного взломанный, но для моих целей он отлично работает.

+0

Если я использую это решение, я всегда получаю «ERR_TOO_MANY_REDIRECTS» с правилом брандмауэра ('login_path:/login use_forward: false'). Что я могу сделать? – lony

+0

Он предполагает, что там, где они попадают, недоступен и для этого пользователя. например Когда Symfony не может соответствовать области, она перенаправляет/перенаправляет пользователя на страницу входа. Таким образом, если он не может соответствовать для страницы входа в систему, то он попадет в бесконечный цикл. Является ли анонимным пользователем доступ к странице входа? – Adi

+0

Нет полного входа в систему только для определенных IP-адресов. Как я могу это исправить? Этот логин и все ограничения показывают «не найденный», если он вызывается из не разрешенного IP-адреса, а во-вторых, если он является правильным ip, человек, обращающийся к запрещенным областям, перенаправляется на логин, как обычно. – lony

3

У моего security.yml были некоторые записи по умолчанию, которые каким-то образом заставляли его игнорировать правила IP. У меня нет функций входа в систему, поэтому мой пример использования довольно прост.

Вот вся моя security.yml, что работает для меня в Symfony 2.3.6:

security: 
    firewalls: 
     anonymous: 
      anonymous: ~ 

    providers: 
     in_memory: 
      memory: 

    access_control: 
     - { path: ^/foo, roles: IS_AUTHENTICATED_ANONYMOUSLY, ips: [127.0.0.1, ::1] } 
     - { path: ^/foo, roles: ROLE_NO_ACCESS } 

Просто измените ^/foo путь и список IP-адресов.

Смежные вопросы