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(string, sizeof(string), "SELECT * FROM `Аккаунты` WHERE `Имя` = '%s' and `Пароль` = '%s'", PlayerName, inputtext);
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);
Использование:
|
Не "отфильтровывает", а экранирует.