I reviewed some docs for CSRF protection / mitigation

https://nightlies.apache.org/wicket/guide/9.x/single.html#_csrf_protection

https://nightlies.apache.org/wicket/apidocs/9.x/org/apache/wicket/protocol/http/CsrfPreventionRequestCycleListener.html

URL encryption may cause some issues and hence, I'd defer that. Then that accordingly CsrfPreventionRequestCycleListener:

Prevents CSRF attacks on Wicket components by checking the Origin and Referer HTTP headers for cross domain requests. By default only checks requests that try to perform an action on a component, such as a form submit, or link click.

It seemed adequate for the purpose. However, if instead that I'd like to implement a token based approach

https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html

would such an approach implement the token based strategy? :

public class MyForm extends StatelessForm<Void> {

    HiddenField<String> hiddenField;

    public MyForm(String id) {
        super(id);

        String csrftoken = getCsrfToken();
        hiddenField = new HiddenField<>("csrf", Model.of(csrftoken));
        add(hiddenField);

    }

    @Override
    protected void onSubmit() {

        String csrftoken = getCsrfToken();
        if ( ! hiddenField.getDefaultModelObjectAsString().equals(csrftoken)) {
            error("invalid CSRF token, update denied");
            return;
        }

        // ...
    }


    private String getCsrfToken() {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(getSession().getId().getBytes()); //generate CSRF token from session ID
            return Base64.getEncoder().encodeToString(md5.digest());

        } catch (NoSuchAlgorithmException e) {
            return Base64.getEncoder().encodeToString(getSession().getId().getBytes());
        }

    }

}

Thanks much in advance.



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to