使用db类只检查get和post变量?

时间:2010-11-05 15:38:05

标签: php sql mysql

我正在编写一个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()吗?我应该同时使用吗?

2 个答案:

答案 0 :(得分:2)

您需要确保使用适用于您的数据库的函数来转义字符串。例如,在将字符串值插入数据库之前使用pg_escape_string转义字符串值。

从您的代码段开始,您似乎接受表格名称作为GET / POST的一部分?为什么您的前端需要了解您的数据库表?这些知识通常只需要服务器端代码。

答案 1 :(得分:0)

根据我的经验,您不仅可以对所有POST / GET变量进行全面检查。我通常在创建查询时检查有几个原因:

  1. 没有多余的开销,假设它没有进入那个时间的查询
  2. 当我知道它进入哪个列(验证整数,字符串,浮点数等)时,我知道数据需要查看什么。