Где использовать mysql_real_escape_string для предотвращения Внедрения SQL?

Я в беде с группой хакеров. они взломали сайт моего клиента несколько раз, и мой клиент становится более сердитым :( мой клиент потерял свою базу данных (который имеет сотни записей), и должен был ввести все :(

теперь я следую еще за некоторыми введениями;

  • фиксированные полномочия файла
  • измененный ftp и хост входят в информацию
  • очищенный все удаленные mysql доступы

теперь работая над проблемой Внедрения SQL. Я добавил, что mysql_real_escape_string к панели администрации входят в параматерей. Таким образом, где еще я должен использовать этот mysql_real_escape_string? У меня есть немного почтовых форм на сайте, я не думаю, что должен добавить там...

У меня есть index.php как mainpage. Если я делаю что-либо, чтобы эта страница предотвратила любое нападение внедрения 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']]

12
задан AstroCB 17 August 2014 в 15:45
поделиться

4 ответа

По сути, каждый раз, когда вы используете небезопасные данные (ввод пользователя, значение из базы данных, файл или внешний веб-сайт, т. Е. Любые данные, которыми вы не являетесь 100% уверен, что это безопасно) в запросе SQL, вы должны избежать его, используя mysql_real_escape_string . Обратите внимание, что согласно OWASP , эта функция небезопасна для экранирования имен динамических таблиц (но это гораздо реже, чем «базовая» вставка пользовательского ввода).

Я предлагаю вам просмотреть всю статью OWASP о внедрении SQL , а также просмотреть остальную часть веб-сайта. Это отличный источник информации о безопасности веб-приложений.

IMO, предпочтительный способ предотвращения SQL-инъекции - использовать подготовленные операторы .

Помните, что если вы решите использовать mysql_real_escape_string () , он будет работать только тогда, когда используется внутри строки, разделенной кавычками. Никогда не используйте его с значениями без кавычек. Сюда входят числовые значения; вместо этого убедитесь, что пользовательский ввод действительно числовой.

13
ответ дан 2 December 2019 в 06:44
поделиться

Две самые большие вещи, которые нужно сделать с пользовательским вводом - это

  1. Фильтрация ввода
  2. Экранирование вывода

Фильтрация ввода - это процесс преобразования данных /[до того, как]/ они будут сохранены в базе данных. Выполнение mysql_real_escape_string() подпадает под этот шаг (хотя есть и лучшие способы обеззараживания пользовательских данных для вставки в базу данных), но этот шаг также может включать обрезку пробелов, фильтрацию ненормативной лексики, преобразование разметки и многое другое.

Выходное экранирование - это забота о том, чтобы при отправке пользовательского контента в браузер не допустить вредоносного поведения. Это означает выполнение htmlentities() или какого-либо другого процесса выборочной проверки.

Есть и другие вещи, которые вы можете сделать, например, дросселирование ресурсов (предотвращение DOS), маркеры форм (защита от CSRF) и т.д. Зайдите на OWASP и начните читать.

4
ответ дан 2 December 2019 в 06:44
поделиться

Лучший способ предотвратить SQL-инъекцию - использовать подготовленные операторы и связывают переменные. Какую версию MySQL вы используете? Готовые отчеты доступны в версии 4.1 и выше.

3
ответ дан 2 December 2019 в 06:44
поделиться

Одно из золотых правил веб-разработки - НИКОГДА (НИКОГДА!) Не доверяйте вводу пользователя. Следовательно, везде, где у вас есть данные, поступающие в базу данных, вы должны вызывать mysql_real_escape_string ().

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

Удачи в защите вашего сайта.

3
ответ дан 2 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: