Безопасна ли эта проверка ввода SQL? - PullRequest
0 голосов
/ 02 сентября 2010

В настоящее время я занимаюсь разработкой класса базы данных для проекта, над которым я работаю. Я хотел бы знать, есть ли в следующей функции какие-либо дыры или ошибки, которые позволили бы кому-то использовать инъекцию MySQL.

public function sql_validate($var)
{
    if (is_null($var))
    {
        return NULL;
    }
    else if (is_string($var))
    {
        return "'" . $this->sql_escape($var) . "'";
    }
    else if (is_bool($var))
    {
        return intval($var);
    }
    else
    {
        return $var;
    }
}

Вот функция sql_escape, которая вызывается для строк.

private function sql_escape($string)
{
    if (!$this->db_connection)
    {
        return @mysql_real_escape_string($string);
    }

    return @mysql_real_escape_string($string, $this->db_connection);
}

Ответы [ 2 ]

5 голосов
/ 02 сентября 2010

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

Однако, могу я предложить альтернативу.Зачем создавать класс базы данных, когда есть несколько, которые используют гораздо более безопасный метод - подготовленные операторы.В двух словах, они работают, отделяя логику SQL от введенных пользователем данных.

Я бы предложил использовать PDO CLASS .

Кроме того, вам действительно следует избегать использования подавления ошибок @ в PHP.Поскольку это имеет тенденцию подавлять ошибки, которые вы можете даже не ожидать.

Следующая статья является довольно простым введением в PDO.

2 голосов
/ 02 сентября 2010

Похоже, вы используете динамические запросы.

Попробуйте вместо этого использовать подготовленные операторы .

Также см. Что такое подготовленные операторы?Чем они отличаются от динамического sql?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...