Так много вопросов в одном вопросе. Я бы порекомендовал вам разделить это. Кроме того, ваш вопрос очень широкий. Не лучший формат для качественного ответа, но вот оно.
1. Почему в XACML используется функция соответствия регулярному выражению?
На самом деле вы попадаете в нужное место: хорошо написанная политика управления доступом на основе атрибутов с использованием XACML, вероятно, не должна использовать регулярные выражения. Обычно вы используете регулярные выражения, когда значения атрибутов, которые вы используете для принятия решений, не нормализованы. Например, представьте, что вы хотите сопоставить номер телефона с Роли, Северная Каролина (код города 919). Вы бы использовали регулярное выражение (или, может быть, проще stringIsIn
). Но на самом деле вам следует сделать либо функцию, которая по номеру телефона возвращает код города, либо, что еще лучше, информация о политике, которая по номеру телефона возвращает город, которому он принадлежит.
Я пишу много политик для клиентов Axiomatics, и единственный раз, когда мне приходится использовать regexp-match, - это когда данные грязные и не нормализованы.
Еще один аргумент против использования regexp-match состоит в том, что это затрудняет понимание политик. Вы хотите, чтобы это было просто, например
Человек может просматривать медицинскую карту, если она принадлежит ему или если запись принадлежит иждивенцу.
Это значимое и понятное для человека. Регулярные выражения - нет.
В той же категории вы можете добавить селекторы атрибутов, эту возможность в XACML определять выражения XPath для извлечения информации из содержимого XML.
2. Парсеры XACML
По определению анализаторы XACML - это анализаторы XML, которые проверяют только структуру документа. Вот как работает синтаксический анализ XML. Вот как работает DTD (или XSD). Вы не получите предупреждения, если используете недопустимые значения. Например, в XACML, если вы используете поддельный тип данных, например bla: fake: NotBoolean, то простой синтаксический анализатор XML на схему XACML не будет жаловаться.
Вам нужна дополнительная логика для реализации. Я почти уверен, что движок SunXACML даст вам это. В качестве альтернативы будет работать движок Axiomatics. Он будет жаловаться на неизвестный тип данных, объединяющий алгоритм или функцию.
В любом случае ни один из парсеров не скажет вам, имеет ли смысл политика. Если вы напишете цель, которая говорит ›1 И a‹ 1 (этого никогда не произойдет), синтаксический анализатор не скажет вам, что существует недопустимое выражение. Это не недействительно с его точки зрения.
HerasAF довольно старый, если я правильно помню. Я бы попробовал любое из следующего:
- SunXACML (Java / Open Source / активно не поддерживается), мать всех реализаций
- ATT XACML Engine (Java / Open Source / new) новая реализация, написанная AT&T
- Сервер политики Axiomatics (Java & .Net / Closed Source - коммерческий / активный) коммерческое решение для ABAC и XACML (отказ от ответственности: я работаю там).
person
David Brossard
schedule
15.10.2015