As a Roblox developer, it is currently pretty scary to insert any types of free models into Studio. Even if I’m just looking for an old SpecialMesh, I always run the risk of inserting something that contains a malicious server-sided backdoor. While I personally am aware of these risks and know to screen anything I insert, I also imagine that many Roblox developers aren’t, considering the amount of times backdoors like this are used to cause significant harm to games created by smaller groups.
require(id)
has already been under fire from members of the community and Roblox staff for this exact reason. While I previously defended require(id)
even for closed-source modules, I didn’t see the amount of damage being done with this feature at the time.
As far as I’m aware, require(id)
is a feature that is only rarely used legitimately by developers. While it does have its uses, in cases where it is useful, this should be a setting that is manually enabled by the developer. Allowing third-party code to be loaded into the game at runtime should be a conscious decision made by the developer.
Sending HTTP requests via HttpService is already disabled by default, and Studio provides a setting that has to be manually enabled for scripts to be able to send these requests:
I suggest we have a similar switch, defaulting to “off”, that allows us to choose whether modules can be required by ID in our games. If this runs too big of a risk of breaking existing games, the setting should default to “on” for any existing games and to “off” for any new games.
Alternatively, this setting could specifically limit third-party modules, i.e. modules not created by the user or group that created the game.
If Roblox is able to address this issue, it would improve my development experience because I could be confident that the only scripts being run in my game are the ones I can actually see. I know that a single script with one well-hidden line of code isn’t going to side-load a huge package containing admin commands and weapons granted to players in my game for paying some third party.