Medoo 是一个 PHP 数据库框架。有谁知道我是否需要在使用 insert() 函数之前清理用户输入?在主页 ( http://medoo.in/ ) 下的“为什么选择 medoo?” 部分然后它只是说“防止 SQL 注入”,但我不知道这是否意味着它为你做,或者这样做更容易。
有人知道吗?我似乎更有可能为您做到这一点,但我宁愿确定。
Medoo 是一个 PHP 数据库框架。有谁知道我是否需要在使用 insert() 函数之前清理用户输入?在主页 ( http://medoo.in/ ) 下的“为什么选择 medoo?” 部分然后它只是说“防止 SQL 注入”,但我不知道这是否意味着它为你做,或者这样做更容易。
有人知道吗?我似乎更有可能为您做到这一点,但我宁愿确定。
似乎他们正在过滤掉 SQL 注入,你不必担心它。[他们已将其列为其主要功能之一]
实际上,查看代码,他们似乎没有使用 PDO 准备方法来构建他们的代码,这意味着即使使用引号,也可能使用奇怪的宽字符进行破解。请参阅https://security.stackexchange.com/questions/9908/multibyte-character-exploits-php-mysql
Medoo 放弃了对 PDO prepare 的支持,因为 prepare 的引用过程对当前的序列化数组数据不好,并且存在一些兼容问题。
但是,如果您喜欢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();
默认情况下,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