Medoo是一个PHP数据库框架。有没有人知道在使用insert()函数之前是否需要清理用户输入?在“Why medoo?”下的主页(http://medoo.in/)上然后它只是简单地说“防止SQL注入”,但我不知道这是否意味着它为你做了或者它更容易这样做。
有谁知道吗?我似乎更有可能为你做这件事,但我肯定知道。
答案 0 :(得分:2)
似乎他们正在过滤SQL注入你不必担心它。 [他们已将其列为其主要功能之一]
答案 1 :(得分:0)
快速查看代码,对于多种数据库类型,该类基本上是CRUD。
他们使用quote()方法来逃避用户输入。
虽然PHP建议
如果您使用quote()来构建SQL 声明,强烈建议您使用PDO :: prepare() 使用绑定参数而不是使用来准备SQL语句 PDO :: quote()将用户输入插入到SQL语句中。准备 带有绑定参数的语句不仅更具可移植性 方便,免于SQL注入,但通常要快得多 执行比内插查询,作为服务器端和客户端 可以缓存查询的编译形式。
答案 2 :(得分:0)
实际上,查看代码时,他们似乎并没有使用PDO准备方法来构建他们的代码,这意味着即使使用引用,也可能使用奇怪的宽字符进行破解。见https://security.stackexchange.com/questions/9908/multibyte-character-exploits-php-mysql
答案 3 :(得分:0)
Medoo放弃了对PDO准备的支持,因为当前的序列化数组数据的准备报价过程并不好,并且存在一些兼容的问题。
但是,如果您喜欢http://medoo.in/api/pdo
,可以使用它$calories = 150;
$colour = 'red';
$sth = $database->pdo->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
答案 4 :(得分:0)
默认情况下,版本1.6.1似乎没有转义。
$database = new Medoo([
"database_type" => "mysql",
"database_name" => "database",
"server" => "localhost",
"username" => "user",
"password" => "1234",
"charset" => "utf8"
]);
// Original proper query and injection
$table_proper_plain = 'TAB_1';
$table_inject_plain = 'TAB_1" UNION SELECT username, password FROM TAB_2;#';
$database->select($table_proper_plain, ["COL_1","COL_2"]);
// SELECT `COL_1`,`COL_2` FROM `TAB_1`
// valid, returns rows from TAB_1
// works as expected
$database->select($table_inject_plain, ["COL_1","COL_2"]);
// SELECT `COL_1`,`COL_2` FROM `TAB_1` UNION SELECT username, password FROM TAB_2;#"
// valid(!), returns rows from TAB_1 AND TAB_2(!)
// bad, injection successful
// Using method quote on proper and injection query
$table_proper_quote = $database->quote($table_proper_plain);
$table_inject_quote = $database->quote($table_inject_plain);
$database->select($table_proper_quote, ["COL_1","COL_2"]);
// SELECT `COL_1`,`COL_2` FROM "'TAB_1'"
// not valid, error 1146: Table 'database.'TAB_1'' doesn't exist
// bad, quoting broke query
$database->select($table_inject_quote, ["COL_1","COL_2"]);
// SELECT `COL_1`,`COL_2` FROM "'TAB_1\" UNION SELECT username, password FROM TAB_2;#'"
// not valid, error 1146: Table 'database.'TAB_1'' doesn't exist
// good, injection not successful