Стрельба в ногу - это одно, а понимание смысла функции- совсем другое. Хватит уже вертеться, как уж на сковородке. Даже со второй попытки не получилось правильно написать, что эта функция делает. А все потому, что нет чёткого понимания, для чего она нужна, а вместо него ископаемое суеверие про злоумышленников.
Ну поскольку этой "уязвимости" подвержен любой код, использующий mysqli_real_escape_string(), то ты у нас теперь властелин мира, и можешь поломать половину сайтов в интернете. Можешь приступать :)
Когда закончишь, можешь попробовать исправить свой ответ ещё раз. Я потом проинспектирую.
Что характерно, "дисклеймер", добавленный в вопрос, более чем наглядно демонстрирует отчаянное непонимание смысла функции. Которая предназначена для строковых литералов SQL, и не имеет никакого отношения к типам данных РНР. Число, пришедшее из НТТР запроса, имеет строковый тип данных. Имя поля, которое в SQL является идентификатором, при этом прекрасно подходит под определение "строковой тип данных РНР". С ожидаемо печальными последствиями.
Обьяснял-то ты объяснял, но убедительными эти объяснения кажутся только тебе. А по факту это неуклюжие оправдания, сочиненные на ходу, "ой я не то имел и не для тех писал, а так-то я знающий разработчик и крупный специалист, даже символы знаю". :)
Ты бы видел, как сам выглядишь со стороны. Был бы ужом, давно бы в узел завязался от усердия :)
Ты, главное, не питай иллюзий насчет адекватности своих оправданий. Все эти "я знал, но не сказал" и "мой ответ предназначен для адекватных" - это все психотерапия для бедных. Ну себя ты, допустим и убедишь, что умный и красивый и все-все знаешь. Но чисто для информации - со стороны ты выглядишь просто забавным :)
Я смотрю ты отчаянно пытаешься оправдаться в своих глазах.
В этом большой беды нет, если бы только это занятие не занимало все твои интеллектуальные ресурсы.
Которые было бы куда полезнее потратить на то чтобы наконец понять, что делает эта функция :)
Учитывая бесчисленные стада хомячков, которые, как и ты, блеят про слеши и злоумышленников, приходится быть занудой.
Больше всего меня в этом треде забавляет это дистанцирование, как будто ты чем-то отличаешься от "любителей стрелять себе в ногу". Ну ладно, будем надеяться, что ты этот урок наконец-то выучил, и больше в эту ересь верить не будешь.
Быстро же ты прошел путь от "отредактирую" до "у меня времени нет".
Беда не в том что ты не расписал, а в том, что не знал. А сейчас завертелся "у меня времени не было".
Остальные хоть имели мужество признаться что да - налажали.
metajiji, уж на горячей сковородке глядя на тебя получит комплекс неполноценности.
Я одного не могу понять, если "давно в пыху не вляпывался", то зачем вообще лезть с ответами? Отвечай про то, в чем ты понимаешь. Неужели это такое сложное правило?
Ну ну. Ты, похоже, действительно не догадываешься, насколько смешно выглядишь, пытаясь поучать "множество людей" в вопросе, в котором сам не разбираешся. Ну надувай щеки дальше.
$iId = mysql_real_escape_string("1 union select password from user -- kavychka ' special for you ");
$sSql = "SELECT name FROM table WHERE id = $iId";
Вот тебе и слеши и инъекция.
Редактировать ответ не надо, надо просто удалить. Потому что людей, которые верят в эту ересь про "слэши перед символами предотвращают SQL-инъекцию" и так слишком много, не надо ее распространять дальше.
Удочку, но если ты только сам понимаешь, как ловить рыбу, и даешь именно удочку, а не машешь рукой в сторону леса, "ну ты там найди подходящую палку, а дальше сам разберешься".
Человек впервые пхп видит, а ты ему "в сорцы". И причем совсем не те, которые нужно. То есть ты даже сам не понимаешь, куда там смотреть.
Ты конкретно облажался с ответом, пора уже это признать и немного прикрутить фитилёк.