MDL-68183 auth: Fix the performance of forgotten password user search
authorDavid Mudrák <david@moodle.com>
Mon, 16 Mar 2020 21:39:49 +0000 (22:39 +0100)
committerDavid Mudrák <david@moodle.com>
Tue, 17 Mar 2020 13:52:32 +0000 (14:52 +0100)
commit77bc884473367655a6fc3e8543aebeed37a7f23d
tree735596a64fdb8e86ffa5985dd62a9b1868c800f5
parent73f8c56dfca5dd4028845f1fbbaac0a83e43caf9
MDL-68183 auth: Fix the performance of forgotten password user search

When searching for the user matching the given email address, we perform
the case-insensitive and accent-sensitive search. That may be expensive
as some DBs such as MySQL cannot use the index in that case. Instead,
sequential scan of all the user records is performed and the comparison
uses the LOWER function to filter the matching records. This leads to
significant performance heavy queries which in turn represent a surface
for DoS attacks.

For that reason, we first perform accent-insensitive search for
potential candidates, which can use the index. Only then we perform the
additional accent-sensitive search on this limited set or records.
login/lib.php
login/tests/lib_test.php