1) выбор темы пользователем
2) обработка AJAX ом данных и в соответствии с выбором пользователя вытаскиваем из БД нужное
3) вывод нужной информации в одном из блоков сайта .
Все бы ничего и выглядит очень просто Но вот как то заморочился я насчет безопасности такого рода проектирования сайта и нашел очень мало информации по этому поводу . Суть в том что меня беспокоит пункт Намбер 2 ) . Поскольку слыхал я что AJAX сам по себе является одной большой дырой - для созидателя и подарком для хаккера . В связи с этим вопрос - есть ли "особые, специальные" методы для сохранения безопасности в случае работы с AJAX .
Благодарочка за ответы заранее .
Спустя 3 минуты, 41 секунда (6.07.2011 - 20:29) Winston написал(а):
Цитата (andrey888 @ 6.07.2011 - 20:25) |
меня беспокоит пункт Намбер 2 ) |
Что там опасного ?
Ты ведь просто посылаешь запрос php файлу, а там главное корректно обработать все что в запросе пришло, и возвратить результат.
Спустя 1 час, 52 минуты, 44 секунды (6.07.2011 - 22:21) andrey888 написал(а):
Ок . Ну вот смотри ,как пример нашел в глубинах сети статейку
http://www.xakep.ru/post/46875/default.asp?print=true
Про сессии - понятно , но очень просто для маломальски подготовленного хаккера .. Вот вариант защиты с сопровождением каждого запроса строкой while(1); а потом проверка есть ли оно ( если я все правильно понял , если нет - поправь буду только признателен ) - эт вроде как поинтереснее ...
В принципе вот об этом и спрашиваю ..
Если не сложно напиши пример как бы ты обработал данные ..
Благодарю .
http://www.xakep.ru/post/46875/default.asp?print=true
Про сессии - понятно , но очень просто для маломальски подготовленного хаккера .. Вот вариант защиты с сопровождением каждого запроса строкой while(1); а потом проверка есть ли оно ( если я все правильно понял , если нет - поправь буду только признателен ) - эт вроде как поинтереснее ...
В принципе вот об этом и спрашиваю ..
Если не сложно напиши пример как бы ты обработал данные ..
Благодарю .
Спустя 9 часов, 10 минут, 20 секунд (7.07.2011 - 07:32) Белый Тигр написал(а):
Не стоит думать что AJAX это прям ужас в плане безопасности 
Это простая технология которая позволяет в фоновом режиме отправлять запросы на сервер и принимать от него ответы. Она, по сути, ничем не отличается об обычного перехода браузера по ссылкам - и там и там вы делаете обычные запросы к серверу с определёнными параметрами в URL или теле запроса. Так что здесь для защиты стоит использовать стандартные правила типа экранирования спец-символов при помещении пользовательских данных в SQL-запрос.
Что касается "while(1)", то это защита от JavaScript-Hijacking. Чтоб особо не заморачиваться, можно отдавать с сервера необходимый JSON (или JSONP-конструкции) проверяя тип или природу запроса - если совершён POST-запрос или он совершён AJAX`ом. JSH возможен только когда вы получаете JSON GET-методом т.к. включение его тела в код страницы, при проведении JSH, осуществляется именно GET-методом.

Это простая технология которая позволяет в фоновом режиме отправлять запросы на сервер и принимать от него ответы. Она, по сути, ничем не отличается об обычного перехода браузера по ссылкам - и там и там вы делаете обычные запросы к серверу с определёнными параметрами в URL или теле запроса. Так что здесь для защиты стоит использовать стандартные правила типа экранирования спец-символов при помещении пользовательских данных в SQL-запрос.
Что касается "while(1)", то это защита от JavaScript-Hijacking. Чтоб особо не заморачиваться, можно отдавать с сервера необходимый JSON (или JSONP-конструкции) проверяя тип или природу запроса - если совершён POST-запрос или он совершён AJAX`ом. JSH возможен только когда вы получаете JSON GET-методом т.к. включение его тела в код страницы, при проведении JSH, осуществляется именно GET-методом.
Спустя 5 часов, 36 минут, 26 секунд (7.07.2011 - 13:08) andrey888 написал(а):
Конкретный пример :
1) Принимаем значение в функцию ,
2) Проверям на то что это номер (должен быть только номер) - достаточна ли такая проверка ?
3) Посылаем запрос файлу aj.php который в соответствии с номером выведет в div нужную информацию
В файле aj.php которому пришел запрос проверка следующая
1)Проверили на то что это номер и что он больше нуля
2)Для особо хитрозадых таки превращаем значение еще раз в номер
3)Проверенную переменную толкаем в простенький запрос .
Достаточно ли ? Укажите где что поменять или добавить на ваш взгляд (если он конечно профессиональный) . Белый тигр - ты вроде знающий - в конкретном примере что можешь посоветовать ?
1) Принимаем значение в функцию ,
2) Проверям на то что это номер (должен быть только номер) - достаточна ли такая проверка ?
3) Посылаем запрос файлу aj.php который в соответствии с номером выведет в div нужную информацию
function GetArt(p){
if(!isNaN(p)){
var xmlhttp = CreateRequest();
xmlhttp.open('GET', "aj.php?num="+p, true );
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4){
var x=document.getElementById('ajM');
x.style.display='block';
x.innerHTML=''+xmlhttp.responseText;
if(p==0){x.style.display='none';}
}
}
xmlhttp.send(null);
}else{ return ;}
}
В файле aj.php которому пришел запрос проверка следующая
1)Проверили на то что это номер и что он больше нуля
2)Для особо хитрозадых таки превращаем значение еще раз в номер
3)Проверенную переменную толкаем в простенький запрос .
if(isset($_GET['num']) && is_numeric($_GET['num']) && $_GET['num']>0){
$num=(int)$_GET['num'];
$sql="SELECT * FROM `smth` WHERE `Id`={$num};";
и т.д.
Достаточно ли ? Укажите где что поменять или добавить на ваш взгляд (если он конечно профессиональный) . Белый тигр - ты вроде знающий - в конкретном примере что можешь посоветовать ?
Спустя 13 минут, 59 секунд (7.07.2011 - 13:22) Winston написал(а):
Цитата (andrey888 @ 7.07.2011 - 13:08) |
if(isset($_GET['num']) && is_numeric($_GET['num']) && $_GET['num']>0){ $num=(int)$_GET['num']; |
От чего такая паранойя?
Достаточно просто написать
$num = isset($_GET['num']) ? (int)$_GET['num'] : NULL;
$sql="SELECT * FROM `smth` WHERE `Id`= " . $num;
Спустя 2 часа, 49 минут, 2 секунды (7.07.2011 - 16:11) Белый Тигр написал(а):
Поддерживаю PHPprogramer - проще все проверки заменить простым преобразованием в числовой тип. Только тогда не
Цитата |
$num = isset($_GET['num']) ? (int)$_GET['num'] : NULL; |
а что-то типа
Цитата |
$num = isset($_GET['num']) ? (int)$_GET['num'] : 0; |
Ведь попади NULL в запрос, сразу произойдёт ошибка (параметр id не заключен в кавычки)
В остальном с приведённым примером всё хорошо. Единственное что могу посоветовать, это использование jQuery (или любого другого фреймворка), а не чистого JS, и готовых классов типа PEAR::MDB2 для работы с SQL-запросами.
Спустя 1 час, 51 минута, 21 секунда (7.07.2011 - 18:03) twin написал(а):
Белый Тигр
Цитата |
Единственное что могу посоветовать, это использование jQuery (или любого другого фреймворка), а не чистого JS, и готовых классов типа PEAR::MDB2 для работы с SQL-запросами. |
Не стоит на этом останавливаться. Лучше сразу взять готовую CMS, а еще лучше нанять группу квалифицированных программистов. А еще лучше нанять штат курьеров и пусть развозят инфу по домам юзеров на флэшках.
Чем JS не угодил то? Зачем таскать герлянду фреймворков для одного простенького запроса?
Спустя 3 часа, 51 минута, 26 секунд (7.07.2011 - 21:54) andrey888 написал(а):
Насчет паранои - проект в разработке , конечно перед выпуском все подобные штучки будут приведены в порядок . С другой стороны - защиты много не бывает - даже если все три функции в параноидальном порядке совершают одно и то же действие
Насчет фрейморков - согласен , для простой по идее задачи как то нелогично подключать такой лишний объемный "jQuery" . Да ведь и jQuery - это тот же самый JavaScript .
А вот по поводу классов (типа MDB2 для SQL-запросов) хотелось бы спросить .
Во первых насколько я знаю это прерогатива не только меня как кодера но и хостинга . Хоть он (хостинг) у меня и совсем неплохой - лишний треп с ними думаю не на пользу . Разве не достаточно будет для вывода информации с БД использовать не сами таблицы а их виды то бишь VIEW .
Ну а конечно там где например пользователю позволено внести что то свое - проносить это все через mysql_real_escape_string а выводить только с htmlspecialchars.
Чем еще мне могут помочь такие классы как MDB2 и его собратья???
Благодарю за ответы.

Насчет фрейморков - согласен , для простой по идее задачи как то нелогично подключать такой лишний объемный "jQuery" . Да ведь и jQuery - это тот же самый JavaScript .
А вот по поводу классов (типа MDB2 для SQL-запросов) хотелось бы спросить .
Во первых насколько я знаю это прерогатива не только меня как кодера но и хостинга . Хоть он (хостинг) у меня и совсем неплохой - лишний треп с ними думаю не на пользу . Разве не достаточно будет для вывода информации с БД использовать не сами таблицы а их виды то бишь VIEW .
Ну а конечно там где например пользователю позволено внести что то свое - проносить это все через mysql_real_escape_string а выводить только с htmlspecialchars.
Чем еще мне могут помочь такие классы как MDB2 и его собратья???
Благодарю за ответы.
Спустя 14 минут, 2 секунды (7.07.2011 - 22:08) ИНСИ написал(а):
andrey888 если хакерам надо будет взломать твой сайт, первое что они будут проверять на дыры, не твой ajax, а сервер чтобы получить шел доступ и там уже все править, а именно твои файлы.
Если тебя устроит, то почитай про XMLHttpRequest.
Если тебя устроит, то почитай про XMLHttpRequest.
Спустя 1 час, 33 минуты, 26 секунд (7.07.2011 - 23:41) andrey888 написал(а):
Ну SSH на моем сервере вроде как закрыт , да и хостинг следящий за своей репутацией . За это я как раз и не беспокоюсь , а беспокоюсь за SQL injection аттаки и XSS . Функции упомянутые мной в конце второго абзаца предыдущего сообщения от этого как раз и защищают , но при использовании AJAX думалось мне есть некие "дополнительные" места на которые стоит обращать внимание .
Благодарю.
Благодарю.
Спустя 5 минут, 19 секунд (7.07.2011 - 23:47) DySprozin написал(а):
;;при использовании AJAX думалось мне есть некие "дополнительные" места
;;на которые стоит обращать внимание .
скажем, так... при использовании Ajax нужно особенно внимательно смотреть за отсутствием в своем коде XSS - в идеале страница, использующая ajax, не должна содержать никаких $_GET и $_POST переменных... XSS сама по себе опасна, а при использовании ajax ее опасность возрастает в десятки раз (;
;;на которые стоит обращать внимание .
скажем, так... при использовании Ajax нужно особенно внимательно смотреть за отсутствием в своем коде XSS - в идеале страница, использующая ajax, не должна содержать никаких $_GET и $_POST переменных... XSS сама по себе опасна, а при использовании ajax ее опасность возрастает в десятки раз (;
Спустя 6 часов, 54 минуты, 1 секунда (8.07.2011 - 06:41) Белый Тигр написал(а):
Цитата |
Не стоит на этом останавливаться. Лучше сразу взять готовую CMS, а еще лучше нанять группу квалифицированных программистов. А еще лучше нанять штат курьеров и пусть развозят инфу по домам юзеров на флэшках. Чем JS не угодил то? Зачем таскать герлянду фреймворков для одного простенького запроса? |
Цитата |
Насчет фрейморков - согласен , для простой по идее задачи как то нелогично подключать такой лишний объемный "jQuery" . Да ведь и jQuery - это тот же самый JavaScript . |
Я говорил не об одном конкретном запросе, а вообще. С jQuery код уменьшается в разы, нет маяты с совместимостью операций с XHR в разных браузерах. MDB2 - отличный класс работы с БД. Главное чем он полезен - гарантированное экранирование всех входящих в запрос данных. Ну и интерфейс у него хороший. Так что не стоит воспринимать в штыки любые готовые разработки

Цитата |
Ну а конечно там где например пользователю позволено внести что то свое - проносить это все через mysql_real_escape_string |
Вот, кстати, хороший пример. Можно на native писать для каждой переменной вызов mysql_real_escape_string(), а можно с MDB2 писать знак "?". Эффект одинаков, а разница в кол-ве символов огромна. Особенно в масштабах проекта, пусть даже и маленького. Да и с mysql_real_escape_string() можно пролететь если не поместить в запросе проверяемую переменную в кавычки, а MDB2 их сам всегда расставляет в обязательном порядке.
Спустя 23 дня, 7 часов, 3 минуты, 44 секунды (31.07.2011 - 13:44) andrey888 написал(а):
Благодарю всех за ответы . Уважуха всем большая .

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )