Подтвердить что ты не робот

Где использовать 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']]

4b9b3361

Ответ 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 и начните чтение.