Снова select`ы

1 234
S
На сайте с 30.09.2016
Offline
469
#21
mendel:
Раз уж вы развенчали мою "интригу"

Звиняйте, не подумал:):):)

---------- Добавлено 11.12.2016 в 20:05 ----------

mendel:
Вы знаете... я встречал НЕСКОЛЬКО персонажей которые считали что то что их сливают и т.п. это нормальная ситуация.
Могу Вам рассказать, что таких персонажей - едва ли не каждый первый:D

Стандартные ответы на сообщения об уязвимостях:

- Да кому мой сайт нужен

- Ничего страшного, восстановим из бэкапа

и т.д. и т.п.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
mendel
На сайте с 06.03.2008
Offline
183
#22
Sitealert:
Могу Вам рассказать, что таких персонажей - едва ли не каждый первый
Стандартные ответы на сообщения об уязвимостях:
- Да кому мой сайт нужен
- Ничего страшного, восстановим из бэкапа
и т.д. и т.п.

Ой! Я с этим завязал еще в конце 90-х начале нулевых.

Друг мой скинул одному провайдеру информацию по найденной им уязвимости, и предложил им на символическую плату провести им аудит всего. Т.е. всё что нашел скинул бесплатно.

В ответ начали приходить сообщения что кто-то выносит его прокси (в смысле запросы приходят и т.п.). К одному из провов в цепочке прилетела абуза от того "взломанного" провайдера. Админ провайдера по некоторым признакам опознал моего друга, и запутал следы, а другу моему надавал щелбанов, за то что тот чуть не спалился... У провайдера вышел анонс мол "мы вычислили хакера который нас взломал, сейчас ловим"....

Полноценный аудит он провел.

Крупный провайдер с большим пулом диалапа по стране...

На всех радио-базарах, форумах и т.п. можно было купить дискетку с эксплоитом.

Продано было на суммы на несколько нулей больше чем просилось за аудит.

Ущерб? А кто же его посчитает? Тем более там решето было. Не один он ломал...

---------- Добавлено 11.12.2016 в 19:23 ----------

Вру. Завязал я не после этого.

Завязал я в 2003-м. Когда сообщил работодателю что в системе учета дыра.

Разработчик сказал большое спасибо, доработал баги и т.п.

Шеф меня вздрючил и запретил заходить в помещение где комп стоял.

Ага.

Только 50% времени контролировать это было некому.

Ну т.е. напарник спит, в клубе только мы вдвоем. И дело даже не в том что напарника я знал уже пять лет как)))

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

Благодарю за то что ткнули носом в ошибку.

Но вопрос такой:

Если условие такое, что GET параметр обязательно должен являться цифрой, в противном случае подключение к базе не происходит как и не осуществляется эта строчка:

$query = "SELECT region, id, city FROM city where region =".$_GET['countryCode'];

Фигачу Телеграм-ботов ( https://teleg.run/veleg )
mendel
На сайте с 06.03.2008
Offline
183
#24
veleg:
Но вопрос такой:

Это неверный вопрос.

Вы находитесь в рамках устаревших парадигм.

Фильтровать ввод это хорошая мысль. Для 2005-2007 годов.

Хорошо что вы до нее додумались, но плохо что вы хотите на ней ехать.

Не подумайте неправильно - фильтровать ввод нужно (не всегда, но нужно).

Просто именно для этой проблемы это не то решение.

В конкретном случае вам нужен PDO и его параметризированные запросы.

И вопрос инъекции отпадает сразу во всем проекте. Ну не совсем уж отпадает, но становится сильно затруднителен и без эксплуатации набора других ошибок - невозможным. Попутно ЗНАЧИТЕЛЬНО упрощается вопрос переноса вашего скрипта на другие СУБД, например SQLite или Постгри. Всего скрипта а не только этой странички.

Далее, если вы просто пойдете в Википедию, и почитаете про DRY, и посмотрите на тот код что у вас получился, то у вас возникнет вопрос.

И в ответ на этот вопрос вы захотите иметь что-то вроде $db->sql($sql,['param1'=>'param1,'param2'=>'param2']);

Потом будет SOLID, MVC (Толстые. Уродливые. Контроллеры. ФУУУУУУ!).

Ну и сразу вернемся к работе с базой...

Каждый раз писать Селект? Да еще с JOIN и т.п.?

Может хочется что-то вроде

$country = $allCountry->findOne($countryId);

if($country) {

$countryCity = $country->citys->findAll();

$currentCity = $country->citys->findOne($cityID);

$currentFilial = $currentCity->findOne($filialId);

}

тогда читаем про ActiveRecord.

Или вот есть у вас простая в сущности задача. Рутинная до безобразия.

Форму ввода создать. Ну скажем заказ какой принять от пользователя.

В форме будет не очень много полей. Скажем 30.

Разные. Это и да/нет, и текстовые, и цифровые, и загрузить и выбрать картинку, и текст с оформлением (с редактором типа Тини или ЦКЕдитора) ну и т.п.

Ну банальный заказ.

Выводим поля соответствующих типов.

Выводим к ним подписи, подсказки (вопросики такие, с всплывающим текстом при наведении мышки), плейсхолдеры и т.п.

У каждого поля пару проверок вроде того цифровое ли оно, обязательное ли, проверка уникальности (запрос в базу), максимальная/минимальная длина и т.п.

Ну примерно 50 проверок на всю форму.

К каждому полю надо вывести сообщение об ошибке, если оно неправильно написано..

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

Как думаете как много кода для этого понадобится?

В принципе у каждого код будет разным, но лично я пишу вот так:


<form role="form" method="post" class="form-horizontal">
<?=s()->xsrf()->field ?>
<?=view('widget/formModel','model'=>$model);?>
<button class="btn btn-primary" type="submit">
<i class="fa fa-save"></i> Сохранить
</button>
</form>

Ну и получение этой самой $model и ее обработка выглядят примерно так:


public function createAction() {
$page = $this->preparePage();
// **********************************************************************
$model = s()->post()->getModel($this->boxName);
if(!$model->isNew() AND $model->isValid()) {
$model->save();
$this->redirect();
} else {
$page->model = $model;
s()->layout()->show($page);
}
}

Здесь мы выводим форму в браузер (вызываем код который приведен выше), разбираем данные формы, проверяем ее на правила, если она заполнена правильно, то сохраняем и редиректим куда нужно, если нет, то отдаем ошибки той форме что была приведена выше, и опять выводим.

Плюс еще миллион и маленькая тележка других действий.

Например вы могли заметить чуть выше непонятную строчку <?=s()->xsrf()->field ?>.

Эта строчка выводит специальный код, а в s()->post()->getModel($this->boxName); мы не только получаем данные из $_POST, разбираем их и т.п., но и проверяем правильность этого кода.

А иначе что? А иначе XSRF. У вас ведь наверняка есть XSRF. Вот прям сейчас пойдете. Прочитаете. И - опа! Ведь есть же. Ну признайтесь? :)

Ну вот мы тут насоветовали на страницу, потом еще на одну. Вы всё поняли. Даже PDO используете.

Чувствуете себя в безопасности, а тут раз и XSRF :)))

И не говорите "да кому я нужен, кто меня ломать будет". Мы это уже оборжали выше.

Поймите простую вещь.

Всё что вы напишите будет криво, небезопасно и бесполезно ибо до Вас это уже десять раз написали.

Да, Вы научитесь. Да, это нужно. Но не делайте на таком коде реальные сайты.

Возьмите лучше Вордпресс. Он ужасен в плане кода, но там уже хоть какая-то основа есть.

А если чисто поучиться, и потом сесть за что-то взрослое, то дерзайте.

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

veleg
На сайте с 30.01.2011
Offline
142
#25
mendel:
Это неверный вопрос.
Вы находитесь в рамках устаревших парадигм.
Фильтровать ввод это хорошая мысль. Для 2005-2007 годов.
Хорошо что вы до нее додумались, но плохо что вы хотите на ней ехать.
Не подумайте неправильно - фильтровать ввод нужно (не всегда, но нужно).
Просто именно для этой проблемы это не то решение.
В конкретном случае вам нужен PDO и его параметризированные запросы.
И вопрос инъекции отпадает сразу во всем проекте. Ну не совсем уж отпадает, но становится сильно затруднителен и без эксплуатации набора других ошибок - невозможным. Попутно ЗНАЧИТЕЛЬНО упрощается вопрос переноса вашего скрипта на другие СУБД, например SQLite или Постгри. Всего скрипта а не только этой странички.
Далее, если вы просто пойдете в Википедию, и почитаете про DRY, и посмотрите на тот код что у вас получился, то у вас возникнет вопрос.
И в ответ на этот вопрос вы захотите иметь что-то вроде $db->sql($sql,['param1'=>'param1,'param2'=>'param2']);
Потом будет SOLID, MVC (Толстые. Уродливые. Контроллеры. ФУУУУУУ!).
Ну и сразу вернемся к работе с базой...
Каждый раз писать Селект? Да еще с JOIN и т.п.?
Может хочется что-то вроде
$country = $allCountry->findOne($countryId);
if($country) {
$countryCity = $country->citys->findAll();
$currentCity = $country->citys->findOne($cityID);
$currentFilial = $currentCity->findOne($filialId);
}
тогда читаем про ActiveRecord.
Или вот есть у вас простая в сущности задача. Рутинная до безобразия.
Форму ввода создать. Ну скажем заказ какой принять от пользователя.
В форме будет не очень много полей. Скажем 30.
Разные. Это и да/нет, и текстовые, и цифровые, и загрузить и выбрать картинку, и текст с оформлением (с редактором типа Тини или ЦКЕдитора) ну и т.п.
Ну банальный заказ.
Выводим поля соответствующих типов.
Выводим к ним подписи, подсказки (вопросики такие, с всплывающим текстом при наведении мышки), плейсхолдеры и т.п.
У каждого поля пару проверок вроде того цифровое ли оно, обязательное ли, проверка уникальности (запрос в базу), максимальная/минимальная длина и т.п.
Ну примерно 50 проверок на всю форму.
К каждому полю надо вывести сообщение об ошибке, если оно неправильно написано..
Конечно же подписи у всего этого должны быть на разных языках, как и сообщения об ошибках и т.п. Т.е. в отдельных файликах лежат все строки которые нам нужны, и можно сделать новый файлик с именем другого языка, не колупая код.
Как думаете как много кода для этого понадобится?
В принципе у каждого код будет разным, но лично я пишу вот так:

<form role="form" method="post" class="form-horizontal">
<?=s()->xsrf()->field ?>
<?=view('widget/formModel','model'=>$model);?>
<button class="btn btn-primary" type="submit">
<i class="fa fa-save"></i> Сохранить
</button>
</form>

Ну и получение этой самой $model и ее обработка выглядят примерно так:

public function createAction() {
$page = $this->preparePage();
// **********************************************************************
$model = s()->post()->getModel($this->boxName);
if(!$model->isNew() AND $model->isValid()) {
$model->save();
$this->redirect();
} else {
$page->model = $model;
s()->layout()->show($page);
}
}

Здесь мы выводим форму в браузер (вызываем код который приведен выше), разбираем данные формы, проверяем ее на правила, если она заполнена правильно, то сохраняем и редиректим куда нужно, если нет, то отдаем ошибки той форме что была приведена выше, и опять выводим.
Плюс еще миллион и маленькая тележка других действий.
Например вы могли заметить чуть выше непонятную строчку <?=s()->xsrf()->field ?>.
Эта строчка выводит специальный код, а в s()->post()->getModel($this->boxName); мы не только получаем данные из $_POST, разбираем их и т.п., но и проверяем правильность этого кода.
А иначе что? А иначе XSRF. У вас ведь наверняка есть XSRF. Вот прям сейчас пойдете. Прочитаете. И - опа! Ведь есть же. Ну признайтесь? :)
Ну вот мы тут насоветовали на страницу, потом еще на одну. Вы всё поняли. Даже PDO используете.
Чувствуете себя в безопасности, а тут раз и XSRF :)))
И не говорите "да кому я нужен, кто меня ломать будет". Мы это уже оборжали выше.

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

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

Sly32
На сайте с 29.03.2012
Offline
302
#26

Во вы загрузили товарища))) От простенького вопроса по логике работы алгоритма запугали его кросплатформенными иньекциями.

veleg
На сайте с 30.01.2011
Offline
142
#27
Sly32:
Во вы загрузили товарища))) От простенького вопроса по логике работы алгоритма запугали его кросплатформенными иньекциями.

Не запугали. Просто проект который делаю, возможно реально вызовет интерес у конкурентов, года через два точно.

А я не хочу тратить время на глубокое изучения языка, в том время как могу обратиться к более квалифицированному специалисту, считаю это нормально и правильно.

mendel
На сайте с 06.03.2008
Offline
183
#28

Специалист специалистом, но... уберите всё не нужное в "вторую очередь".

Выбор филиалов это важно или можно их списком сделать?

Чисто статья и чисто поиск по ней?)

Аякс это важно? Ведь сделав смену страницы после каждого выбора, вы бы упростили логику и сами бы не запутались. Программист не запутается, но час времени сэкономит. Не в том дело что обсуждаем, а в общем подходе. Сократите еще больше. Наверняка в других местах излишком тоже много.

У меня друг пятый год "запускается". Пятая версия сайта. Только выкатили версию под сео, вот только в этом месяце реальный траф пошел, со следующего месяца начинается монетизация. Пятый год! Дорабатывать! Функционал! Проект крутой, да, но блин!

veleg
На сайте с 30.01.2011
Offline
142
#29
mendel:
Специалист специалистом, но... уберите всё не нужное в "вторую очередь".
Выбор филиалов это важно или можно их списком сделать?
Чисто статья и чисто поиск по ней?)
Аякс это важно? Ведь сделав смену страницы после каждого выбора, вы бы упростили логику и сами бы не запутались. Программист не запутается, но час времени сэкономит. Не в том дело что обсуждаем, а в общем подходе. Сократите еще больше. Наверняка в других местах излишком тоже много.
У меня друг пятый год "запускается". Пятая версия сайта. Только выкатили версию под сео, вот только в этом месяце реальный траф пошел, со следующего месяца начинается монетизация. Пятый год! Дорабатывать! Функционал! Проект крутой, да, но блин!

Я б туда еще несколько полей воткнул + создание пользователем своих форм, для клиентов.

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

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

mendel
На сайте с 06.03.2008
Offline
183
#30

Аналог гуглоформ?)

Тоже хочу сделать, но пока руки не дошли. Так что у меня пока все формы только через админа создаются.

1 234

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