forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   Впросы новичка (http://forum.boolean.name/showthread.php?t=13517)

Crayzi 12.01.2012 16:25

Ответ: Впросы новичка
 
Цитата:

Сообщение от Aikon (Сообщение 216627)
А так же хотя бы примерно представлять, что такое sql-injection и потому стараться избегать выполнять запросы вида
select ... from Accounts where login = СтрокаОтПользователя
в виду их опасности.

Опасность есть даже если в базу обращается только сам сервер(перед этим проверяя чтобы логин состоял только из букв, а пароль буквы + цифры) и база не имеет разрешения на доступ извне? (всмысле отсутствие регистрации через сайт и шаманство с доступом к базе)
Пошел гуглить "sql-injection"...

Aikon 12.01.2012 16:43

Ответ: Впросы новичка
 
Crayzi, простой пример.
Ты получаешь имя пользователя и пытаешься искать его в базе
Код:

select * from Accounts where login = 'ВведеноеПользователемИмя'
Тогда, пользователь с именем Вася';delete from Accounts;commit;select '1
Почистит всю базу пользователей :D

Поскольку вместо одного ожидаемого запроса будет выполнена следующая последовательность
select * from Accounts where login = ' Вася';
delete from Accounts;
commit;
select '1'

Пример простой, но думаю вполне наглядный.

Crayzi 12.01.2012 16:54

Ответ: Впросы новичка
 
Цитата:

Сообщение от Aikon (Сообщение 216633)
Crayzi, простой пример.
Ты получаешь имя пользователя и пытаешься искать его в базе
Код:

select * from Accounts where login = 'ВведеноеПользователемИмя'
Тогда, пользователь с именем Вася';delete from Accounts;commit;select '1
Почистит всю базу пользователей :D

Поскольку вместо одного ожидаемого запроса будет выполнена следующая последовательность
select * from Accounts where login = ' Вася';
delete from Accounts;
commit;
select '1'

Пример простой, но думаю вполне наглядный.


Ясно, я слышал о подобном, но я сделал функцию для проверки пригодности логина пароля и имени )
Если Имя/пароль/логин вписуются в рамки допустимого (длина менее 10 символов, исользуются только английские крупные и мелкие буквы, а так-же цифры) то функция вернет мне True)
Код:

Function ValidateLoginPassName%(RegText$)
        Local TextLen%,MidKey%,AllOk%
        If Len(RegText$)>10 Then Return False
        For TextLen%=1 To Len(RegText$)
                MidKey%=Asc(Mid(RegText$,TextLen%,1))
                AllOk%=False
                If MidKey>=48 And key<=57
                        AllOk%=True
                Else If MidKey>=65 And MidKey<=90
                        AllOk%=True
                Else If MidKey>=97 And MidKey<=122
                        AllOk%=True
                EndIf
                If AllOk%=False Then Return False
        Next
        Return True
End Function

П.с. И убедился что не зря я такую функцию замутил, прочитав про "sql-injection", по твоему совету.
П.сс. Твой пример хороший)

treycerok 25.01.2012 01:56

Ответ: Впросы новичка
 
mysql_real_escape_string (mysql_escape_string) вам в помощь , и никаких инъекций, и всякого типа анси смиволы и прочее в последних ветках не прокатывают.


Часовой пояс GMT +4, время: 14:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot