如何清理ODBC数据库输入?

时间:2011-06-01 07:44:46

标签: mysql delphi odbc sanitization input-sanitization

我目前使用MySql,但更喜欢ODBC解决方案,以便将来证明。

如何在将用户输入传递到ODBC数据库之前对其进行清理?

而且,当我在它的时候,我用双引号括起我的字符串,例如“INSERT INTO VALUES(description)”“` - 但如果文本本身包含双引号怎么办?

4 个答案:

答案 0 :(得分:8)

尝试使用参数化的SQL语句

像这样。

INSERT INTO MyTable (Field1,Field2) VALUES (:Param1,:Param2)

查看embarcadero上的这篇文章,了解有关如何使用参数Using Parameters in Queries.

的更多信息

答案 1 :(得分:8)

  1. ODBC不是使用MySQL的最佳方式。即使您将来需要支持少量DBMS,也可以考虑多DBMS数据访问库,包括dbExpress(Delphi附带)和3d party - AnyDAC(商业),ZeosLib(免费软件)等。
  2. 如果您需要将字符串常量替换为MySQL查询,则需要esacape the special characters或将字符串转换为hexadecimal representation。这可以保护您免受SQL注入和语法错误的影响。但是使您的查询准备工作更加复杂。
  3. 最好的方法 - 使用参数并提交文字作为参数值。这很简单,也很安全。

答案 2 :(得分:3)

如果可以,请使用hibernate,也许通过delphi的RMI。虽然它以java为中心,但它几乎完全将程序员与底层数据库隔离开来,并处理你提到的问题以及更多问题。

顺便说一句,为了回答你的问题重新引用,保存一个包含双引号的值,将它们作为加倍的双引号转义,例如

This is "my" text

将保存为

"This is ""my"" text"

答案 3 :(得分:3)

你也可以看看Delphi - prevent against SQL injection,有一些迹象/例子。