没有参数的SQL注入攻击的任何风险,但强制将用户输入限制为正则表达式[a- za -z][a- za - z0 -9]*

本文关键字:za 正则表达式 z0 输入 注入 攻击 SQL 参数 任何风 用户 | 更新日期: 2023-09-27 18:06:52

我正在使用实体框架与PostgreSQL。我需要编写如下格式的查询:

await Context.Database.ExecuteSqlCommandAsync("ALTER TABLE " + tableName + " ADD " + columnName + " " + sqlType);

如您所见,不幸的是,我需要使用用户输入表名、列名和该列的类型。不幸的是,PostgreSQL不支持这些类型的输入参数(例如,像SQL Server一样)。这里我没有别的选择只能像这样进行字符串连接。但是,我可以保证tableNamecolumnName都将使用正则表达式构造:

[a-zA-Z] [a-zA-Z0-9] *

换句话说,我强制它们只由小写字母、大写字母和数字组成。没有标点或其他特殊字符。至于sqlType,我可以保证这将是对应于该列类型的PostgreSQL类型的字符串(例如"int4", "numeric", "uuid"等)。它肯定不会是其他任何东西,因为我使用字典在。net类型和字符串格式的这些类型之间进行映射。

所以有人知道这是否仍然存在SQL注入攻击的风险?还有什么我能做的吗?

没有参数的SQL注入攻击的任何风险,但强制将用户输入限制为正则表达式[a- za -z][a- za - z0 -9]*

使用该正则表达式是安全的(因为它不包含任何Unicode字符&标点符号)。