Доброго времени суток уважаемый Георгий Михайлович.
По странному стечению обстоятельств мне пришло в голову скачать исходные тексты портала aomai.ru и даже посмотреть их. И обнаружил я там грубейшую для преподавателя, который ведет предметы связанные с защитой компьютерной информации, ошибку. А ошибка заключается в следующем:
Вы формируете SQL запрос обычной
конкатенацией строк.
Например:
"SELECT * FROM users WHERE login='"+login+"' AND pass='"+crcPass(pass)+"'"
На первый взгляд все отлично: пользователь вводит в форму свой логин и пароль, далее выполняется запрос к БД, на него возвращается информация пользователя его name1, name2, email, icq и т.д., или ничего не возвращается если логин или пароль не верные. А теперь представим себе ситуацию когда пользователь вводит не свой логин, а, скажем следующую строчку
' OR login='gulaev' OR login='
и любой не пустой пароль. Уже догадываетесь, что произойдет?! А я вам подскажу: после того как пользователь так сделает, то мы получим следующий запрос
"SELECT * FROM users WHERE login='' OR login='gulaev' OR login='' AND pass='"+crcPass(pass)+"'"
Данный запрос выполнится и вернет данные пользователя, у которого логин gulaev, к примеру, и нет никакой разницы, какой пароль написал пользователь, главное чтобы он был не пустой. Надеюсь вы сможете исправить данную ошибку в скором времени