我正在编写一个 web 应用程序,我正在考虑 sql 注入(inject)。 我已经创建了一个数据库类,它通过数组可以生成所有内容,而忘记了转义字符串。 该类(class)的工作方式如下:
$db->q(array(
'SELECT' => 'username',
'FROM' => USERS_TABLE,
'WHERE' => array('user_id' => 1)
));
在该函数 (db::q()) 中,我检查了在创建 sql 字符串并执行它之前必须检查的所有内容。
顺便说一下,我认为它并不是真正需要的。所以我在考虑只使用一个函数 request_var($name, 'POST'/'GET')
可以发送每个 $_POST 和 $_GET 变量并转义它们,这样我就可以使用:
$db->query("SELECT username FROM ".USERS_TABLE." WHERE user_id = 1");
.够了吗?我应该使用 db::q()
吗?我应该使用 request_var()
吗?我应该同时使用两者吗?
最佳答案
您需要确保使用适合您数据库的函数对字符串进行转义。例如,通过使用 pg_escape_string
在将字符串值插入数据库之前对其进行转义。
从您的代码片段来看,您似乎正在接受表名作为 GET/POST 的一部分?为什么你的前端需要知道你的数据库表?通常只有服务器端代码才需要此类知识。
关于php - 使用仅检查获取和发布变量的数据库类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107464/