We encovered this prior to a big release, it can be easily missed, even if Meteor warns us not to use “profile” and it is like this because of historical reasons.
I believe the way this section was added at the very bottom of the Security page allows it to be overlooked very easily.
I went through the Security page before going live with our app and actually did not notice this on there. I looked again just now and do see it on the checklist at the very bottom, just doesn’t seem very obvious there. At least compared to the rest of the security page.
Agreed - perhaps we should remove this feature entirely in whatever next release makes sense, and somehow print a warning when people try to write to that field.
Would it be appropriate to user profile:{} as an additional store for complex or extensive application state data? Would doing so with schemas attached to the field prevent security concerns?
I still use the profile object today, but always disable updates from the client. So if I want to update something say “isUserAdmin”, I do that with a method on the server called with the right permissions from the client using Alanning Roles package. Just make sure you disable client updates on the profile object. Disabling it all together as suggested is not entirely a bad idea.