ну простите, все разжовывать у меня времени нет. имеется ввиду «внешние данные», или если будет удобно «данные в которых может быть возможность угрозы», по моему это вполне понятно из статьи? нет?
У меня складывается впечталение, что ВЫ, дорогие господа, дочитали только фразу про base64, ничего дальше не прочли, не поняли, но зато написали коммент :/
Не совсем, плейсхолдер сам следит за недопустимыми значениями, так? экранирует их если есть необходимость, если нет — оставляет «as is», он же занимется сборкой — т.е. расставлением кавычек и т.д.
Например, если пх знает что в mysql в стринге не должно быть кавычек он их заэкранит, гипотетически возможно появление следуюещго — находят что какаято последовательность символов позволяет реализовать какую любо угрозу — если пх выпущен ДО этого — оно про это не знает и ничего не делает соовтетвенно.
Здесь же данные идут «в контейнере» — от такой ситуции ты застрахован.
От XSS он спасет когда данные на клинета бегут в бейзе и там раскручиваются. таким образом
var a=«abc»;alert(5);b=«7»
превратится в a=«base64string»;
и не выполнится.
както так
Существует масса программистов занятых «кодингом», и зачастую они просто забывают это делать, а за всеми не уследишь, этот же способ лишает их возможности сделать такую ошибку.
Кроме того такая ошибка может вкрасться элментарно по не внимательности, пусть даже одна в большом и качественном коде ( причем даже у такого Ёлопукки как Вы :) ) — этого уже хватит.
Надо чтобы код максимально избавлялся от человескеого фактора и ошибок с ним связанных. И это правильно.
Placeholders — выход, но при сложных запросах где надо писать упоминание на множество таблиц плейс превращает более-менне понятный запрос в кашу, причем ДАЖЕ ( и ОБЫЧНО ) если вы юзаете алиасы чтобы не писать кучу переменных в плейсах.
Объем данных растет на 30% это да большой минус, согласен
А когда есть варианты — это гораздо лучше, когда их нет, не так ли? :)
Например, если пх знает что в mysql в стринге не должно быть кавычек он их заэкранит, гипотетически возможно появление следуюещго — находят что какаято последовательность символов позволяет реализовать какую любо угрозу — если пх выпущен ДО этого — оно про это не знает и ничего не делает соовтетвенно.
Здесь же данные идут «в контейнере» — от такой ситуции ты застрахован.
var a=«abc»;alert(5);b=«7»
превратится в a=«base64string»;
и не выполнится.
както так
«select # from #2 where # and # and # order by #», #, #, #…
А теперь представим что он у нас сложно подчиненный, количество and во where меняется, как и кол-во order полей.
не сильно удобно
Что вы имеете ввиду под «простым квоттингом»?
Кроме того такая ошибка может вкрасться элментарно по не внимательности, пусть даже одна в большом и качественном коде ( причем даже у такого Ёлопукки как Вы :) ) — этого уже хватит.
Надо чтобы код максимально избавлялся от человескеого фактора и ошибок с ним связанных. И это правильно.
Placeholders — выход, но при сложных запросах где надо писать упоминание на множество таблиц плейс превращает более-менне понятный запрос в кашу, причем ДАЖЕ ( и ОБЫЧНО ) если вы юзаете алиасы чтобы не писать кучу переменных в плейсах.