Я оцениваю движки PDP и в данный момент даю попытку AuthzForce Core . Оценка запроса со стороны PDP до сих пор проходит довольно хорошо:
//My request and pdp configuration files
File confLocation = new File("D:/docs/XACML/AuthZForce/IIA001/pdp.xml");//pdp.xml tells the pdp where the policies xml files are
File requestFile = new File("D:/docs/XACML/AuthZForce/IIA001/Request.xml");
//I instantiate the pdp engine and the xacml parser
final PdpEngineConfiguration pdpEngineConf = PdpEngineConfiguration.getInstance(confLocation, null, null);
PdpEngineInoutAdapter<Request, Response> pdp = PdpEngineAdapters.newXacmlJaxbInoutAdapter(pdpEngineConf);
XmlUtils.XmlnsFilteringParser xacmlParserFactory = XacmlJaxbParsingUtils.getXacmlParserFactory(false).getInstance();
//I parse the request file
Object request = xacmlParserFactory.parse(requestFile.toURI().toURL());
if (request instanceof Request) {
//At this point I could access all request attributes or alter them
//I let the PDP evaluate the request
Response response = pdp.evaluate((Request) request);
//I check the results inside the response
for (Result result : response.getResults()) {
if (result.getDecision() == DecisionType.PERMIT) {
//it's permitted!
} else {
//denied!
}
}
}
Теперь, согласно литературе вроде [1] Я не должен доверять атрибутам в данном файле запроса-xacml. Когда это возможно, я должен проверять у поставщика атрибутов (например, базы данных пациентов), действительно ли данные атрибуты (например, дата рождения пациента) действительно принадлежат пациенту, чтобы предотвратить атаки.
В противном случае злоумышленник может сделать пациента моложе в Запросе, чтобы получить доступ к записи пациента в качестве опекуна родителя.
Вопросы
- Является ли проверка запросов у поставщиков атрибутов задачей PDP или другого пользователя?
- Определил ли OASIS что-то конкретное по этому вопросу? Например. рабочий процесс или синтаксис файлов конфигурации
- Есть ли способ заставить мой pdp-механизм узнать о поставщиках атрибутов?
- Должен ли я самостоятельно проверить предоставленный запрос до
Response response = pdp.evaluate((Request) request);
?