C++ 正确保护编辑控件不受SQL注入和无意义字符的影响 导言和有关资料:

C++ 正确保护编辑控件不受SQL注入和无意义字符的影响 导言和有关资料:,c++,winapi,sql-injection,subclassing,editcontrol,C++,Winapi,Sql Injection,Subclassing,Editcontrol,我有一个编辑控件,用户应该在其中输入公司名称。编辑控件可识别区域设置 问题: 我希望适当地保护它免受SQL注入攻击和用户输入无意义字符 我为解决这个问题所做的努力: 我想在子类化过程中丢弃冒号和分号以响应WM_CHAR,并再次执行验证以响应EN_CHANGE。如果出现问题,我会通知用户并禁用“保存”按钮 因为我的应用程序是区域设置感知的,所以我需要区域设置感知的函数来测试输入字符 到目前为止,我已经找到了和似乎是地区意识(我的英语不是最好的,所以可能我误读了MSDN文档,我为此道歉) 我也在这里

我有一个编辑控件,用户应该在其中输入公司名称。编辑控件可识别区域设置

问题: 我希望适当地保护它免受
SQL注入
攻击和用户输入无意义字符

我为解决这个问题所做的努力: 我想在子类化过程中丢弃冒号和分号以响应
WM_CHAR
,并再次执行验证以响应
EN_CHANGE
。如果出现问题,我会通知用户并禁用“保存”按钮

因为我的应用程序是区域设置感知的,所以我需要区域设置感知的函数来测试输入字符

到目前为止,我已经找到了和似乎是地区意识(我的英语不是最好的,所以可能我误读了MSDN文档,我为此道歉)

我也在这里搜索过类似的问题,但没有找到

问题: 放弃分号只会起作用,还是我需要考虑其他字符

我是否在子类化+
EN_CHANGE
的“正确轨道”上,还是有更好的方法来实现这一点?如果有,你能告诉我正确的方向吗

多谢各位


致以最诚挚的问候。

SQL注入攻击仅在使用用户输入动态创建SQL语句时发生,而没有先验证/转义输入。不要动态创建SQL语句!使用参数化查询或存储过程,则根本没有SQL注入的风险。

我使用
ADO
命令对象执行参数化查询。我想知道我是否应该限制用户输入中的一些字符,以便更安全?一些不合逻辑的,比如
%
。。。根据你的回答,我认为我已经“安全了”,所以我很感兴趣的是无效的字符限制是否能给我带来更大的安全?谢谢你的回答。向上投票。顺致敬意,参数化查询将为您处理该问题。像
这样的字符
%
是完全安全的,并且不会破坏SQL,因为查询参数将为您处理必要的转义。对于其他字符(如外语字符),SQL可能会因错误而失败,或者更可能的是,根据数据库/字段的配置字符集,这些字符将被转换为其他字符。如果要保留用户的输入,应为数据库使用Unicode字符集,并使用Unicode字符串提交参数值。