Где включить очистку данных.Внутренние или внешние функции объекта? - PullRequest
1 голос
/ 14 июля 2011

Я делаю проект PHP 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 ]

1 голос
/ 14 июля 2011

Я бы пошел с внутренним:

1) Возможно, вам нужно открыть соединение Db для очистки, и, возможно, вы делаете это внутри своей функции.(Но это зависит от вашего дизайна).

2) Процесс автоматизирован.Вам не нужно заботиться вручную каждый раз, когда санация.Единственный раз, когда вы забудете продезинфицировать, это может стать большой проблемой.

1 голос
/ 14 июля 2011

Это вопрос политики, которую вы устанавливаете для всего проекта.Я бы предпочел следовать правилу «Фильтр при получении», т. Е. В точке получения внешних данных.

Это позволит избежать двойной очистки в каждом объекте / методе, через который могут проходить данные, а также упроститпроверьте весь код на правильность фильтрации.

Итак, в вашем примере - второй случай.

1 голос
/ 14 июля 2011

Первый случай (дезинфекция внутри функции), я думаю, лучше. Потому что:

  1. Вы будете абсолютно уверены, что данные очищены. В противном случае вам нужно будет проверить каждый путь, откуда могут быть переданы данные.
  2. Очистка выполняется во время процессора, и некоторые данные не могут использоваться (например, через if с), поэтому вы будете очищать данные только тогда, когда это действительно необходимо, вы сэкономите время своего процессора:)
1 голос
/ 14 июля 2011

Вы должны позволить кодеру позаботиться о санитарной обработке, потому что вы не знаете, какой тип значения ожидается, кодер знает.

Но в вашем примере вы пытаетесь выполнить очистку для объединения строк в инструкциях SQL. Вы не должны этого делать, вместо этого используйте подготовленные запросы.

...