2017-02-16 80 views
0

Что у меня есть:Workflow консоли администратора не работает: Возможные CSRF нападение отметил

Alfresco Share v5.2.d (r134641-B15, Aikau 1.0.101.3, Spring Surf 5.2.d, весна WebScripts 6,13, Freemarker 2.3.20-под открытым небом, в заплатах, Rhino 1.7R4-под открытым небом, в заплатах, Yui 2.9.0-под открытым небом-20141223)

Alfresco Community v5.2.0 (r134428-b13) схема 10005

Я хочу использовать консоль администратора рабочего процесса. Консоль доступна по ссылке: http://....:8080/alfresco/s/admin/admin-workflowconsole

Я хотел бы иметь возможность просматривать все определения процесса, исключить определение процесса и т.д.

Например:

show definitions all 
undeploy definition ... 
use definition ... 

etc 

После получения доступа консоль я пытаюсь выполнить любую команду, но получить это исключение (копирование с экрана):

HTTP Status 500 - Possible CSRF attack noted when comparing token in session and request parameter. Request: POST /alfresco/s/admin/admin-workflowconsole 

type Exception report 

message Possible CSRF attack noted when comparing token in session and request parameter. Request: POST /alfresco/s/admin/admin-workflowconsole 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: Possible CSRF attack noted when comparing token in session and request parameter. Request: POST /alfresco/s/admin/admin-workflowconsole 
    org.springframework.extensions.webscripts.servlet.CSRFFilter$AssertTokenAction.run(CSRFFilter.java:845) 
    org.springframework.extensions.webscripts.servlet.CSRFFilter.doFilter(CSRFFilter.java:312) 
    org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:68) 

Как настроить рабочий процесс администрирования консоли?

То, что я пытаюсь сделать:

Как пишет Axel Faust,

Веб-клиент-безопасности config.xml имеет конфигурацию по умолчанию для сегмента CSRFPolicy и может быть переопределен с помощью файл web-scripts-config-custom.xml в пути alfresco/extension.

Таким образом, я создал файл web-scripts-config-custom.xml, затем добавляю к ней отсутствует правило и поместил его под траекторией /opt/alfresco-community/tomcat/shared/classes/alfresco/exten‌​sion:

<alfrescoco-config> 
    <config evaluator="string-compare" condition="CSRFPolicy" replace="true"> 
     <filter> 
     <rule> 
      <request> 
       <method>GET</method> 
       <path>/service/admin/.*</path> 
      </request> 
      <action name="generateToken"> 
       <param name="session">{token}</param> 
       <param name="cookie">{token}</param> 
      </action> 
     </rule> 
     <rule> 
      <request> 
       <method>GET</method> 
       <path>/s/admin/.*</path> 
      </request> 
      <action name="generateToken"> 
       <param name="session">{token}</param> 
       <param name="cookie">{token}</param> 
      </action> 
     </rule> 
     </filter> 
    </config> 
</alfresco-config> 

Это не работает ...

Я добавил полный конфигурация:

