ci sono moltissimi scritti che trattano delle sql injection... fai una ricerca in proposito, il materiale abbonda.

Quello che volevo invece farti notare e' l'erronea interpretazione della query che hai portato ad esempio. Data la precedenza degli operatori AND ed OR la query sarebbe:

SELECT * FROM users
WHERE
(user = 'username' AND password = '123')
OR '1'='1'

per cui risulta SICURAMENTE vero che 1 = 1 e quindi passera' TUTTI i record della tabella a prescindere dal risultato della AND....