Приветствую. Для моего framework я написал свой движок БД, который конструирует и фильтрует запросы MySQL.
Я использую mysql_real_escape и mysq_sql_real_connect и набор своих фильтров. Вот код:
Проблема в том, что секция '/[\x{10000}-\x{10FFFF}]/u' => '\xEF\xBF\xBD' обрезает смайлы emoji(как модифицировать чтобы оставить смайлики?).
MySQL real escape это пропускает и там кажется остаются некоторые уязвимости. Безопасно ли удалить этот кусок кода и не появятся ли какие-то уязвимости?
Второй вопрос: я дополнительно использую STMT для MySQLi(подготовленные запросы). Кто ни будь знает, что конкретно фильтрует STMT и есть ли смысл его использовать с моим набором фильтров? Например QQ уязвимость он не фильтрует
Исходный код библиотеки тут: Full-Rx/RevolveR-framework
Я использую mysql_real_escape и mysq_sql_real_connect и набор своих фильтров. Вот код:
PHP:
// Cleanup outer SQL
protected static function escapeOuter( string $s ): string {
return preg_replace(
['/(\/\*\s*\w*\s*(?!.\/\*))/si', '/(\-\-\s*\w*\s*(?!.\-\-))/si', '/(or\s*\w*\s*=\s*\w(?!.*or)|\|\|\s*\w*\s*=\s*\w(?!.\|\|))/si', '/[\x{10000}-\x{10FFFF}]/u'],
[';', ';', '', '\xEF\xBF\xBD'],
str_replace(
['--+', '"', "\x1a", '%', 'qq ', '--', '/*!', '*/'],
[';', '"', '\\Z', "\%", '--', '/*!', '*/'],
trim($s)
)
);
}
// Cleanup inner SQL
protected static function innerEscape( string $v ): string {
// Secure stage means that inner SQL clauses fixed to be secure
$secureStage = str_ireplace(
[' OR ', '||', ' AND ', '&&', ' ON ', "'", '--+', 'qq', '"', '--', '%', '/*!', '*/'],
[' or ', ' || ', ' and ', ' && ', ' on ', '\'', ';', '', '"', '--', '%', '/*!', '*/'],
addslashes(
htmlspecialchars($v)
)
);
// Not available to use built in escape future when DB connection not established
if( isset( self::$dbx_lnk[ 1 ] ) ) {
if( (bool)self::$dbx_lnk[ 1 ]['CONNECTION'] ) {
return mysqli_real_escape_string( self::$dbx_lnk[ 0 ], $secureStage );
}
else {
return $secureStage;
}
}
else {
return $secureStage;
}
}
Проблема в том, что секция '/[\x{10000}-\x{10FFFF}]/u' => '\xEF\xBF\xBD' обрезает смайлы emoji(как модифицировать чтобы оставить смайлики?).
MySQL real escape это пропускает и там кажется остаются некоторые уязвимости. Безопасно ли удалить этот кусок кода и не появятся ли какие-то уязвимости?
Второй вопрос: я дополнительно использую STMT для MySQLi(подготовленные запросы). Кто ни будь знает, что конкретно фильтрует STMT и есть ли смысл его использовать с моим набором фильтров? Например QQ уязвимость он не фильтрует
Исходный код библиотеки тут: Full-Rx/RevolveR-framework