我正在编写一个Web应用程序,我正在考虑sql注入。 我已经创建了一个数据库类,通过数组可以创建所有内容,忘记了转义字符串。 该课程的作品如下:
$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()
吗?我应该同时使用吗?
答案 0 :(得分:2)
您需要确保使用适用于您的数据库的函数来转义字符串。例如,在将字符串值插入数据库之前使用pg_escape_string
转义字符串值。
从您的代码段开始,您似乎接受表格名称作为GET / POST的一部分?为什么您的前端需要了解您的数据库表?这些知识通常只需要服务器端代码。
答案 1 :(得分:0)
根据我的经验,您不仅可以对所有POST / GET变量进行全面检查。我通常在创建查询时检查有几个原因: