MySQL инъекции.
#1

Зачем опытные скриптеры рекомендуют использовать функцию mysql_format?
Зачем нужна функция mysql_real_escape_string?
Да и вообще, как эти инъекции могут напакастить?
Reply
#2

http://ru.wikipedia.org/wiki/Внедрение_SQL-кода
Reply
#3

Защита от инъекций нужна только тогда, когда в твоем запросе присутствуют данные, которые юзер вводит сам. Во всех остальных случаях - по желанию.
Например:
PHP код:
if(dialogid == 1234//ID диалога авторизации
{
    
format(stringsizeof(string), "SELECT * FROM `Аккаунты` WHERE `Имя` = '%s' and `Пароль` = '%s'"PlayerNameinputtext);
    
mysql_query(string);

Допустим имя игрока Johny_Smyth и он ввел такой пароль: 123123.
Сам запрос будет выглядеть так:
PHP код:
SELECT FROM `АккаунтыWHERE `Имя` =  'Johny_Smyth' and `Пароль` = '123123' 
А теперь предположим, что игрок ввел вместо пароля: 123' or '1' = '1
Теперь запрос выглядит так:
PHP код:
SELECT FROM `АккаунтыWHERE `Имя` =  'Johny_Smyth' and `Пароль` = '123' or '1' '1' 
'1' = '1' всегда вернет правду, следовательно игрок сможет зайти в аккаунт даже не зная пароля.
Тут то и пригождаются функции mysql_real_escape_string и mysql_format. (следует использовать что-то одно)
mysql_format удобнее в использовании, но в случае неправильного использования есть риск краша скрипта. Новичкам я рекомендую использовать mysql_real_escape_string. Сам синтаксис можно посмотреть в теме плагина.
Reply
#4

Пояснение:
Функция отфильтровывает переменную, в прямом смысле слова, от "левых" знаков, которые могут привести к неправильной работе скрипта.
Сама функция:
mysql_real_escape_string(const source[], destination[], connectionHandle);
Использование:
Quote:

public OnPlayerText(playerd, text[])
{
new escape[140];
mysql_real_escape_string(text,escape); //преобразовываем текст в переменной text в переменную escape
// ...
}

Reply
#5

Quote:
Originally Posted by mpzila
Посмотреть сообщение
Пояснение:
Функция отфильтровывает переменную, в прямом смысле слова, от "левых" знаков, которые могут привести к неправильной работе скрипта.
Сама функция:
mysql_real_escape_string(const source[], destination[], connectionHandle);
Использование:
Не "отфильтровывает", а экранирует.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)