Скажите, он правильно написан? И будет работать в полной мере, т.е. защищать от инъекций и вредный данных??
Если не правильно, напишите как сделать правильно. Только не надо кидать ссылку на литературу, там все так написано, что пока толком ничего не пойму, лучше напишите что вставить вместо чего и почему. Заранее спасибо)))
P.S. Мне просто легче когда объясняют люди, а не книжка со стандартными выражениями!Отредактировано модератором: OrmaJever, 25 Января, 2014 - 17:05:14
green_man
Отправлено: 25 Января, 2014 - 17:20:40
Новичок
Покинул форум
Сообщений всего: 55
Дата рег-ции: Июль 2012
Помог: 6 раз(а)
функцию правильную выбрал, но зачем все эскейпить?
Очищай то что базе отдаешь.
Vanya777 пишет:
Мне просто легче когда объясняют люди, а не книжка со стандартными выражениями!
А вот это плохо.
Vanya777
Отправлено: 25 Января, 2014 - 17:44:50
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2014
Помог: 0 раз(а)
А можно поконкретнее? Что очистить надо и как это сделать! Просто насколько я понял этот скрипт проверяет все данные проходящие через базу и массив и если что то находит, отправляет админу письмо и заносит взломщика в таблицу!
Мелкий
Отправлено: 25 Января, 2014 - 18:10:41
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Вы знаете, что такое SQL-инъекция? И почему они вообще опасны?
Ваш нерабочий фрагмент кода - всё худшее, что было в PHP когда-либо, ещё с добавлением других глупостей. Тут и register_globals, и magic quotes, и глобальные переменные напропалую.
----- PostgreSQL DBA
Vanya777
Отправлено: 25 Января, 2014 - 18:17:55
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2014
Помог: 0 раз(а)
Код писал не я, я только учусь и пытаюсь разобраться! Чем инъекции опасны знаю! Подскажите, где именно и на что исправить. Пожалуйста!
green_man
Отправлено: 25 Января, 2014 - 18:31:15
Новичок
Покинул форум
Сообщений всего: 55
Дата рег-ции: Июль 2012
Помог: 6 раз(а)
Гы ну все грузанули
Vanya777 пишет:
Что очистить надо и как это сделать!
Я вообще то ответил
green_man пишет:
функцию правильную выбрал
Я говорил про mysqli_real_escape_string
Что чистить?
green_man пишет:
Очищай то что базе отдаешь.
Так же еще прочитай что написал Мелкий.
Vanya777 пишет:
Подскажите, где именно и на что исправить.
Читай книги, тут кроме как написать все самому и показать тебе не получиться.
Есть конкретные вопросы задавай.
Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2014
Помог: 0 раз(а)
А можете сами написать и мне показать, а я тогда сравню и увижу в чем ошибки и что нужно вставлять в дальнейшем? Просто мне понятнее когда разбираю в скрипте, а в книгах часть написана и не поймешь что куда вставлять(( Пожалуйста, не проигнорируйте мое сообщение, никто не соглашается помогать, а мне очень надо!
green_man
Отправлено: 25 Января, 2014 - 18:53:53
Новичок
Покинул форум
Сообщений всего: 55
Дата рег-ции: Июль 2012
Помог: 6 раз(а)
Ну ты и написал, у меня прям слеза навернулась
Vanya777 пишет:
Просто мне понятнее когда разбираю в скрипте
Ну вот у тебя есть скрипт, разбирай мы сказали куда копать почитай в гугле.
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Vanya777 пишет:
Чем инъекции опасны знаю!
Vanya777 пишет:
Что очистить надо
Я так и предположил, что вы понятий не имеете, что же такое sql-инъекция, только слышали где-то там, что это великий ужас и надо нагородить полмегабайта непонятного (а непонятный - гораздо хуже, чем плохой) кода, чтобы их не избежать.
Жаль, что у вас не хватило смелости в этом признаться самому.
СУБД получает запрос, строку текста. Никаких переменных какого-то там PHP она не видит. Ей вообще всё равно, кто там к ней подключился.
Если есть запрос на приложении: (на деньгах все понимают лучше, потому списывается 1000р.)
UPDATE users SET balance=balance-1000 WHERE username="melkijfooo\" or username=\"Vanya777"
То запрос просто не затронет ни одной строки. Тоже неверно, но это гораздо лучше, чем что-то случилось, а мы понятий не имеем, что же.
А мы всего лишь оставили согласно синтаксису SQL подсказки, что является данными в запросе, а что - управляющими конструкциями.
Особое внимание на "согласно синтаксису". У того же HTML - синтаксис другой. Возьмите JSON - там свои синтаксические конструкции. Возьмите CSV - там свой синтаксис.
Потому какие-то неизвестные полмегабайта универсальной защиты не только бесполезны, но вредны и неудобны впоследствии.
----- PostgreSQL DBA
green_man
Отправлено: 25 Января, 2014 - 20:32:30
Новичок
Покинул форум
Сообщений всего: 55
Дата рег-ции: Июль 2012
Помог: 6 раз(а)
Че за объяснение... проще надо тут похоже человек неделю только как начал.
Sql injection - возможность выполнения сторонего sql кода. Такая возможность возникает из-за плохой фильтрации переменных.
Как защититься:
1. Если целочисленное значение подставляется то можно (int)$param. Если $param не число то приведение типа вернет 0.
2. mysqli_real_escape_string - экранировать строки и числа. Я предпочитаю pdo.
Очищать надо те данные которые отдаешь базе.
С тебя 5$
Теперь понятно?
Мелкий
Отправлено: 25 Января, 2014 - 20:41:01
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
green_man пишет:
проще надо
На мой взгляд проще понять, в чём заключается сама проблема. А не её следствия.
Как защититься - не подставлять в запрос переменные, которые вы не контролируете полностью. Вообще не подставлять. Использовать препарированные запросы.
----- PostgreSQL DBA
green_man
Отправлено: 25 Января, 2014 - 20:43:36
Новичок
Покинул форум
Сообщений всего: 55
Дата рег-ции: Июль 2012
Помог: 6 раз(а)
Да не в обиду написал, просто по опыту общения могу предположить что он хотел ответ который я дал.
Назовем это интуицией.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.