Client -> Server
In the early days of Roblox there was practically no security which is why people used to create "anti-exploit" scripts to try and detect when someone was doing something they should not. This practice is now redundant mainly down to FE.
FE will stop the replication of most local changes (Animations and character physics are some which are allowed) and the server would just ignore the change. If filtering was turned off the server would receive this change and then replicate this to all the players in the game.
When FE is on it has a very beneficial side effect to game developers by keeping changes made by the client within the client. Previously we would have to use local parts to gain this kind of behavior but FE acts in a similar way. Using FE is now the standard way to create local parts and effects which is widely used by game ddevelopers.
Server -> Client
FE does not change the relationship at all between the server -> client. Changes made by the server need to be replicated and are "safe" to replicate to all of the player in the game.
The server cannot access things that the client "owns" ie their mouse, user settings and other local only services. Though there may be cases where input is replicated ie click detectors (which now work with FE) and vehicle seats.
So "server cannot make changes to the client" is both true and false
Requests
So how do we "ask" the server or client to do something? We use remote events and functions dependent upon our needs. These work in a similar to bindables except this will send and receive requests to the server and client.
Secure value
With FE you can practically place object values anywhere withing your game that replicates to the client since it will effectively become read only to the client. That being said, if the client does not need the data put it where its safe in server storage better still do not use a value holder and store data in a script.
I hope this helps. Please comment if you do not understand any parts or think I have missed any info out.
1 comment
With FilteringEnabled, the client cannot make changes to the server. So if you set a part color to yellow from a LOCALScript, only you can see that change, while other players in the server will see the part normally. If you change it from a normal script, everyone can see the change.