MySQL - когда мне нужно экранировать переменные, а когда нет? - PullRequest
1 голос
/ 27 июня 2011

Мне интересно, нужно ли экранировать внутренние переменные, которые пришли из самой базы данных и являются вводом пользователя.Это просто пустая трата производительности или она более безопасна?

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Вам не нужно беспокоиться об этом. Если значение в базе данных имеет имя чего-либо зарезервированного, это не имеет значения, поскольку оно не будет интерпретироваться.

Вам следует беспокоиться о внедрении sql и убедиться, что любые выполняемые вами операторы, которые вставляют, удаляют, выбирают или обновляют данные из пользовательского ввода, экранируют одинарные кавычки и другие символы. Даже обычные пользователи - без злых намерений - которые будут использовать одинарные кавычки, получат ошибки, что плохо.

Если пользователь использует имя пользователя, например:

joe'; drop table users; --

У вас могут быть проблемы.

Надеюсь, это поможет!

1 голос
/ 27 июня 2011

Вы должны экранировать весь пользовательский ввод, который включает даже такие вещи, как переменные сервера.Если значение извлекается из базы данных и никак не затрагивается пользовательским вводом, его не нужно экранировать при повторном использовании в запросе, если только оно не содержит символов, которые могут нарушить этот запрос при передаче путем конкатенации строк.

Например, я извлекаю имя O'Brien из базы данных в переменную PHP $name, а затем в другом операторе пытаюсь вернуть его обратно так:

$query = "INSERT INTO table (id, name) VALUES (123, '$name');";

Это сломает запрос,как я не смог избежать ' в О'Брайене.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...