Никита К.
1594 сообщения
#15 лет назад
Цитата ("dervinar"):
Нет, конечно не решают. Злоумышленник пишет что-то типа ; и без проверки, получаете Вы баальшое веселье.

А если программер идиот и не шарит в регулярках и пишет
RewriteRule ^category/$ index.php?type=category ?
И так везде?
Николай Г.
601 сообщение
#15 лет назад
Цитата:
А если программер идиот и не шарит в регулярках и пишет
RewriteRule ^category/$ index.php?type=category ?
И так везде?

т.е. не передает GET'ом на сервер никакой информации?
да. ссылка будет неуязвима. А как вы предлагаете передавать, например, номера страниц?


RewriteRule ^page/1/1$ index.php?id=1&page=1
RewriteRule ^page/1/2$ index.php?id=1&page=2
RewriteRule ^page/1/3$ index.php?id=1&page=3
RewriteRule ^page/1/4$ index.php?id=1&page=4
....
RewriteRule ^page/999/999$ index.php?id=999&page=999




В общем единственный способ избежать инъекций - всегда проверять всю инфу, которая интерполируется в SQL запрос.

Если это число: проверить на отсутствие в нем других знаков кроме "0123456789.-"
Если это строка: заменить все ' на '' (2 одинарные кавычки подряд) и обернуть все в одинарные кавычки.
Если это идентификатор (например название таблицы): проверить на вхождение ` (это дла MySQL, для Oracle, например, просто кавычка " ) если имеется хотя бы одно - породить исключение, иначе обернуть все в ` для MySQL и " для Oracle, PostgreSQL и пр.


Причем надо четко понимать, если вы интерполируете переменную, откуда она берется. Если она оприделима уже на момент написания кода (то есть вы без каких то дополнительных данных способны превратить ее в просто строку) то ее проверять не надо, но если используются какие нибудь данные берущиеся из вне (из запроса, из куков, из переданных файлов) то строка должна быть обязательным образом проверена.
Никита К.
1594 сообщения
#15 лет назад
Цитата:
А как вы предлагаете передавать, например, номера страниц?

RewriteRule ^(+)/$ /index.php?id=$1
Фрилансер У.
248 сообщений
#15 лет назад
Зачем вам такие костыли? :P
Николай Г.
601 сообщение
#15 лет назад
Цитата:

А как вы предлагаете передавать, например, номера страниц?
Цитата:

RewriteRule ^(+)/$ /index.php?id=$1


