SA-MP Forums Archive
MySQL инъекции. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: MySQL инъекции. (/showthread.php?tid=478568)



MySQL инъекции. - Urukhay - 30.11.2013

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


Re: MySQL инъекции. - -Stranger- - 30.11.2013

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


Re: MySQL инъекции. - polander - 01.12.2013

Защита от инъекций нужна только тогда, когда в твоем запросе присутствуют данные, которые юзер вводит сам. Во всех остальных случаях - по желанию.
Например:
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. Сам синтаксис можно посмотреть в теме плагина.


Re: MySQL инъекции. - mpzila - 02.12.2013

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

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




Re: MySQL инъекции. - Stepashka - 02.12.2013

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