Где использовать mysql_real_escape_string для предотвращения внедрения SQL?
У меня проблемы с группой хакеров. они несколько раз взламывали мой клиентский сайт, и мой клиент еще больше разозлился:( мой клиент потерял свою базу данных (у которой сотни записей), и ей пришлось вводить все:(
теперь я следую еще нескольким интродукциям;
- права доступа к файлам
- изменена информация о регистрации ftp и хоста
- удалены все удаленные запросы mysql
теперь работает над проблемой SQL Injection. Я добавил mysql_real_escape_string к параметрам входа в панель администратора. Итак, где еще я должен использовать эту mysql_real_escape_string? У меня мало форм электронной почты на сайте, я не думаю, что мне нужно добавить туда...
У меня есть index.php как основная. Должен ли я что-нибудь сделать для этой страницы, чтобы предотвратить любую инъекцию sql-инъекций через url, например index.php?somesql=
?
Пожалуйста, посоветуйте мне! Я так ценю!!!: (
например:
У меня такой код:
public function showDetails($id) {
// SQL Jobs Details
$this->sql_job = "SELECT * FROM jobs WHERE id=".mysql_real_escape_string($id);
$this->rst_job = mysql_query($this->sql_job);
$this->row_all = mysql_fetch_assoc($this->rst_job);
// SQL State
$this->sql_state = "SELECT title FROM state WHERE id=" . $this->row_all[$this->tbl_jobs['f4']];
$this->rst_state = mysql_query($this->sql_state);
$this->row_state = mysql_fetch_assoc($this->rst_state);
........
достаточно ли использовать mysql_real_escape_string для $id. не для $this- > row_all [$ this- > tbl_jobs ['f4']]
Ответы
Ответ 1
В принципе, каждый раз, когда вы используете некоторые небезопасные данные (вход пользователя, значение из базы данных, файл или внешний веб-сайт, то есть любые данные, на которых вы не уверены, что это безопасно) в SQL-запросе, вы должны избегайте его с помощью mysql_real_escape_string. Обратите внимание, что в соответствии с OWASP, эта функция небезопасна для экранирования имен динамических таблиц (но это гораздо реже, чем "базовая" ввод данных пользователя).
Я предлагаю вам взглянуть на статью статью OWASP на SQL-инъекцию, а также просмотреть остальную часть веб-сайта. Это отличный источник информации о безопасности в веб-приложениях.
IMO, предпочтительным способом предотвращения SQL-инъекции является использование подготовленных операторов.
Помните, что если вы решите использовать mysql_real_escape_string()
, это будет работать только тогда, когда
используется внутри строки, которая ограничена кавычками. Никогда не используйте его
любые некотируемые значения. Это включает числовые значения; вместо этого убедитесь, что пользовательский ввод фактически является числовым.
Ответ 2
Одним из золотых правил веб-разработки является НИКОГДА (КОГДА-ЛИБО!) доверительный ввод пользователя. Поэтому в любом месте, где есть данные, поступающие в базу данных, вы должны вызвать mysql_real_escape_string().
Кроме того, чтобы предотвратить появление гневных клиентов в будущем, вы должны регулярно создавать резервные копии своей базы данных. Если бы я был вашим клиентом, я был бы в ярости прямо сейчас.
Удачи в обеспечении безопасности вашего сайта.
Ответ 3
Лучший способ предотвратить SQL-инъекцию - использовать подготовленные операторы и связывать переменные. Какую версию MySQL вы используете? Подготовленные отчеты доступны в формате 4.1 и выше.
Ответ 4
Две самые большие вещи, связанные с пользовательским вводом, - это
- Входная фильтрация
- Выходное экранирование
Входная фильтрация - это процесс преобразования данных/[до]/он хранится в базе данных. Выполнение mysql_real_escape_string()
относится к этому шагу (хотя есть более эффективные способы дезинфекции пользовательских данных для вставки db), но этот шаг также может включать в себя обрезку белого пространства, фильтрацию ненормативной лексики, преобразование разметки и т.д.
Выход Escaping заботится, когда вы отправляете пользовательский контент в браузер, который не допускает вредоносного поведения. Это означает выполнение htmlentities()
или другого процесса выборочного скрининга.
Есть другие вещи, которые вы можете сделать, например, дросселирование ресурсов (предотвращение DOS), токены формы (защита CSRF) и т.д. Перейдите к OWASP и начните чтение.