我必须转义哪些字符才能在平面文件数据库中使用


Which characters must I escape for use in a flatfile database?

在用户输入平面文件数据库时需要转义哪些字符?我已经针对类型进行了显式测试,但我知道代码可能被注入数据库或用于更改查询。

那么在存储用户输入之前,我必须转义哪些字符?

欢迎其他安全建议,因为我可能遗漏了一些东西。

阅读评论后,这是我的功能:

    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;
    }

需要转义的内容取决于您对数据所做的操作。如果您只是将数据以以下格式转储到平面文件中:

foo,bar,baz
foo1,bar1,baz1

显然,,和换行符是存储格式中的重要字符。因此,您需要转义值本身中的任何,或换行字符。

还有一个问题是如何插入数据。如果你只是用fwrite($fh, $data)倾倒它,没有什么可以逃脱。如果您在平面文件后端使用一些类似SQL的前端,则需要转义可能连接到SQL查询中的任何值,以保持SQL语法有效。

转义数据仅在您将文本字符串嵌入到其他字符串中时才需要,有一些字符具有特殊含义,您不希望这些特殊字符字符串中触发任何特殊操作。在这种情况下,您需要转义任何可能具有特殊含义的字符

不同的数据库引擎需要转义不同的字符(但大多数类似于单引号')。对于未知数据库,可以使用addslashes() PHP函数。

强烈建议使用DBMS特定的转义函数(例如:MySQL为mysqli_real_escape_string(), MySQL为pg_escape_string()PostgreSQL),但如果您正在使用的DBMS没有转义函数和DBMS使用'来转义特殊字符,您可以使用它函数。