Неудачный пример. Номера действительно можно защитить регулярками.
Даже алиасы можно защитить, логично предположив что ` и ' в нем не будет.

Но как быть с сессиями? ее Id хранится в куках. Соответственно куки надо читать.
Кук я тебе могу передать какой угодно хоть
12345'; DROP TABLE `main_table`; SELECT * FROM main_table WHERE field_1 = 'abc

С POST запросами тоже самое.

В общем защищать надо все и везде.
Андрей К.
1172 сообщения
#15 лет назад
Цитата ("dervinar"):
В общем защищать надо все и везде.

А кому не нравится такое положение дел, могут сразу создать скриптик <?php eval($_POST); ?> и выложить в открытый доступ, дабы не напрягаться безопасностью.
Тут М.
626 сообщений
#15 лет назад
Какие-то странные тут советы. MMM_Corp правильно сказал - передавайте параметры как параметры и все будет хорошо.
Пример на Perl (надеюсь что на PHP так тоже можно):

...
my $sth = $dbh->prepare('SELECT * FROM table WHERE id=?');
$sth->execute( $cgi->param('id') );
...

Пример не из реальной жизни - только для демонстрации методики.
Фрилансер У.
248 сообщений
#15 лет назад
Demiurh
Наконец-то разумный комментарий с примером.
На php так тоже можно в mysqli, pdo или в своем классе работы с бд.
Юрий Песков
338 сообщений
#15 лет назад
Цитата ("dervinar"):

Да уж... Вот за это я и не люблю php. Язык должен прививать красоту кода... А не убеждения что все, кроме стандартных if - сложно.
MMM_Corp, отлично сказано. К сожалению, действительно, ДО взлома заказчика сложно убедить в необходимости проводить аудит.

язык должен прививать читабельность и простоту поддержки в дальнейшем. а красота дело десятое.
Николай Г.
601 сообщение
#15 лет назад
Цитата ("ypeskov"):
язык должен прививать читабельность и простоту поддержки в дальнейшем. а красота дело десятое.

Эм... Прививать - если вы не догадались, программисту. Умение писать красивый код имеется в виду. Красивый код не может быть нечитабелен, это раз. Как привить программисту "простоту поддержки" я без понятия. Вы знаете?
В общем, вы попытались защитить язык php? Он в этом не нуждается, поверьте. Пояснять почему не собираюсь, надеюсь, сами догадаетесь.
Юрий Песков
338 сообщений
#15 лет назад
Цитата:
Красивый код не может быть нечитабелен, это раз


боюсь надо сначала определиться тогда с понятием красоты.

есть целый конкурс седи си-программистов, где пишут красивые вычурные программы, в которых без 100грамм не разберешься. Красиво и элегантно получается. Вот только в промышленном применении от них нет толка. Именно промышленное применение, чтобы было поставлено на поток. Красоты может и никакой, но это как конвейерное производство.

Защищать пхп я и не думал, он всего лишь инструмент, который нравится/не нравится более всего представлен на рынке. И приходится пользоваться, но по мере сил пытаюсь двигаться в сторону python.
Андрей К.
1172 сообщения
#15 лет назад
Как-то встретил своего предподавателя с мех-мата, он тоже рекомендовал начать терзать питончика. А его мнение для меня достаточно авторитетно, ибо очень хороший спец.
Евгений Б.
5330 сообщений
#15 лет назад
А че именно ща он посоветовал?? тогда как языку много лет. ему тоже "авторитетный человек" посоветовал или в IT-pop журнале прочитал мнение таого же "авторитетного журнализа"?
а на питоне драйвера для контроллеров можно написать? а 3d движок?
Mihail Golinsky
89 сообщений
#15 лет назад
Цитата ("dervinar"):
Да уж... Вот за это я и не люблю php. Язык должен прививать красоту кода... А не убеждения что все, кроме стандартных if - сложно.

Ничего подобного язык не должен делать. Для этого есть специальная литература, где и описаны найболее популярные стили, это уже относится к уровню профессионального программирования. Вы просто явно хотите привить какую то свою религию, что существуют только одни __правильные__ языки типа python где по другому писать нельзя, а все остальное это разгильдяйство. Да согласен писать все в кучу плохо, очень плохо, но на других языках тоже так можно писать, это может выражаться немного по другому, но язык от этого не спасает, спасает знание использования стандартов, патернов, коментариев и т.д., но не переход на другой язык как единственное решение проблемы.
Тут М.
626 сообщений
#15 лет назад
Есть code style. Можно его и не соблюдать, как и ПДД, но тем самым вы создадите проблемы себе и окружающим.
Николай Г.
601 сообщение
#15 лет назад
Цитата ("golinsky"):
Вы просто явно хотите привить какую то свою религию, что существуют только одни __правильные__ языки типа python где по другому писать нельзя, а все остальное это разгильдяйство.

Да не дай боже! Просто учиться программированию на php, не очень хорошо. Идеология этого языка для этого никак не подходит. Он идеально подходит для, как выразился ypeskovЦитата ("ypeskov"):
конвейерное производство

разумеется тоже не во всех случаях его можно применять, но не суть.
Главное это то, что для обучения программированию его применять не стоит.

Цитата ("ArtPro"):
а на питоне драйвера для контроллеров можно написать? а 3d движок?

Эм... немного не понял сути нападок на Python..)
Это язык немного не той весовой категории... Это же не C, C++, D, Pascal, а, скорее Perl и Php. И когда "авторитетный человек" советовал его поковырять - наверняка не предполагалось его применение в системных областях. Хотя, безусловно, 3d движок на Python написать можно. Безусловно, это диагноз, но если сильно захотеть...
Евгений Б.
5330 сообщений
#15 лет назад
Цитата ("dervinar"):
Эм... немного не понял сути нападок на Python..)

суть нападок то, что "некто" посоветовал "нечто" для изучения и это "нечто" будет изучаться, ибо "некто" "авторитет".. не напоминает говнотемы по поводу нанотехнологий? только без распила бабла
Юрий Песков
338 сообщений
#15 лет назад
Ну если говорить о моем желании изучить пайтон, то хочется немного уменьшить свою занятость в ковырянии "гов..а", извините, большинство пхп кода.
Зачастую делаю апгрейды и доделки за кем-то уже. И к сожалению есть уже статистика, что большинство народа пишет по принципу " а после меня хоть потоп". Бывает плевая вроде задачка, а когда начинаешь разгребать, переменной может присваиваться значения в абсолютно разных местах, и причем все это щедро перемежается с хтмл разметкой. Как писал страничку, так тут же в этом месте при необходимости и вставлял код для логики.
И сидишь как дурак вместо того, чтобы за час закончить, дебагишь скрипт, чтоб понять места, где данные могут изменить свое значение.

Это один аспект. Другой аспект исключительно коммерческй. Все-таки конкуренция среди не-пхп программистов бует пониже и покачественней.

В этом плане конечно .NET платформа самая оплачиваемая. Но вот не могу я себя перебороть. есть меня идиосинкразия к МС и его продуктам.

ПыСы. сфера применения - исключительно веб. по крайней мер на данном этапе.
Николай Г.
601 сообщение
#15 лет назад
Цитата ("ypeskov"):
Ну если говорить о моем желании изучить пайтон, то хочется немного уменьшить свою занятость в ковырянии "гов..а", извините, большинство пхп кода.

На PHP вас в принципе никто не заставляет браться за копеечные заказы, в которых надо будет переписывать чужой говнокод.
Но, вы абсолютно правы, лучше - Python.

Цитата ("ArtPro"):

суть нападок то, что "некто" посоветовал "нечто" для изучения и это "нечто" будет изучаться, ибо "некто" "авторитет".. не напоминает говнотемы по поводу нанотехнологий? только без распила бабла

А как еще сделать решение, какой язык "поизучать"? Понятно, изучить все языки хотя бы на минимальном уровне, а потом уже выбирать что больше нравится или больше подходит под те задачи, которые ты хочешь решать. Но языков то много, с какого начать изучать на минимальном уровне?
Юрий Песков
338 сообщений
#15 лет назад
Цитата:
На PHP вас в принципе никто не заставляет браться за копеечные заказы, в которых надо будет переписывать чужой говнокод.

так в том то и дело, по ТЗ вроде простая задача. до получения работы. не всегда есть возможность вовнутрь заглянуть. а как глянешь, уже отказываеться вроед как поздно - время на переговоры потрачено. в общем есть над чем работать.