我正试图找出一种方法来清理从php进入sqlite的输入。我不能使用mysql。仅仅使用sqlite_escape_string还是我还需要做其他事情吗?我也只能使用sqlite2。
答案 0 :(得分:2)
避免SQL注入的最佳方法是强制使用参数化查询,永远不会通过字符串连接或变量插值手动组装SQL语句。
在PHP 5+上,您可以使用PDO,这是一个支持(其中包括)SQLite和参数查询的多数据库抽象层。
答案 1 :(得分:1)
转义函数确保转义SQL方言使用的特殊字符(主要是引号),以便插入/更新等工作。所有sqlite_escape_string都是单引号转义。
然后有人担心有人可以制作SQL注入。因为您使用的是v2,所以不能使用可以保护您的prepare和_bind()函数。
SQLite允许您链接由';'分隔的命令所以那里有一个问题。我建议你首先使用你编写的helper函数或使用sprintf仔细制作你的参数,并确保你正确地输入你的整数,浮点数和字符串。
你应该能够创建自己的转义函数来“逃避”你想要注意的事物......最具体的是分号,在你的查询结束时使用...... ESCAPE'\',假设你利用反斜杠作为转义字符。
然后您遇到有人故意插入恶意内容(XSS)的问题。 Grigor提供了一个解决方案 - 在字符串上使用htmlentities()。
答案 2 :(得分:0)
有一些方法,但这取决于您输入的目标,请参阅此问题以更好地理解它:What's the best method for sanitizing user input with PHP?
答案 3 :(得分:0)
sqlite_escape_string()
应该完成输入字符串所需的所有清理工作。至于输出它,如果输出为HTML,则在输出之前使用htmlspecialcharts()
。
答案 4 :(得分:0)
SQLite为此提供了sqlite_escape_string()
。但它仅适用于PHP 5。
尽管如此,单纯依靠这些方法并不能避免注射。一个必要的衡量标准是始终首先验证用户提供的输入,然后将其置于方法之前,您必须依赖 - 但实际上还没有创作。