<alfresco-config> 

    <!-- 
     CSRF filter config to mitigate CSRF/Seasurfing/XSRF attacks 

     To disable the CSRF filter override the <filter> to not contain any values, for example: 
     <config evaluator="string-compare" condition="CSRFPolicy" replace="true"> 
      <filter/> 
     </config> 

     @since 5.2 
    --> 
    <config evaluator="string-compare" condition="CSRFPolicy"> 

     <!-- 
     Force creation of a Session when the filter matches a path - this should only be used when you are 
     confident the filtered part of the web application is using an authentication mechanism that will avoid 
     protected pages being accessed until the user is authenticated. Otherwise this would be a route to 
     a Session fixation attack. 
     --> 
     <session>true</session> 

     <!-- 
     Properties that may be used inside the rest of the CSRFPolicy config to avoid repetition but 
     also making it possible to provide different values in different environments. 
     I.e. Different "Referer" & "Origin" properties for test & production etc. 
     Reference a property using "{propertyName}". 
     --> 
     <properties> 

     <!-- There is normally no need to override this property --> 
     <token>alf-csrftoken</token> 

     <!-- 
      Override and set this property with a regexp that if you have placed Alfresco behind a proxy that 
      does not rewrite the Referer header. 
     --> 
     <referer></referer> 

     <!-- 
      Override and set this property with a regexp that if you have placed Alfresco behind a proxy that 
      does not rewrite the Origin header. 
     --> 
     <origin></origin> 
     </properties> 

     <!-- 
     Will be used and exposed to the client side code in Admin.CSRF 
     Use the Admin.CSRF.getHeader() or Admin.CSRF.getParameter() with Admin.CSRF.getToken() 
     to set the token in custom 3rd party code. 
     --> 
     <client> 
     <cookie>{token}</cookie> 
     <header>{token}</header> 
     <parameter>{token}</parameter> 
     </client> 

     <!-- The first rule with a matching request will get its action invoked, the remaining rules will be ignored. --> 
     <filter> 

     <!-- Refresh token on each new page visit --> 
     <rule> 
      <request> 
       <method>GET</method> 
       <path>/service/enterprise/admin/.*</path> 
      </request> 
      <action name="generateToken"> 
       <param name="session">{token}</param> 
       <param name="cookie">{token}</param> 
      </action> 
     </rule> 
     <rule> 
      <request> 
       <method>GET</method> 
       <path>/s/enterprise/admin/.*</path> 
      </request> 
      <action name="generateToken"> 
       <param name="session">{token}</param> 
       <param name="cookie">{token}</param> 
      </action> 
     </rule> 
     <rule> 
      <request> 
       <method>GET</method> 
       <path>/service/admin/.*</path> 
      </request> 
      <action name="generateToken"> 
       <param name="session">{token}</param> 
       <param name="cookie">{token}</param> 
      </action> 
     </rule> 
     <rule> 
      <request> 
       <method>GET</method> 
       <path>/s/admin/.*</path> 
      </request> 
      <action name="generateToken"> 
       <param name="session">{token}</param> 
       <param name="cookie">{token}</param> 
      </action> 
     </rule> 

     <!-- 
      Verify multipart requests contain the token as a parameter 
      and also correct referer & origin header if available 
     --> 
     <rule> 
      <request> 
       <method>POST</method> 
       <header name="Content-Type">multipart/.+</header> 
      </request> 
      <action name="assertToken"> 
       <param name="session">{token}</param> 
       <param name="parameter">{token}</param> 
      </action> 
      <action name="assertReferer"> 
       <param name="referer">{referer}</param> 
      </action> 
      <action name="assertOrigin"> 
       <param name="origin">{origin}</param> 
      </action> 
     </rule> 

     <!-- 
      Verify that all remaining state changing requests contain a token in the header and correct referer & origin headers 
      if available. We "catch" all content types since just setting it to "application/json.*" since a webscript that doesn't 
      require a json request body otherwise would be successfully executed using i.e."text/plain". 
     --> 
     <rule> 
      <request> 
       <method>POST|PUT|DELETE</method> 
      </request> 
      <action name="assertToken"> 
       <param name="session">{token}</param> 
       <param name="header">{token}</param> 
      </action> 
      <action name="assertReferer"> 
       <param name="referer">{referer}</param> 
      </action> 
      <action name="assertOrigin"> 
       <param name="origin">{origin}</param> 
      </action> 
     </rule> 
     </filter> 

    </config> 

</alfresco-config> 

Это не работает ...

Как описано here, я добавил к web.xml следующее:

<filter-mapping> 
     <filter-name>CSRF Token Filter</filter-name> 
     <url-pattern>/service/admin/*</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
     <filter-name>CSRF Token Filter</filter-name> 
     <url-pattern>/s/admin/*</url-pattern> 
    </filter-mapping> 

Это не работает ...

Я попытался отключить CSRF фильтр следующим образом:

<alfresco-config> 
    <config evaluator="string-compare" condition="CSRFPolicy" replace="true"> 
     <filter/> 
    </config> 
</alfresco-config> 

Это не работает ...

Как настроить консоль администратора рабочего процесса?

Я был бы очень признателен за информацию. Спасибо всем.

+0

смотрите эту ссылку сообщества https://community.alfresco.com/thread/228162-hitting-csrf-when-trying-to-use-the-workflow -admin-console – vikash

+0

Большое спасибо за комментарий, Аксель Фауст уже указал на этот пост. Я уже прочитал его, но в моей конфигурации я не нашел файл 'web-scripts-config-custom.xml'. Вместо этого я использовал 'web-client-security-config.xml' и добавил к нему отсутствующее правило. –

+0

Этот файл я скопировал из '/ opt/alfresco-community/tomcat/webapps/alfresco/WEB-INF/classes/alfresco' и поместил его (с добавленным правилом) в папку'/opt/alfresco-community/tomcat/shared/classes/alfresco/extension', затем переделан, но старый файл 'web-client-security-config.xml' остался в'/webapps/'. Затем я добавил свой 'web-client-security-config.xml' в'/opt/alfresco-community/tomcat/shared/classes/alfresco/', но это не помогло. Какую конфигурацию я должен использовать и где ее разместить? .. –

ответ

2

Наконец, я нашел ошибку! ..

Вместо того web-scripts-config-custom.xml я создал web-script-config-custom.xml. Я пропустил письмо «s '

Теперь все в порядке.

Большое спасибо, Axel Faust! ..