在用户输入到flatfile数据库时,我需要转义哪些字符?我已经对类型进行了明确的测试,但是我知道可以将代码注入数据库或用于更改查询。
那么在我存储用户输入之前,我必须逃避哪些字符?
欢迎其他安全建议,因为我可能遗漏了一些东西。
阅读评论后,这是我的功能:
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;
}
答案 0 :(得分:0)
不同的数据库引擎需要转义不同的字符(但大多数字符串类似于单引号'
)。对于未知数据库,您可以使用addslashes() PHP函数。
强烈建议使用DBMS特定的转义功能(例如 MySQL mysqli_real_escape_string()或pg_escape_string() PostgreSQL),但如果您使用的DBMS没有逃脱 函数和DBMS使用\来转义特殊字符,你可以使用它 功能
答案 1 :(得分:0)
您需要逃避的内容取决于您对数据的处理方式。如果您只是以这种格式将数据转储到flatfile中:
foo,bar,baz
foo1,bar1,baz1
然后显然,
和换行符是存储格式中的重要字符。因此,您需要在值本身中转义任何,
或换行符。
还有一个问题是你如何插入数据。如果你只是使用fwrite($fh, $data)
转储它,那就没有什么可以逃脱的了。如果您正在为平面文件后端使用某些类似SQL的前端,则需要转义可能连接到SQL查询中的任何值以保持SQL语法有效。
只有在其他字符串中嵌入文本字符串时才需要转义数据,有些字符具有特殊含义并且您不希望这些特殊字符 value 字符串可触发任何特殊操作。在这种情况下,您需要转义任何可能具有特殊含义的字符。