我已经使用大量公共代码组装了一个 FiveM 服务器,并发现那里存在允许用户破坏或删除底层数据库的作弊系统。原因是他们可以注入包含 DROP、DELETE INSERT 和 UPDATE 的 Lua 脚本,并且如果他们知道架构可能会做任何他们喜欢的事情。
我的意图是拒绝访问除 SELECT 之外的所有命令,并将所有其他逻辑移至存储过程。问题是执行 proc 的用户将是游戏用户帐户,如果被锁定也会被服务器端阻止?我是否能够拒绝来自调用应用程序的访问,但允许从存储过程中进行访问,或者让 procs 作为与正常 SELECT 语句不同的帐户执行?是否还有其他可行的考虑或设计?我将在所有调用中使用参数来帮助防止注入,但我对 MySQL 还很陌生,所以想知道人们针对这些场景采取了哪些其他步骤。