Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 10 из 10

Тема: %e в mysql_format

  1. #1
    Аватар для Igoreshka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.03.2015
    Сообщений
    32
    Репутация:
    0 ±

    %e в mysql_format

    Объясните в чем смысл %e. Желательно дословно. И когда его следует употреблять, а когда нет.

    - - - Добавлено - - -

    Желательно объяснить когда нужно чистить строку. А когда не нужно. Каким образом можно сделать sql инъекцию.

  2. #2
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    SQL инъекция, это что-то типо в диалоговой строке(С типом ввода input) проходит запрос, т.е если написать допустим - "UPDATE accounts SET admin = '5', alogin = '45775' WHERE name_player = 'james_malven'"

    И выдастся админка игроку - james_malven, т.е отправит запрос на обновление в базу, успешно.(Если конечно поля введены верно)

    %e - защищает от этого, на сколько я знаю этот спецификатор добавили и в обычный format.

  3. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Типичный запрос на логин:
    PHP код:
    SELECT *
    FROM players
    WHERE name
    ='Player_Name' AND password='%s' 
    Игрок вводит такой пароль: ' OR name='Admin_Name

    И теперь в БД идёт такой запрос:
    PHP код:
    SELECT *
    FROM players
    WHERE name
    ='Player_Name' AND password='' OR name='Admin_Name' 
    Результатом которого будут присвоение игроку данных другого игрока из БД (например, данных администратора).

    Спецификатор %e экранирует символы, при использовании его, вместо %s, в данном случае запрос будет выглядеть так:
    PHP код:
    SELECT *
    FROM players
    WHERE name
    ='Player_Name' AND password='\' OR name=\'Admin_Name' 
    Что является безопасным.

    P.S. Хотя я когда-то где-то читал, что экранирование символов - это не самая лучшая защита, ибо некоторые редкие символы она может пропустить. Самый лучший вариант защиты - это фильтровать все вводимые данные от игрока по белому списку символов.

  4. #4
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Данный спецификатор защищает вас от неправильных данных. Желательно употреблять его со всеми данными, который ввёл или отправил пользователь.

    P.S.: В интернете множество разных статей, в которых подробно изложено об этом.

  5. #5
    Аватар для Web
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2014
    Сообщений
    67
    Репутация:
    8 ±
    Можно просто использовать: mysql_real_escape

  6. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Web Посмотреть сообщение
    Можно просто использовать: mysql_real_escape
    Смысл использования данной функции есть только тогда, когда вы не используете mysql_format или старую версию сервера. В новых версия она называется mysql_escape_string.

  7. #7
    Аватар для 123
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.02.2014
    Сообщений
    93
    Репутация:
    8 ±
    Цитата Сообщение от Web Посмотреть сообщение
    Можно просто использовать: mysql_real_escape
    Смысла в ней нет, в крайнем случае, есть %q в format

  8. #8
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    Смысла в ней нет, в крайнем случае, есть %q в format
    Спецификатор %q задуман для работы с SQLite (которая из коробки присутствует в SA-MP), а не MySQL.
    Что mysql_format, что format - каждую из этих функций следует использовать для своей СУБД. Пытаться же использовать %q в format для форматирования запросов к серверу MySQL или mysql_format для SQLite - это всё равно, что пытаться доехать до соседнего города на поезде вместо автобуса/машины (электрички не в счёт). Вроде бы можно, но всё равно как-то странно.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. #9
    Аватар для 123
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.02.2014
    Сообщений
    93
    Репутация:
    8 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Спецификатор %q задуман для работы с SQLite (которая из коробки присутствует в SA-MP), а не MySQL.
    Что mysql_format, что format - каждую из этих функций следует использовать для своей СУБД. Пытаться же использовать %q в format для форматирования запросов к серверу MySQL или mysql_format для SQLite - это всё равно, что пытаться доехать до соседнего города на поезде вместо автобуса/машины (электрички не в счёт). Вроде бы можно, но всё равно как-то странно.
    Однако выполняют они тоже самое.

  10. #10
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    Однако выполняют они тоже самое.
    Конечно так можно, но чисто логическое начало у такого кода пропадает, и какой тогда смысл этим заниматься? Мало ещё людей, которые возвращают true и false в не булевых функциях и пакуют пустые строки, теперь на новый уровень выйдем
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •