Кодер ошибается один раз, программист постоянно. (о безопасности скриптов)

[Удален]
#61

mendel, вы не читаете то что написано. На каждый вопрос я дал ответ минимум дважды.

Если же вы хотите "прямо в лоб" ответ, чтоб даже школьник прочитал и понял поясняю.

Пришла строка

$username = 'asdfg"hjk';

Вы её ескейпнули автоматом получилось asdfg\"hjk

И допустим отправили на мыло человеку "Уважаемый asdfg\"hjk спасибо за регистрацию" а между тем его имя без слеша

Потом PDO или MySQLi ескейпнула эту строку и в базе у вас лежит asdfg\"hjk

Допустим вы увидели лишний слеш, и по вашей логике (чтоб не портить безопасность) при выводе их базы вы стрипните слеш и в браузере (и при отправке мыла) ник будет написан правильно (однако это не отменяет того факта что это уже "костыль") Более того вам придётся делать много таких "костылей" в будущем (в каком-то модуле например надо будет считать длинну ника, или ещё что-то подобное) в итоге ваш код будет состоять из одних костылей (и допустить уязвимость в такой куче кода куда проще...)

Представьте теперь что юзер вбивает в поиск -

найти сообщения asdfg"hjk

И не находит ничего, потому что в базе у вас лежит asdfg\"hjk

mendel:
Ваша главная ошибка в том, что ищете у меня ошибки

В общем согласен, завязываю искать у вас ошибки, я не знал что у вас ещё так мало опыта проектирования. (возможно кодер вы отличный, но вот "образно" мыслить у вас получается не очень)

mendel
На сайте с 06.03.2008
Offline
232
#62
wano-moroz:
Представьте теперь что юзер вбивает в поиск -
найти сообщения asdfg"hjk
И не находит ничего, потому что в базе у вас лежит asdfg\"hjk

А вбивает он конечно же телепатически, а не через тот же фильтр? :)

Т.е. я хочу сказать, что именно костылей будет ну совсем уж немного.

Хотя да, есть над чем подумать... Просто хочется поменьше устрожений, но в тоже время максимально надежно.... думал о передаче параметра "тип" при запросах внешних данных, чтобы фильтровалось по типу (Например емайл, домен, имя текст или хтмл...) но это устрожение, могут вообще забить... не уверен пока....

Шутку любишь над Фомой, так люби и над собой. (с) народ. Бесплатные списки читабельных(!) свободных доменов (http://burzhu.net/showthread.php?t=2976) (5L.com) Сайты, All inclusive. 5* (/ru/forum/962215)
[Удален]
#63
mendel:
костылей будет ну совсем уж немного

1 - сколько раз используются данные, столько и костылей

2 - наличие костылей вообще = признак неграмотного проектирования (а когда они вовсе являются неотъемлемой частью кода, то это первый признак того что надо что-то менять)

wano-moroz добавил 07.02.2011 в 11:26

mendel:
Просто хочется поменьше устрожений

Это не повод всё усложнять.

Расскажу историю из опыта.

Сел я как-то за совершенно новый для меня язык программирования, причём в совершенно новой области (надо было написать маленькую прогу на сотню строк кода, но обязательное условие было написать его на конкретном языке который я увидел первый раз в жизни)

Написал я её за один вечер, так написал что самого тошнило. Только самый минимум, лишь бы работало, никаких проверок итд.... Потом когда появилось время, стал я подучивать этот новый язык, освоил много нового, переписал эту прогу ещё раз (она стала весить больше, было куча всяких проверок и обработок) потом ещё и ещё... Потом когда освоил язык уже действительно хорошо, переписал последний раз... И вдруг сюрприз, оказалось что я вернулся к тому самому первому варианту на 100 строк, оказалось там и не должны быть все эти проверки/обработки итд...

Тоже самое и в РНР, чем больше опыта тем меньше кода (и конечно костылей)

C
На сайте с 28.01.2010
Offline
70
#64
mendel:

Fearful, есть еще шаблоны построенные на пхп. Тот же вордпресс к примеру - нельзя тупо скачать шаблон, поставить и забыть - ты обязательно должен его перечитать, в поисках гадостей или случайных уязвимостей.
Если шаблоны на Смарти или еще хуже - на голом пхп, то верстальщик ВЫНУЖДЕН думать о безопасности, потому что за него не подумал разработчик.

Помоему вы просто пытаетесь сэкономить :)

Предположим, я попросил человека сверстать сайт. Он выдал мне гипотетический html шаблон:

<html>
<head><title>Заголовок</title></head>
<body>
<h2>Название страницы</h2>
<div>Содержимое</div>
</body>
</html>

Вы хотите чтобы он проделал больше полезной работы и вместо <title>Заголовок</title> сделал что-то типа <title><?=siteTitle();?></title>? Чтобы человек сделал подобное, он должен знать, например, php. Качество его знаний php определяется в том числе безопасностью выдаваемого им кода. Если человек пишет небезопасный, следовательно плохой код, то ему не надо давать такие сложные задачи как использование php в шаблонах. Ну и, соответственно, оплачивать его труд по другой ставке.

