我正在尝试编写一个面向对象的层来为NodeJS创建SQL查询,就像Zend的DB组件一样。所以我希望能够逃避价值观。是的,我知道参数化查询是理想的。但我想逃避的原因是:
自Zend使用它以来,我开始使用这种方法。我找到了为MySQL和PostgresSQL转义字符串的示例,但没有为Sqlite3找到任何内容。
我尝试跟踪PHP的Sqlite3::escapeString函数,最后在sqlite3.c,第19016行的sqlite3VXPrintf
结束,这是一个庞大的printf函数。我甚至不确定我应该在哪里结束。无论如何,我没有运气试图理解它:P
所以我希望有人可以给我更多关于如何做到这一点的指示。 我需要注意什么才能使我的逃避功能安全?为什么不用'
安全替换所有\\'
?我知道像二阶SQL注入这样的缺陷,但这仍然是因为有人忘了逃避某些事情。除非开发人员明确说“这是安全的”
虽然我对此有所了解,关于早期MySQL question中的解决方案,它看起来很简单(没有特殊情况?)。那是真的有它吗?假设unsafeinput 总是转义。 mysqli_real_escape_string转义为NUL(ASCII 0),\ n,\ r,\,',“和Control-Z。Sqlite3's documentation只提到单引号,但像NUL这样的某些字符看起来很腥。我可以随时随地了解更多相关信息?
PostgresSQL在libpq中的转义函数看起来似乎只是用转义引号替换引号。我想我只是确保这是可以的,因为我总是听到“使用参数化查询!”就像逃避功能一样无用。
TLDR : 我有两个主要问题