2

我试图找出一种方法来清理从 php 进入 sqlite 的输入。我不能使用mysql。简单地使用 sqlite_escape_string 就足够了,还是我需要做其他事情?我也只能使用 sqlite2。

4

5 回答 5

2

避免 SQL 注入的最好方法是强制使用参数查询,并且永远不要通过字符串连接或变量插值手动组装 SQL 语句

在 PHP 5+ 上,您可以使用 PDO,这是一个支持(以及其他)SQLite 和参数查询的多数据库抽象层。

于 2011-08-15T20:42:35.277 回答
1

转义函数确保 SQL 方言使用的特殊字符(主要是引号)被转义,以便您的插入/更新等工作。所有 sqlite_escape_string 所做的就是转义单引号。

然后有一个实质性的担忧,即有人可以制作 SQL 注入。因为您使用的是 v2,所以您不能使用可以保护您的 prepare 和 _bind() 函数。

SQLite 允许您链接由 ';' 分隔的命令 所以那里有一个问题。我建议您首先使用您编写的辅助函数或使用 sprintf 仔细设计您的参数,并确保您正确地输入您的整数、浮点数和字符串。

您应该能够创建自己的转义函数来“转义”您想要注意的事情......最特别是分号,在查询末尾使用 ... ESCAPE '\' ,假设您使用反斜杠作为你的逃生角色。

然后你就会遇到有人故意插入恶意内容 (XSS) 的问题。Grigor 提供了一种解决方案——在你的字符串上使用 htmlentities() 。

于 2011-08-15T21:10:11.237 回答
0

有很多方法,但这取决于您输入的目标,请参阅此问题以更好地理解它:What's the best method for sanitizing user input with PHP?

于 2011-08-15T20:40:44.990 回答
0

sqlite_escape_string()应该完成输入字符串所需的所有清理工作。至于输出,如果是输出成HTML,那么htmlspecialcharts()在输出之前使用它。

于 2011-08-15T20:40:47.680 回答
0

SQLitesqlite_escape_string()为此提供。不过,它仅适用于 PHP 5。

但是,仅仅依靠这些方法并不能使您免于注射。一个必要的措施是始终首先验证用户提供的输入,在将其置于方法之前,您必须依赖 - 但实际上还没有创作。

于 2011-08-15T20:41:20.763 回答