哪里包括数据清理。内部或外部对象功能?

时间:2011-07-14 11:57:29

标签: php oop sanitization

我正在做一个PHP OO项目,并且一直在思考,在哪里进行变量清理。使对象方法四周,准备隆隆声并进行消毒或给编码人员一些自由和空间,以便疏忽所有数据的自我消毒并使函数变得愚蠢的执行者?

哪一个是首选的OO符合方式?

class something
{

    public function getCategoryByCID($cid)
    {
        if (!is_array($cid))
            $cid = (array)$cid;

        $cid = implode("','", $cid);
        $cid = sanitizemeHARD($cid);

        $sql = "SELECT * FROM cat WHERE (cat_cid IN ('$cid'))";
        return $db->q($sql);
    }

}


$c = new something();
$c->getCategoryByCID($_GET['cid']);

OR

$c = new something();

$cid = sanitizemeHARD($_GET['cid']);
$c->getCategoryByCID($cid); //Of course in this case, the func doesn't have sanitization built in

4 个答案:

答案 0 :(得分:1)

你需要让编码人员处理清理工作,因为你不知道预期的价值类型,编码员知道。

但是在您的示例中,您尝试清理SQL语句中的字符串连接。你不应该这样做,而是使用准备好的查询。

答案 1 :(得分:1)

您为整个项目设置的政策问题。 我更愿意遵循规则“收到时过滤” - 即在获取外部数据的那一点。

这样可以避免数据可能通过的每个对象/方法中的双重清理,并且还可以更轻松地检查整个代码以进行正确的过滤。

所以,在你的例子中 - 第二种情况。

答案 2 :(得分:1)

我认为第一种情况(消毒内部功能)更好。因为:

  1. 您将完全确定数据已被清理。否则,您需要检查每种的方式,以便从中传递数据。
  2. 清理是CPU时间,有些数据可以不使用(例如if),所以只有在真正需要时才会清理数据,这样可以节省你的CPU时间:)

答案 3 :(得分:1)

我会和里面一起去:

1)您可能需要打开Db连接以进行清理,也许您可​​以在功能中执行此操作。 (但这取决于你的设计)。

2)该过程自动化。每次清洁时都不需要手动操作。你唯一一次忘记消毒,可能是个大问题。