Андрей, почему int коротковат? int вроде как идет для чисел от -2147483648 до 2147483648, куда текущий timestamp попадает 0)) лет через 30 да, надо будет уже на long переходить 0))))))))
Бес, да то я где-то ухватил, что мускульный BIGINT больше чем int пхпшный, из-за чего, предупреждали, могут быть коллизии, как при вводе чего-то большого (типа астрономических расстояний), так и при выводе.
оффтоп пошел.
кслову есть у меня вопрос. mysql(i)_real_escape, тварь такая, требует привязки к линку (видать для корректной работы с текущим анкодингом, который у меня всегда ютф). А вот есть у кого независимая функция выполняющая тоже самое? желательно ссылочку на источник. в комментах к мане не нашел.
буду очень благодарен.
а по поводу интвал и прочего, непонятно зачем оно надо (в данном случае) когда есть опять же рилэскейп. хотя айди (как самый частый случай) я раньше безопасил интвалом иногда.
зачем реалескейп, если есть PDO с плейсхолдерами и prepare методом, что намного кошенрнее. пускай БД разбирается какие ей параметры нужны, накройняк биллиотека, но не разработчик.
А вот здесь не согласен. Меня конструкции типа "????????" -> "ssssiii", мягко говоря, разочаровыают своей корявостью, хоть и работают, как говорят, быстрее. А что если мне нужно динамически собирать запрос? Мне что постоянно контролировать порядок добавления очередной связки "?" – "s"и, как следствие, их количество? Уже сто лет назад нужно было им квери билдер сделать нормальный как в когане и прочих fw (это если мы php берем).
Я – против плейсхолдеров. И на кошерность я гордо клал.
Фильтр всего и вся что передает юзер на сайт, сервер. Ну а передает он это не так уж многими способами
$_GET
$_POST
$_COOKIES
$_FILES
Ну там еще могут быть некие экзотические варианты, но в условиях обычного сайта и тем более иньекции их не применяют
А что и как вот фильтровать ваш выбор. Чаще иньекция это замена условий в запросе, или прицепливание к одному запросу другого, через UNION, так почему му бы нам этот юнион не кастрировать?
$_GET=str_replace('UNION','ЮНИОН',$_GET);
Ну и тот же mysql_real_escape_string и еще много стандартных функций фильтрации, замены спецсимволов. Я кроме прочего еще и * кастрирую превращая в уникод *
Кроме прочего я бы рекомендовал для сайта, обычного пользователя mysql ограничить sql функции, оставив только необходимые. Напрем желательно убрать TRUNC?1?T?1?, DR?1?P, ALTER … Если эти функции вам нужны на уровне админа, то создайте отдельно пользователя с расширенными функциями и используйте его в админке или через phpmyadmin.
ага, как раз защита косячная, руки за такую отрывать нужно.
prepare, execute и плэйсхолдеры конструкции mysql (и в других ДБ попадаются). что ещё надо, какие нафик инъекции. выбросите книги php и mysql за 24 часа. http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-pr...
Чаще иньекция это замена условий в запросе, или прицепливание к одному запросу другого, через UNION, так почему му бы нам этот юнион не кастрировать?
$_GET=str_replace('UNION','ЮНИОН',$_GET);
пестец)))))))))))))))))))
"Ну и тот же mysql_real_escape_string и еще много стандартных функций фильтрации, замены спецсимволов."
открою секрет: в том же DBSimple это так и реализовано. только подбные библиотеки содержат еще дополнительные вкусности + проверены временем.
#19 полностью согласен. многие останавливаются на изучении книжек "изучи php,mysql за 24 часа" и начинают ебошить говно-сайты в стиле str_replace('UNION','ЮНИОН',$_GET)
Советую всем новичкам почитать книжку "PHP рецепты программирования" (издательство ORELLY).
Гавносайт в стиле юнион работает 2 года, в пике до 2 млн. хитов в сутки. До 500 запросов к БД в секунду. Максимум чего добивались ддос сервера. Чистенькие сайтики по учебникам я видел, в коде. Налепили ума, объем кода для равноценного функционала в несколько раз выше и затраты ресурса сервера. А толк один.
Из книг ни одной книжки бумажной в руках не держал Ну так уж получилось. Качал пару книг в электронном виде. Единственно кого признаю это Кузнецова и Семендяева, у них много книг, их студия softtime.ru. По книгам видно, что это все лично пережитое авторами а не взятое с потолка, от большого ума слепленное.. Все приятно читается и поймается, куча реальных примеров, задачек.
Не удержался и посмотрел на DBSimple http://dklab.ru/lib/DbSimple/demo.zip
Много там нужного и полезного, но еще больше абсолютно ненужного и бесполезного для работы обычного сайта.
По защите от иньекций нашел только вот эту функцию
function _performEscape($s, $isIdent=false)
{
if (!$isIdent) {
return "'" . mysql_real_escape_string($s, $this->link) . "'";
} else {
return "`" . str_replace('`', '“', $s) . "`";
}
}
Зачем использовать всякие библиотеки, если можно исп. всего две функции:
intval()
и
mysql_real_escape()
Вместо второй можно свою написать. Кода меньше будет, а значит работать быстрее будет.
копаться в спагетти коде со вставками mysql_real_escape_string и помнить где параметр должен быть строкой, а где цифрой – пожалуйсто, мучайся сам, но дай другим пользоваться благами цивилизации.
PDO или DBSimple
помимо защиты от инъекций упрощают жизнь
ну а по простому – приведение числовых типов и mysql_real_escape_string для строк.
intval() )))
SQL-шпагой, каналья!
Тогда уже PHP-сковородкой, учитывая, что инъекция – это укол, обычно в жопу
))))
Вместо intval советуют is_numeric
Кажись дело в том, что типint иногда коротковат бывает для больших чисел типа timestamp.
правильный вариант был дан в самом первом ответе, всё остальное – мусор.
Андрей, почему int коротковат? int вроде как идет для чисел от -2147483648 до 2147483648, куда текущий timestamp попадает 0)) лет через 30 да, надо будет уже на long переходить 0))))))))
лонг не будет, будет 64 битный integer
Бес, да то я где-то ухватил, что мускульный BIGINT больше чем int пхпшный, из-за чего, предупреждали, могут быть коллизии, как при вводе чего-то большого (типа астрономических расстояний), так и при выводе.
оффтоп пошел.
кслову есть у меня вопрос. mysql(i)_real_escape, тварь такая, требует привязки к линку (видать для корректной работы с текущим анкодингом, который у меня всегда ютф). А вот есть у кого независимая функция выполняющая тоже самое? желательно ссылочку на источник. в комментах к мане не нашел.
буду очень благодарен.
а по поводу интвал и прочего, непонятно зачем оно надо (в данном случае) когда есть опять же рилэскейп. хотя айди (как самый частый случай) я раньше безопасил интвалом иногда.
у меня уже привычка, переданные числовые параметры типа id, tidи пр. пропускать через интвал…
зачем реалескейп, если есть PDO с плейсхолдерами и prepare методом, что намного кошенрнее. пускай БД разбирается какие ей параметры нужны, накройняк биллиотека, но не разработчик.
А вот здесь не согласен. Меня конструкции типа "????????" -> "ssssiii", мягко говоря, разочаровыают своей корявостью, хоть и работают, как говорят, быстрее. А что если мне нужно динамически собирать запрос? Мне что постоянно контролировать порядок добавления очередной связки "?" – "s"и, как следствие, их количество? Уже сто лет назад нужно было им квери билдер сделать нормальный как в когане и прочих fw (это если мы php берем).
Я – против плейсхолдеров. И на кошерность я гордо клал.
какой нафик квери билдер, если как оказывается разработчики и так не знают функционала мускула
>разработчики и так не знают функционала мускула
это я так понимаю мне?
Фильтр всего и вся что передает юзер на сайт, сервер. Ну а передает он это не так уж многими способами
$_GET
$_POST
$_COOKIES
$_FILES
Ну там еще могут быть некие экзотические варианты, но в условиях обычного сайта и тем более иньекции их не применяют
А что и как вот фильтровать ваш выбор. Чаще иньекция это замена условий в запросе, или прицепливание к одному запросу другого, через UNION, так почему му бы нам этот юнион не кастрировать?
$_GET=str_replace('UNION','ЮНИОН',$_GET);
Ну и тот же mysql_real_escape_string и еще много стандартных функций фильтрации, замены спецсимволов. Я кроме прочего еще и * кастрирую превращая в уникод *
Кроме прочего я бы рекомендовал для сайта, обычного пользователя mysql ограничить sql функции, оставив только необходимые. Напрем желательно убрать TRUNC?1?T?1?, DR?1?P, ALTER … Если эти функции вам нужны на уровне админа, то создайте отдельно пользователя с расширенными функциями и используйте его в админке или через phpmyadmin.
Сори тут код покосячил контакт, вот кстати пример их защиты гы =)
ага, как раз защита косячная, руки за такую отрывать нужно.
prepare, execute и плэйсхолдеры конструкции mysql (и в других ДБ попадаются). что ещё надо, какие нафик инъекции. выбросите книги php и mysql за 24 часа.
http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-pr...
дико взбесило, ЧТО ЧЕЛОВЕК ДАЛ ПРЕКРАСНЫЙ ОТВЕТ в первом же посте, а дальше набежали советчики с вредными советами.
Чаще иньекция это замена условий в запросе, или прицепливание к одному запросу другого, через UNION, так почему му бы нам этот юнион не кастрировать?
$_GET=str_replace('UNION','ЮНИОН',$_GET);
пестец)))))))))))))))))))
"Ну и тот же mysql_real_escape_string и еще много стандартных функций фильтрации, замены спецсимволов."
открою секрет: в том же DBSimple это так и реализовано. только подбные библиотеки содержат еще дополнительные вкусности + проверены временем.
#19 полностью согласен. многие останавливаются на изучении книжек "изучи php,mysql за 24 часа" и начинают ебошить говно-сайты в стиле str_replace('UNION','ЮНИОН',$_GET)
Советую всем новичкам почитать книжку "PHP рецепты программирования" (издательство ORELLY).
Гавносайт в стиле юнион работает 2 года, в пике до 2 млн. хитов в сутки. До 500 запросов к БД в секунду. Максимум чего добивались ддос сервера. Чистенькие сайтики по учебникам я видел, в коде. Налепили ума, объем кода для равноценного функционала в несколько раз выше и затраты ресурса сервера. А толк один.
Из книг ни одной книжки бумажной в руках не держал
Ну так уж получилось. Качал пару книг в электронном виде. Единственно кого признаю это Кузнецова и Семендяева, у них много книг, их студия softtime.ru. По книгам видно, что это все лично пережитое авторами а не взятое с потолка, от большого ума слепленное.. Все приятно читается и поймается, куча реальных примеров, задачек.
Не удержался и посмотрел на DBSimple http://dklab.ru/lib/DbSimple/demo.zip
Много там нужного и полезного, но еще больше абсолютно ненужного и бесполезного для работы обычного сайта.
По защите от иньекций нашел только вот эту функцию
function _performEscape($s, $isIdent=false)
{
if (!$isIdent) {
return "'" . mysql_real_escape_string($s, $this->link) . "'";
} else {
return "`" . str_replace('`', '“', $s) . "`";
}
}
блин, застрелись. там небось ещё и " заменяется КАВЫЧКА?
а что ты такого особенного хотел увидеть в библиотечке? думаешь этого не достаточно?
Нет не достаточно
На своей шкуре проверено. В отличии от некоторых …
ну, расскажи, где это дало сбой? мне очень интересно.
Зачем использовать всякие библиотеки, если можно исп. всего две функции:
intval()
и
mysql_real_escape()
Вместо второй можно свою написать. Кода меньше будет, а значит работать быстрее будет.
ояебу, что за сложности, создаете:
.htaccess:
Order Allow, Deny
Allow from 127.0.0.1
и не паритесь)))))
зачем писать cms, cmf, если есть джумла?
копаться в спагетти коде со вставками mysql_real_escape_string и помнить где параметр должен быть строкой, а где цифрой – пожалуйсто, мучайся сам, но дай другим пользоваться благами цивилизации.
Неуч. Иди лучше дворником работай.
>>mysql_real_escape()
Вместо второй можно свою написать. Кода меньше будет, а значит работать быстрее будет.
Честно говоря сомневаюсь… Врядли ты обгонишь на пхп то, что писали девелоперы РНР на сях)) Очень сомневаюсь)))