作为如何在 C# 中保护用户指定的表名免受 SQL 注入的扩展,使用 MySQL,我试图弄清楚如何保护用户指定的表查询免受 SQL 注入:
string createEventSQL = "INSERT INTO " + TableNameFromUser +
" (" + TableColumnNames + ") " +
"VALUES(" + ParametrizedTableColumnParams + ")";
需要明确的是:我很想使用预定义的库来参数化 input,但我找不到一个。
我不希望额外的查询(例如SHOW TABLES LIKE @TableNameFromUser;
)来保护这一点,因为性能是一个问题。
在我看来,许多人声称不可能做出 100% 安全的解决方案,但这对我来说没有意义,因为诉诸参数化应该与自己完成所有工作一样“不安全” . 本质上,我只想复制MySQL 连接器会做的事情,如果它支持参数化的表名。
我对 SQL 还不是很有经验,但到目前为止,我发现我需要:
还有什么可以防止 SQL 注入?