I have chewed on the same question, and presently I am planning on using an active integrity engine.
My basic idea so far is this:
1) Have a bit of JavaScript in Construct that uses the Document.InnerHtml to get all of the end user source and or at least the c2runtime.js code and wrap it up into a hash and ship it back to my server to be compared with what the c2runtime source Hash should be.
2) If the client either fails to respond to the integrity engine in the appropriate time frame or responds with a bad (e.g. modified) c2runtime hash, then the server will nullify their session and instruct the client to kick them off of the game with an error message and a customer support email to contact.
It definitely requires an active server to constantly process the hashes, which we already have up and running, but some people may not.
As far as actual data protection, anything on the server is safe.