Какие символы я должен экранировать для использования в базе данных плоских файлов? - PullRequest
0 голосов
/ 13 декабря 2011

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

Итак, какие символы я должен экранировать, прежде чем сохранить пользовательский ввод?

Другие предложения по безопасности приветствуются, так как я, возможно, что-то пропустил.

После прочтения комментариев это моя функция:

    private function cleanInput($input) {
        switch($this->_config->delimiter()) {
            case '\"';
            case '"';
            case '\\';
            case '\0';
                break;
            default;
                $input = addslashes($input);
        }               
        $output = preg_quote($input, $this->_config->delimiter());
        return $output;
    }

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

То, что вам нужно, зависит от того, что вы делаете с данными.Если вы просто выгружаете данные в плоский файл в следующем формате:

foo,bar,baz
foo1,bar1,baz1

Тогда, очевидно, символы , и символ новой строки являются значимыми символами в вашем формате хранения.Поэтому вам нужно экранировать символы , или символы новой строки в самих значениях.

Существует также вопрос о том, как вы вставляете данные.Если вы просто выбросите его, используя fwrite($fh, $data), вам нечего убежать.Если вы используете какой-либо внешний интерфейс, например SQL, для своего плоского файла, вам нужно экранировать любые значения, которые вы можете объединять, в запрос SQL, чтобы сохранить допустимый синтаксис SQL.

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

0 голосов
/ 13 декабря 2011

Различные движки баз данных требуют экранирования разных символов (но большинство из них похожи на одинарные кавычки ').Для неизвестной базы данных вы можете использовать addlashes () PHP-функцию.

Настоятельно рекомендуется использовать специальную функцию СУБД (например, mysqli_real_escape_string () для MySQL или pg_escape_string () для PostgreSQL), но если используемая вами СУБД не имеет функции escape и СУБД использует \ для экранирования специальных символов, вы можете использовать эту функцию.

...