Hm, that would be better, but there is a problem with some of the
actions (DeleteAction,AbstractPropChangeAction,ResetVersionsAction). The
CSRF check should only be done before the actual modification, and those
actions conditionally do other things, like redirecting to confirmation
page if confirm=0 etc.
It might be a good idea to do it the way you suggested for most of the
actions and treat the rest as exceptions though. I need to take a closer
look.
Thanks,
Alex
On 09/23/2010 08:36 AM, Vincent Massol wrote:
> Hi Alex,
>
> Couldn't we add the check in some Abstract<XXX>XWikiAction where <XXX>
> qualifies actions that modify data in order to prevent code duplication and
> in order to prevent forgetting to do the check when people add new actions
> (at least make it easier)?
>
> Thanks
> -Vincent
>
> On Sep 22, 2010, at 11:00 PM, abusenius (SVN) wrote:
>
>> Author: abusenius
>> Date: 2010-09-22 23:00:46 +0200 (Wed, 22 Sep 2010)
>> New Revision: 31271
>>
>> Modified:
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/AbstractPropChangeAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/CommentAddAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAttachmentAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteVersionsAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ObjectAddAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ObjectRemoveAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/PropAddAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/PropUpdateAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/RegisterAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ResetVersionsAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/RollbackAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SaveAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SaveAndContinueAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/UndeleteAction.java
>>
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/UploadAction.java
>> Log:
>> XWIKI-5464: Added CSRF checks to all actions that modify data
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/AbstractPropChangeAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/AbstractPropChangeAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/AbstractPropChangeAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -55,6 +55,10 @@
>> BaseClass xclass = doc.getXClass();
>>
>> if (propertyName != null && xclass.get(propertyName) != null) {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> changePropertyDefinition(xclass, propertyName, context);
>> } else {
>> return true;
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/CommentAddAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/CommentAddAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/CommentAddAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -54,6 +54,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWiki xwiki = context.getWiki();
>> XWikiResponse response = context.getResponse();
>> XWikiDocument doc = context.getDoc();
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -55,6 +55,10 @@
>> if (!"1".equals(request.getParameter(CONFIRM_PARAM))) {
>> return true;
>> }
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>>
>> String sindex = request.getParameter("id");
>> if (sindex != null && xwiki.hasRecycleBin(context)) {
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAttachmentAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAttachmentAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAttachmentAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -46,6 +46,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWikiRequest request = context.getRequest();
>> XWikiResponse response = context.getResponse();
>> XWikiDocument doc = context.getDoc();
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteVersionsAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteVersionsAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteVersionsAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -40,21 +40,24 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> DeleteVersionsForm form = (DeleteVersionsForm) context.getForm();
>> -
>> if (!form.isConfirmed()) {
>> return true;
>> }
>>
>> Version v1;
>> Version v2;
>> - Version rev = form.getRev();
>> - if (rev == null) {
>> + if (form.getRev() == null) {
>> v1 = form.getRev1();
>> v2 = form.getRev2();
>> } else {
>> - v1 = rev;
>> - v2 = rev;
>> + v1 = form.getRev();
>> + v2 = form.getRev();
>> }
>>
>> if (v1 != null && v2 != null) {
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ObjectAddAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ObjectAddAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ObjectAddAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -39,6 +39,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWiki xwiki = context.getWiki();
>> XWikiResponse response = context.getResponse();
>> String username = context.getUser();
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ObjectRemoveAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ObjectRemoveAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ObjectRemoveAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -66,6 +66,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWiki xwiki = context.getWiki();
>> XWikiResponse response = context.getResponse();
>> String username = context.getUser();
>> @@ -74,6 +79,7 @@
>> if (obj == null) {
>> return true;
>> }
>> +
>> doc.removeObject(obj);
>> doc.setAuthor(username);
>> xwiki.saveDocument(doc,
>> context.getMessageTool().get("core.comment.deleteObject"), true, context);
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/PropAddAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/PropAddAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/PropAddAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -37,6 +37,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWiki xwiki = context.getWiki();
>> XWikiResponse response = context.getResponse();
>> XWikiDocument doc = context.getDoc();
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/PropUpdateAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/PropUpdateAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/PropUpdateAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -105,6 +105,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> try {
>> if (propUpdate(context)) {
>> return true;
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/RegisterAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/RegisterAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/RegisterAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -50,6 +50,11 @@
>>
>> String register = request.getParameter(REGISTER);
>> if (register != null && register.equals("1")) {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> int useemail =
>> xwiki.getXWikiPreferenceAsInt("use_email_verification", 0, context);
>> int result;
>> if (useemail == 1) {
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ResetVersionsAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ResetVersionsAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ResetVersionsAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -17,6 +17,11 @@
>>
>> String confirm = request.getParameter("confirm");
>> if ((confirm != null) && (confirm.equals("1"))) {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWikiDocument tdoc = getTranslatedDocument(doc, language,
>> context);
>> // Do it
>> tdoc.resetArchive(context);
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/RollbackAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/RollbackAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/RollbackAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -30,6 +30,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWiki xwiki = context.getWiki();
>> XWikiResponse response = context.getResponse();
>> XWikiDocument doc = context.getDoc();
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SaveAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SaveAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SaveAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -176,6 +176,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> if (save(context)) {
>> return true;
>> }
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SaveAndContinueAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SaveAndContinueAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SaveAndContinueAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -43,6 +43,11 @@
>> */
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> // Try to find the URL of the edit page which we came from
>> String back = findBackURL(context);
>>
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/UndeleteAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/UndeleteAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/UndeleteAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -42,6 +42,11 @@
>> @Override
>> public boolean action(XWikiContext context) throws XWikiException
>> {
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWiki xwiki = context.getWiki();
>> XWikiRequest request = context.getRequest();
>> XWikiResponse response = context.getResponse();
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/UploadAction.java
>> ===================================================================
>> ---
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/UploadAction.java
>> 2010-09-22 21:00:42 UTC (rev 31270)
>> +++
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/UploadAction.java
>> 2010-09-22 21:00:46 UTC (rev 31271)
>> @@ -80,6 +80,11 @@
>> }
>> }
>>
>> + // CSRF prevention
>> + if (!csrfTokenCheck(context)) {
>> + return false;
>> + }
>> +
>> XWikiDocument doc = (XWikiDocument) context.getDoc().clone();
>>
>> // The document is saved for each attachment in the group.
>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs