Php 在平面文件数据库中使用哪些字符必须转义?
在用户输入平面文件数据库时,需要转义哪些字符?我已经对类型进行了显式测试,但我知道代码可以注入数据库或用于更改查询 那么,在存储用户输入之前,我必须转义哪些字符 欢迎提出其他安全建议,因为我可能遗漏了一些内容 阅读评论后,这是我的功能:Php 在平面文件数据库中使用哪些字符必须转义?,php,database-design,escaping,Php,Database Design,Escaping,在用户输入平面文件数据库时,需要转义哪些字符?我已经对类型进行了显式测试,但我知道代码可以注入数据库或用于更改查询 那么,在存储用户输入之前,我必须转义哪些字符 欢迎提出其他安全建议,因为我可能遗漏了一些内容 阅读评论后,这是我的功能: private function cleanInput($input) { switch($this->_config->delimiter()) { case '\"'; ca
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;
}
不同的数据库引擎需要转义不同的字符,但大多数都类似于单引号。对于未知数据库,可以使用PHP函数 强烈建议使用DBMS特定的转义函数,例如。 对于MySQL还是对于 PostgreSQL,但是如果您使用的DBMS没有转义 函数,DBMS使用\来转义特殊字符,您可以使用 功能
您需要逃避的内容取决于您对数据所做的操作。如果您只是将数据以这种格式转储到平面文件中:
foo,bar,baz
foo1,bar1,baz1
显然,和换行符是存储格式中的重要字符。因此,需要对值本身中的任何字符或换行符进行转义
还有一个问题是如何插入数据。如果您只是使用fwrite$fh$data转储它,那么就没有什么可以逃避的了。如果在flatfile后端使用类似SQL的前端,则需要转义可能连接到SQL查询中的任何值,以保持SQL语法有效
只有在将文本字符串嵌入其他字符串时,才需要转义数据。有些字符具有特殊含义,您不希望值字符串中的这些特殊字符触发任何特殊操作。在这种情况下,您需要转义任何可能具有特殊含义的字符。我用一个示例函数更新了我的问题,其中$this->\u config->delimiter是分隔符字符。看起来可以吗?