xlawrence    2005/08/08 10:21:17 CEST

  Modified files:
    core/src/java/org/jahia/ajax AjaxServlet.java 
  Log:
  Added security check to prevent malicious use of the AJAX servlet
  
  Revision  Changes    Path
  1.2       +32 -20    jahia/core/src/java/org/jahia/ajax/AjaxServlet.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/ajax/AjaxServlet.java.diff?r1=1.1&r2=1.2&f=h
  
  
  
  Index: AjaxServlet.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/ajax/AjaxServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AjaxServlet.java  5 Aug 2005 13:50:38 -0000       1.1
  +++ AjaxServlet.java  8 Aug 2005 08:21:16 -0000       1.2
  @@ -47,7 +47,6 @@
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
   import org.jahia.bin.Jahia;
  -import org.jahia.content.ContentPageKey;
   import org.jahia.data.beans.ActionURIBean;
   import org.jahia.data.beans.ContainerBean;
   import org.jahia.data.beans.ContainerListBean;
  @@ -64,9 +63,9 @@
   import org.jahia.params.ProcessingContext;
   import org.jahia.params.ProcessingContextFactory;
   import org.jahia.registries.ServicesRegistry;
  -import org.jahia.resourcebundle.JahiaResourceBundle;
  -import org.jahia.services.pages.ContentPage;
  +import org.jahia.services.acl.JahiaBaseACL;
   import org.jahia.services.pages.JahiaPage;
  +import org.jahia.services.usermanager.JahiaUser;
   import org.jahia.services.version.EntryLoadRequest;
   import org.springframework.beans.factory.BeanFactory;
   
  @@ -134,6 +133,33 @@
               final HttpServletResponse response )
       throws IOException, ServletException {
           try {
  +            // Create the ProcessingContext
  +            final BeanFactory bf = Jahia.getConfigBeanFactory();
  +            final ProcessingContextFactory pcf = (ProcessingContextFactory) 
bf.
  +                    getBean(ProcessingContextFactory.class.getName());
  +            final ProcessingContext jParams = pcf.getContext(request, 
response,
  +                    super.getServletContext());
  +            
  +            final JahiaPage currentPage = jParams.getPage();
  +            final JahiaUser currentUser = jParams.getUser();
  +                    
  +            if (currentUser != null && currentPage != null &&
  +                    currentPage.getACL().getPermission(currentUser, 
JahiaBaseACL.WRITE_RIGHTS)) {
  +                jParams.setOpMode(jParams.EDIT);
  +                
  +            } else {
  +                logger.warn("Unauthorized attempt to use AJAX Servlet");
  +                response.setStatus(response.SC_FORBIDDEN);
  +                response.sendError(response.SC_FORBIDDEN, 
  +                        "Must be logged in and have 'Write' access");
  +                return;
  +            }
  +            
  +            logger.debug("jParams: pid = " + currentPage.getID() + ", user = 
" +
  +                    currentUser.getName() + ", mode = " +
  +                    jParams.getOperationMode() + ", SessionID = " +
  +                    jParams.getSessionID());
  +            
               final String objectType = getParameter(request, response, TYPE);
               if (objectType == null) return;
               
  @@ -152,21 +178,7 @@
               
               logger.debug("processRequest: objectType=" + objectType + ", 
objectID="+
                       objectID + ", definitionID=" + definitionID + ", 
parentID=" +
  -                    parentID + ", pageID=" + pageID);
  -            
  -            // Create the ProcessingContext
  -            final BeanFactory bf = Jahia.getConfigBeanFactory();
  -            final ProcessingContextFactory pcf = (ProcessingContextFactory) 
bf.
  -                    getBean(ProcessingContextFactory.class.getName());
  -            final ProcessingContext jParams = pcf.getContext(request, 
response, 
  -                    super.getServletContext());
  -            
  -            jParams.setOpMode(jParams.EDIT);
  -            
  -            logger.debug("jParams: pid = " + jParams.getPageID() + ", user = 
" +
  -                    jParams.getUser().getName() + ", mode = " + 
  -                    jParams.getOperationMode () + ", SessionID = " + 
  -                    jParams.getSessionID());
  +                    parentID + ", pageID=" + pageID);   
               
               // The unique contentObject ID
               final int objID = Integer.parseInt(objectID);
  @@ -181,7 +193,7 @@
               
               // Action Menu for a page
               if (PageBean.TYPE.equals(objectType)) {
  -                bean = new PageBean(jParams.getPage(), jParams);
  +                bean = new PageBean(currentPage, jParams);
                   logger.debug("PageID: " + bean.getID());
                   
               // Action Menu for a ContainerList
  @@ -327,7 +339,7 @@
               final ProcessingContext jParams) throws JahiaException {
           final GuiBean gui = new GuiBean(jParams);
           final HTMLToolBox box = new HTMLToolBox(gui, jParams);
  -        final HashMap result = new HashMap();
  +        final Map result = new HashMap();
           
           final Map objectInfo = (Map)objectKeyToInfo.get(
                   box.buildUniqueContentID(bean));
  

Reply via email to