Я в беде с группой хакеров. они взломали сайт моего клиента несколько раз, и мой клиент становится более сердитым :( мой клиент потерял свою базу данных (который имеет сотни записей), и должен был ввести все :(
теперь я следую еще за некоторыми введениями;
теперь работая над проблемой Внедрения 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']]
По сути, каждый раз, когда вы используете небезопасные данные (ввод пользователя, значение из базы данных, файл или внешний веб-сайт, т. Е. Любые данные, которыми вы не являетесь 100% уверен, что это безопасно) в запросе SQL, вы должны избежать его, используя mysql_real_escape_string . Обратите внимание, что согласно OWASP , эта функция небезопасна для экранирования имен динамических таблиц (но это гораздо реже, чем «базовая» вставка пользовательского ввода).
Я предлагаю вам просмотреть всю статью OWASP о внедрении SQL , а также просмотреть остальную часть веб-сайта. Это отличный источник информации о безопасности веб-приложений.
IMO, предпочтительный способ предотвращения SQL-инъекции - использовать подготовленные операторы .
Помните, что если вы решите использовать mysql_real_escape_string ()
, он будет работать только тогда, когда
используется внутри строки, разделенной кавычками. Никогда не используйте его с
значениями без кавычек. Сюда входят числовые значения; вместо этого убедитесь, что пользовательский ввод действительно числовой.
Две самые большие вещи, которые нужно сделать с пользовательским вводом - это
Фильтрация ввода - это процесс преобразования данных /[до того, как]/ они будут сохранены в базе данных. Выполнение mysql_real_escape_string()
подпадает под этот шаг (хотя есть и лучшие способы обеззараживания пользовательских данных для вставки в базу данных), но этот шаг также может включать обрезку пробелов, фильтрацию ненормативной лексики, преобразование разметки и многое другое.
Выходное экранирование - это забота о том, чтобы при отправке пользовательского контента в браузер не допустить вредоносного поведения. Это означает выполнение htmlentities()
или какого-либо другого процесса выборочной проверки.
Есть и другие вещи, которые вы можете сделать, например, дросселирование ресурсов (предотвращение DOS), маркеры форм (защита от CSRF) и т.д. Зайдите на OWASP и начните читать.
Лучший способ предотвратить SQL-инъекцию - использовать подготовленные операторы и связывают переменные. Какую версию MySQL вы используете? Готовые отчеты доступны в версии 4.1 и выше.
Одно из золотых правил веб-разработки - НИКОГДА (НИКОГДА!) Не доверяйте вводу пользователя. Следовательно, везде, где у вас есть данные, поступающие в базу данных, вы должны вызывать mysql_real_escape_string ().
Кроме того, чтобы предотвратить раздражение клиентов в будущем, вам следует регулярно делать резервные копии своей базы данных. Если бы я был вашим клиентом, я был бы в ярости прямо сейчас.
Удачи в защите вашего сайта.