Просто может я не очень понимаю суть претензий? Ну, например, если вы наняли водителя, едете с ним на своей машине и водитель покорежил бампер и разбил фары о забор, вы же не будете обвинять производителей автомобиля в случившемся? Вопрос в профессионализме водителя, правильно? Точно так же и при создании сайтов, я считаю.

Это - личная подпись. Здесь обычно ставят ссылки на всякие кривые сайты, надеясь получить "жирный бек".
mendel
На сайте с 06.03.2008
Offline
232
#65

wano-moroz, ну сколько надо повторять, что

wano-moroz:
сколько раз используются данные, столько и костылей

это Ваша фантазия? :) В основной массе данные проходят с эскейпом на ура... Даже приведенный вами поиск и тот работает без проблем (см. выше).

wano-moroz:
наличие костылей вообще = признак неграмотного проектирования

признак, но не доказательство :) Иногда целесообразнее маленький костыль, чем огромный правильный монстр.

Вообще я в принципе согласен, что парадигма "фильтруй выход" может оказаться лучше, чем "фильруй вход", но вот такой вот подход "есть только один правильный путь" не очень конструктивен :)

mendel добавил 07.02.2011 в 15:00

Counselor:
Вы хотите чтобы он проделал больше полезной работы и вместо <title>Заголовок</title> сделал что-то типа <title><?=siteTitle();?></title>?

Нет, я хочу чтобы он сделал <title>{sitetitle}</title>

Counselor:
Чтобы человек сделал подобное, он должен знать, например, php.
Качество его знаний php определяется в том числе безопасностью выдаваемого им кода.

Угу. Поэтому то я и считаю, что верстальщик не должен писать на пхп или смарти :)

По моему мнению язык шаблонов должен быть настолько прост, чтобы человек делающий валидную верстку понял его за 15 минут, и при этом он не должен позволять этому верстальщику умудриться написать небезопасно.

Counselor:
Если человек пишет небезопасный, следовательно плохой код, то ему не надо давать такие сложные задачи как использование php в шаблонах. Ну и, соответственно, оплачивать его труд по другой ставке.

Вот я и говорю, что в шаблонах пхп быть не должно. :) Зачем ему возможности которые в его руках пойдут только на вред? А простые вещи типа вставить переменную (не на пхп) - пусть пишет. Ему это проще чем программисту еще тратить время разбираться в его верстке.

Counselor:
Просто может я не очень понимаю суть претензий? Ну, например, если вы наняли водителя, едете с ним на своей машине и водитель покорежил бампер и разбил фары о забор, вы же не будете обвинять производителей автомобиля в случившемся? Вопрос в профессионализме водителя, правильно? Точно так же и при создании сайтов, я считаю.

Не очень. Претензия не в том, что бампер помялся - претензия в том, что разработчик машины предусмотрел очень важную для грузовика функцию - разгон до 400км в час, но исключительно на дороге без асфальта. Если бы не было такой возможности, то водила бы не разогнался до такой скорости, и не потерял бы управление... Водила мудак? Может быть... но зачем же было ему давать такую возможность? :)

[Удален]
#66
mendel:
Вообще я в принципе согласен, что парадигма "фильтруй выход" может оказаться лучше

Да, вот этой парадигмы я придерживаюсь.

Не потому что это "лишь очередной подход", а потому что мне лично (не навязывая никому свою точку зрения) кажется что логичнее использовать в программировании те же приёмы что и в жизни. Например у нас в мыслях есть фигура (для простоты) допустим квадрат. Нам надо его передать другому человеку. И тогда (в зависимости от того кому мы передаём его) мы либо по телефону говорим слово "квадрат" или (если мы хотим эту информацию передать например глухому) рисуем на бумажке четырёхугольник с равными сторонами.... Но мы сначала не рисуем квадрат на бумажке для безопасности если мы по телефону хотим сказать человеку слово квадрат

C
На сайте с 28.01.2010
Offline
70
#67
mendel:

Не очень. Претензия не в том, что бампер помялся - претензия в том, что разработчик машины предусмотрел очень важную для грузовика функцию - разгон до 400км в час, но исключительно на дороге без асфальта. Если бы не было такой возможности, то водила бы не разогнался до такой скорости, и не потерял бы управление... Водила мудак? Может быть... но зачем же было ему давать такую возможность? :)

:) Ну совершенно необязательно разгонятся до высокой скорости чтобы некисло помять машину.

Или вот например молоток - простейший и удобнейший инструмент. Но любой человек может с помощью него не только вбить гвоздь, но и палец себе отшибить, а то и кинуть в голову кому-нибудь. Но, ведь, выдавая человеку молоток, вы не думаете об этом? :)

mendel
На сайте с 06.03.2008
Offline
232
#68

Counselor, я сильно задумаюсь, если кто-то выдаст секретарше отбойный молоток, мотивируя это тем что "ну все равно это не дорого, а вдруг понадобится". :)

И если кто-то вздумает в магазине "всё по 1$" охраннику выдать гранатомет, по принципу "ну они у нас на складе есть, пусть стоит, он же не идиот, а так страшнее", и этот охранник потом из этого гранатомета расстреляет воришку и заодно полквартала, то я даже и не знаю кто будет больше виноват - охранник или тот кто дал ему гранатомет :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий