Например, как можно обработать такой запрос (идет до доктайпа)
$result = mysql_query ("SELECT * FROM settings WHERE page='index'",$db);
Структура, которую я использовал в запросах, где были переменные - тут не проходит. (пример)
$result = mysql_query ("SELECT * FROM settings WHERE page='".mysql_real_escape_string(index)"'",$db);
Syntax error выводит
И есть ли необходимость обрабатывать все запросы, к которым нет подключения извне?
И еще: в конце запроса Попов рекомендует ставить индификатор $db, понятно зачем он нужен, но не перечеркивает ли это все усилия защититься, не может ли после него быть прописан посторонний код?
И по INCLUDE - блоки сайта (футер, меню хедер и т.д.) я подключаю вот так вот:
$topmenu = 'blocks/topmenu.php';
опасно ли это?
Спасибо.
Спустя 9 минут, 28 секунд (15.09.2011 - 23:57) inpost написал(а):
$db не нужен, если работаешь с 1 БД, что ты будешь делать в 99% случаев.
Уязвимость появляется там, где человек может вставить свои данные, допустим через адресную строку, то применять надо для $_GET.
mysql_real_escape_string(index) - это такое index ? если переменная, то где знак переменной? я уверен, что это не константа. Строки надо брать в кавычки, отсюда и СИНТАКСИЧЕСКАЯ ОШИБКА, перевод на англ: "Syntax error".
Человек передаёт данные скрипту только через $_POST, $_GET, $_COOKIE, так вот, эти данные и надо обрабатывать на (int) - число, и на mysql_real_escape_string - текст.
Уязвимость появляется там, где человек может вставить свои данные, допустим через адресную строку, то применять надо для $_GET.
mysql_real_escape_string(index) - это такое index ? если переменная, то где знак переменной? я уверен, что это не константа. Строки надо брать в кавычки, отсюда и СИНТАКСИЧЕСКАЯ ОШИБКА, перевод на англ: "Syntax error".
Человек передаёт данные скрипту только через $_POST, $_GET, $_COOKIE, так вот, эти данные и надо обрабатывать на (int) - число, и на mysql_real_escape_string - текст.
Спустя 41 минута, 3 секунды (16.09.2011 - 00:38) guttenberg написал(а):
Спасибо, inpost.
page - это строка в БД из которой я вытягиваю данные для статичных страниц сайта - в данном примере для странице index. Ну так по урокам Попова. Может ли тут натворить бед хакер? Или я уже перестраховываюсь, леплю проверки куда попало и что-то делаю неправильно?
Я понял и пока вынес для себя,
1) что надо просталять int или intval перед передачей числового значения методом GET - чтобы не могли прописать сторонний код в адресную строку (у меня передаются только числа)
2) в файле .htacces надо выключить php_flag register_globals
3) и обрабатывать данные при вводе в базу функцией htmlspecialchars и stripslashes
А при выводе из базы в браузер надо ли что-то с этими данными делать? или просто пишем: echo $myrow['text'];
И, подскажите, пжл, что по include, если я ей подключаю блоки сайта. Опасно или нет?
page - это строка в БД из которой я вытягиваю данные для статичных страниц сайта - в данном примере для странице index. Ну так по урокам Попова. Может ли тут натворить бед хакер? Или я уже перестраховываюсь, леплю проверки куда попало и что-то делаю неправильно?
Я понял и пока вынес для себя,
1) что надо просталять int или intval перед передачей числового значения методом GET - чтобы не могли прописать сторонний код в адресную строку (у меня передаются только числа)
2) в файле .htacces надо выключить php_flag register_globals
3) и обрабатывать данные при вводе в базу функцией htmlspecialchars и stripslashes
А при выводе из базы в браузер надо ли что-то с этими данными делать? или просто пишем: echo $myrow['text'];
И, подскажите, пжл, что по include, если я ей подключаю блоки сайта. Опасно или нет?
Спустя 15 минут, 24 секунды (16.09.2011 - 00:53) inpost написал(а):
guttenberg
include - нет, если в начале будет проверка на невозможность подключить файл из-вне основного файла. Более подробно: irbis-team.com .
htmlspecialchars - только при выводе из БД, а не при вводе. При вводе в БД я уже сказал, что использовать стоит.
include - нет, если в начале будет проверка на невозможность подключить файл из-вне основного файла. Более подробно: irbis-team.com .
htmlspecialchars - только при выводе из БД, а не при вводе. При вводе в БД я уже сказал, что использовать стоит.
Спустя 3 часа, 6 минут, 15 секунд (16.09.2011 - 04:00) guttenberg написал(а):
блин, теперь пишет вот это
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''data' WHERE 'id'=1' at line 1
вернул все назад - все равно ругается
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''data' WHERE 'id'=1' at line 1
вернул все назад - все равно ругается
Спустя 21 минута, 31 секунда (16.09.2011 - 04:21) inpost написал(а):
ну так покажи этот запрос. Ты не так кавычки расставил.
Спустя 46 секунд (16.09.2011 - 04:22) Invis1ble написал(а):
guttenberg
Цитата |
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''data' WHERE 'id'=1' at line 1 |
так ты запрос тоже показывай, а не только текст ошибки, чай не экстрасенсы.
Спустя 12 часов, 2 секунды (16.09.2011 - 16:22) guttenberg написал(а):
Угу. С кавычками натупил. Разобрался немного вроде. Спасибо за помощь и советы.
Блин, хорошо, что на форум залез - обидно было бы сайт только что сделанный угробить.
Только вот еще один вопрос: все-таки как посоветуете обработать такой запрос:
$result = mysql_query ("SELECT * FROM settings WHERE page='index'",$db);
Page - это строка в БД. В ней лежит информация для страниц index, news, view_cat ну и других. Информация - это я подразумеваю описание мета тегов, краткое описание самой страницы и прочее. И для каждой страницы я подставляю в page необходимое значение
И вот еще: если при выводе из БД, обрабатываю данные htmlspecialchars, то теряется вся разметка и стили. Почитал про эту функцию. Понял, что это она и должна делать. Так получается ей только комментарии пользователей к моим заметкам обрабатывать надо и поисковые запросы, чтобы не добавили лишний код?
А если я свои данные вывожу из БД? То как тогда?
Спасибо. Сорри за ламерские формулировки - еще сложно лаконично объяснять что я имею в виду.
Блин, хорошо, что на форум залез - обидно было бы сайт только что сделанный угробить.
Только вот еще один вопрос: все-таки как посоветуете обработать такой запрос:
$result = mysql_query ("SELECT * FROM settings WHERE page='index'",$db);
Page - это строка в БД. В ней лежит информация для страниц index, news, view_cat ну и других. Информация - это я подразумеваю описание мета тегов, краткое описание самой страницы и прочее. И для каждой страницы я подставляю в page необходимое значение
И вот еще: если при выводе из БД, обрабатываю данные htmlspecialchars, то теряется вся разметка и стили. Почитал про эту функцию. Понял, что это она и должна делать. Так получается ей только комментарии пользователей к моим заметкам обрабатывать надо и поисковые запросы, чтобы не добавили лишний код?
А если я свои данные вывожу из БД? То как тогда?
Спасибо. Сорри за ламерские формулировки - еще сложно лаконично объяснять что я имею в виду.
Спустя 3 минуты, 33 секунды (16.09.2011 - 16:26) vital написал(а):
Цитата |
$db не нужен, если работаешь с 1 БД, что ты будешь делать в 99% случаев. |
Не правда. зависит от настроек. Есть такой вариант, когда линк на соединение с бд надо указывать всегда. ПРичем, даже для функции mysql_real_escape_string()
Спустя 2 часа, 36 минут, 29 секунд (16.09.2011 - 19:02) inpost написал(а):
vital
Приведи пример. Ни разу в жизни этого не надо было, + в доках сказано, что если работаешь с 1 БД, то он не нужен. Может ты что-то перепутал? Может ты говоришь про mysqli ?
guttenberg
Зачем тебе его обрабатывать? В запрос ничего не попадает из-вне, значит и обработка не нужна.
htmlspecialchars - это защита от той информации при выводе, что ввёл человек из-вне, если ты сам добавляешь, то обрабатывать не надо, чтобы стили не ломать.
Для комментариев существуют bb-коды, как на нашем форуме для формы. В инете полным полно готовых примеров, так же конкурс у нас был в разделе "конкурсы" на бб-декодер. Как дополнение, он же есть на irbis-team.com , там очень хороший пример.
Вообщем, для обычных посетителей можно только бб-коды делать, то есть сначала переменную прогоняют через htmlspecialchars, а потом через замену таких тегов: [ b] на такие <b> , и получаешь ты область допустимых юзерам тегов. Для себя использую обычную форму без всяких бб-тегов, если это для админки, то лучший вариант предоставить сразу 2 редактора, один обычный, где все теги работают, второй с бб-тегами для обработки в дальнейшем.
Приведи пример. Ни разу в жизни этого не надо было, + в доках сказано, что если работаешь с 1 БД, то он не нужен. Может ты что-то перепутал? Может ты говоришь про mysqli ?
guttenberg
Зачем тебе его обрабатывать? В запрос ничего не попадает из-вне, значит и обработка не нужна.
htmlspecialchars - это защита от той информации при выводе, что ввёл человек из-вне, если ты сам добавляешь, то обрабатывать не надо, чтобы стили не ломать.
Для комментариев существуют bb-коды, как на нашем форуме для формы. В инете полным полно готовых примеров, так же конкурс у нас был в разделе "конкурсы" на бб-декодер. Как дополнение, он же есть на irbis-team.com , там очень хороший пример.
Вообщем, для обычных посетителей можно только бб-коды делать, то есть сначала переменную прогоняют через htmlspecialchars, а потом через замену таких тегов: [ b] на такие <b> , и получаешь ты область допустимых юзерам тегов. Для себя использую обычную форму без всяких бб-тегов, если это для админки, то лучший вариант предоставить сразу 2 редактора, один обычный, где все теги работают, второй с бб-тегами для обработки в дальнейшем.
Спустя 8 часов, 9 минут, 39 секунд (17.09.2011 - 03:12) guttenberg написал(а):
Спасибо, impost. Укладывается в голове потихоньку)))
Попробовал сделать вот так вот:
if (isset ($_POST['text'])) {$text = $_POST['text'];}
$text = stripslashes ($text);
$text = htmlspecialchars ($text);
$text = mysql_real_escape_string ($text);
А тут уже соединение с БД вроде такого
$result = mysql_query ("INSERT INTO commetnts (text) VALUES ('$text')",$db);
JS скрипт попробовал - не проходит. Может так быть или это неправильно?
Спасибо.
Попробовал сделать вот так вот:
if (isset ($_POST['text'])) {$text = $_POST['text'];}
$text = stripslashes ($text);
$text = htmlspecialchars ($text);
$text = mysql_real_escape_string ($text);
А тут уже соединение с БД вроде такого
$result = mysql_query ("INSERT INTO commetnts (text) VALUES ('$text')",$db);
JS скрипт попробовал - не проходит. Может так быть или это неправильно?
Спасибо.
Спустя 20 минут, 4 секунды (17.09.2011 - 03:32) inpost написал(а):
1. Если у тебя есть $_POST['text'], то мы создаём $text, а если нет? Что тогда? ТОгда $text не существует, но второй строчкой ты пытаешься обработать несуществующую переменную, как же так? Ошибка, её ведь нет.
2. Выше я писал, что надо использовать для обработки. Разве там что-то говорилось про "stripslashes" ?
3. Говорю, что не стоит использовать линк на БД, а ты всё равно его используешь.
4. Имена ячеек, таблиц надо брать в обратные одинарные кавычки, вот так:
Хотя я бы сделал так запрос:
5. Оформляй код [ php] тегами, они есть в ББ кодах сверху, под цветами, на второй полоске.
Хотя самого твоего вопроса я так и не понял.
2. Выше я писал, что надо использовать для обработки. Разве там что-то говорилось про "stripslashes" ?
3. Говорю, что не стоит использовать линк на БД, а ты всё равно его используешь.
4. Имена ячеек, таблиц надо брать в обратные одинарные кавычки, вот так:
$result = mysql_query ("INSERT INTO `commetnts` (`text`) VALUES ('".$text."')");
Хотя я бы сделал так запрос:
$result = mysql_query("INSERT INTO `commetnts` SET
`text` = '".mysql_real_escape_string($_POST['text'])."'
") or die(mysql_error());
5. Оформляй код [ php] тегами, они есть в ББ кодах сверху, под цветами, на второй полоске.
Хотя самого твоего вопроса я так и не понял.
Спустя 4 дня, 19 часов, 18 минут, 19 секунд (21.09.2011 - 22:50) guttenberg написал(а):
Спасибо, inpost за подсказки и помощь. Как формировать запросы и зачем там обратные кавычки - разобрался.
А как вы оцениваете такую проверку регулярными выражениями, которую предлагает Попов
Не будет ничего плохого, если я буду использовать ее и параллельно обрабатывать переменные, передаваемые методом GET функцией (int) ? У меня все переменные - имеют числовое значение.
А как вы оцениваете такую проверку регулярными выражениями, которую предлагает Попов
if (!preg_match("|^[\d]+$|", $cat)) {
exit ("<p> Неверный формат запроса. Проверьте URL! </p>");
}
Не будет ничего плохого, если я буду использовать ее и параллельно обрабатывать переменные, передаваемые методом GET функцией (int) ? У меня все переменные - имеют числовое значение.
Спустя 6 минут, 33 секунды (21.09.2011 - 22:57) Invis1ble написал(а):
Цитата |
Не будет ничего плохого, если я буду использовать ее и параллельно обрабатывать переменные, передаваемые методом GET функцией (int) ? У меня все переменные - имеют числовое значение. |
будет лишняя нагрузка на сервер
если ты приводишь данные к типу int, то данная проверка нафиг не нужна
и еще: вместо этой ^^ хрени существует нативная функция is_numeric()
Спустя 4 минуты, 1 секунда (21.09.2011 - 23:01) inpost написал(а):
die, exit - нельзя такое видеть. Человеку необходимо выдавать либо 404, либо внутрь страницы писать, что такая страница отсутствует.
Я уверен, что у тебя в итоге выйдет белый экран с надписью... а где дизайн, стиль, шарм? В гугле напиши: "Красивые 404", и полюбуйся, как правильно оформлять.
К тому же надо не думать о том, как правильно пользоваться регуляркой, а понимать её суть и использовать по назначению Можно с регулярки отправлять человека на 404, но никак не то, что тут используется. К тому же там же в адресной строке не всегда ты будешь цифры хранить.
Если абсолютно проверять, то как сказал Инвиз, is_numeric, но это всё лишнее
Я уверен, что у тебя в итоге выйдет белый экран с надписью... а где дизайн, стиль, шарм? В гугле напиши: "Красивые 404", и полюбуйся, как правильно оформлять.
К тому же надо не думать о том, как правильно пользоваться регуляркой, а понимать её суть и использовать по назначению Можно с регулярки отправлять человека на 404, но никак не то, что тут используется. К тому же там же в адресной строке не всегда ты будешь цифры хранить.
Если абсолютно проверять, то как сказал Инвиз, is_numeric, но это всё лишнее
Спустя 1 час, 26 минут, 28 секунд (22.09.2011 - 00:27) guttenberg написал(а):
Эх... Думал хоть кусочек Попова оставить))) На память.
Inpost, Invis1ble - спасибо за помощь и понятные новичку разъяснения. Интересная штука этот PHP. Буду учить дальше - и от работы отвлекаешься, отдыхаешь и как хобби - отличная штука.
Inpost, Invis1ble - спасибо за помощь и понятные новичку разъяснения. Интересная штука этот PHP. Буду учить дальше - и от работы отвлекаешься, отдыхаешь и как хобби - отличная штука.
Спустя 8 часов, 44 минуты, 13 секунд (22.09.2011 - 09:11) Dagot написал(а):
А почему вообще программисты становятся хакерами?
Помоему разработкой можно больше заработать, чем хакерством.
Помоему разработкой можно больше заработать, чем хакерством.
Спустя 16 минут, 29 секунд (22.09.2011 - 09:28) Invis1ble написал(а):
Хакерами становятся не все программисты. Многим это не светит, имхо. Хакер - это уровень мастерства.
Я думаю, ты имеешь ввиду крекеров. Но мне кажется, что вопрос не совсем по адресу. Я например затрудняюсь на него ответить.
Я думаю, ты имеешь ввиду крекеров. Но мне кажется, что вопрос не совсем по адресу. Я например затрудняюсь на него ответить.
Спустя 1 минута, 57 секунд (22.09.2011 - 09:30) twin написал(а):
Хакер - слово изначально не ругательное. Хакерами были высококлассные специалисты, которые искали тонкие места в ПО, делали патчи и предоставляли разработчикам. Звание "хакер" нужно было заслужить, это была элита.
Потом появилась школота, которая не признает кодекс чести и использует знания либо в корыстных, либо в хулиганских целях. И понятие "хакер" дискредетировали.
Сейчас за взлом под заказ платят хорошие деньги, ибо это преступление и карается законом.
Ну и ЧСВ у школоты.
ПСТО зохвачен!!11адынадын. и так далее. Не от большого ума.
Потом появилась школота, которая не признает кодекс чести и использует знания либо в корыстных, либо в хулиганских целях. И понятие "хакер" дискредетировали.
Сейчас за взлом под заказ платят хорошие деньги, ибо это преступление и карается законом.
Ну и ЧСВ у школоты.
ПСТО зохвачен!!11адынадын. и так далее. Не от большого ума.
Спустя 19 минут, 30 секунд (22.09.2011 - 09:49) Michael написал(а):
Цитата (Dagot @ 22.09.2011 - 08:11) |
А почему вообще программисты становятся хакерами? Помоему разработкой можно больше заработать, чем хакерством. |
Это еще протест.
Разработкой ПО по определению как бы должны заниматься программисты, но на практике программистов из многих областей "уходят". Мол дорого платить программисту. И что разработка ПО должна быть доступна обычным пользователям путем работы во всяких конструкторах и т.д. В вебе это видно на примерах Джумлы, Друпал и т.д. Настраивая, накидывая как они говорят ПО или сайт, сами такие создатели о том что внутри творения творится вообще не понимают. Бывает даже fullhtml фильтр для комментариев включают. Чем больше программистов "уходят"(не сами, а их), тем больше желание похакерить.
Спустя 17 часов, 8 минут, 27 секунд (23.09.2011 - 02:58) guttenberg написал(а):
Поубивал все заморочки Попова с циклами do...while, извлечением array (заменил на assoc как советовал на своем сайте Twin) выкинул практически во всех местах цикл printf, заменил обычным print, отказался от HEREDOC - кое-где пришлось пошурипить мозгами, но в итоге - ВСЕ работает!!! И мне кажется, может я, конечно, уже просто придумываю - но даже на Денвере, где я тестирую сайт, что стало как-то шустрее. Нет этого колеса загрузки, который был около секунды с поповским кодом. Клацаешь - и мгновенно открывает ссылки.
Теперь еще поучусь, почитаю месяца два - да, наверное, можно будет в сеть выкладывать. Надо пройти ваши бесплатные курсы и подумать над приобретением платных - если все так толково и по делу - то не жалко и заплатить, цены у вас невысокие. Не то что у Попова. Хотя его пластинка мне по наследству досталась. Не покупал.
Кто-то из новичков проходил курсы? Трудно там? Или разобраться можно?
Спустя 6 минут, 27 секунд guttenberg написал(а):
Хотя, надо признаться, что поначалу воспринял ваш форум и сайт twin'а в штыки))) Как же так? На хорошего Попова, который учит программировать и гонят какие-то ....
Потом стало доходить, что к чему))) В общем, спасибо большое.
Теперь еще поучусь, почитаю месяца два - да, наверное, можно будет в сеть выкладывать. Надо пройти ваши бесплатные курсы и подумать над приобретением платных - если все так толково и по делу - то не жалко и заплатить, цены у вас невысокие. Не то что у Попова. Хотя его пластинка мне по наследству досталась. Не покупал.
Кто-то из новичков проходил курсы? Трудно там? Или разобраться можно?
Спустя 6 минут, 27 секунд guttenberg написал(а):
Хотя, надо признаться, что поначалу воспринял ваш форум и сайт twin'а в штыки))) Как же так? На хорошего Попова, который учит программировать и гонят какие-то ....
Потом стало доходить, что к чему))) В общем, спасибо большое.
Спустя 48 минут, 21 секунда (23.09.2011 - 03:46) Dagot написал(а):
Цитата (guttenberg @ 23.09.2011 - 00:04) |
Хотя, надо признаться, что поначалу воспринял ваш форум и сайт twin'а в штыки))) Как же так? На хорошего Попова, который учит программировать и гонят какие-то .... Потом стало доходить, что к чему))) В общем, спасибо большое. |
Я тоже, но однако только после, жирафиков и верблюдов твина, более менее осознано начал подходить вообще к пхп. А через 3 месяца решил зарегаться тут.
Спустя 6 минут, 13 секунд Dagot написал(а):
Цитата (twin @ 22.09.2011 - 06:30) |
Хакер - слово изначально не ругательное. Хакерами были высококлассные специалисты, которые искали тонкие места в ПО, делали патчи и предоставляли разработчикам. Звание "хакер" нужно было заслужить, это была элита. Потом появилась школота, которая не признает кодекс чести и использует знания либо в корыстных, либо в хулиганских целях. И понятие "хакер" дискредетировали. Сейчас за взлом под заказ платят хорошие деньги, ибо это преступление и карается законом. Ну и ЧСВ у школоты. ПСТО зохвачен!!11адынадын. и так далее. Не от большого ума. |
Да и сейчас хорошие хаккеры помоему элита.
Допустим группа хаккеров Anonimous. Разве они не хозяева инета. Стоит только им захотеть и твой сайт рухнет. А школота это так... они побалуются пару месяцев, поймут что это все не так круто как показывают в кино и успокаиваются.
з.ы. Ой я не знал что тут, посты друг к другу не приклеиваются, если два подрят запостить. Так вроде нельзя делать да?
Спустя 47 минут, 1 секунда (23.09.2011 - 04:33) Invis1ble написал(а):
Dagot
Цитата |
Ой я не знал что тут, посты друг к другу не приклеиваются, если два подрят запостить |
Приклеиваются. Посмотри, как волшебным образом это произошло!
На самом деле, да, лучше редактировать предыдущий пост. Склеивать могут модераторы, эксперты и админы.
Спустя 5 дней, 11 часов, 37 минут, 54 секунды (28.09.2011 - 16:11) andrey888 написал(а):
Топик "несколько вопросов по безопасности" думаю мой вопрос можно здесь же спросить . Есть панель администратора - соответсвенно имя и пароль чтоб в нее зайти . После правильно введенных данных заходим . Нахождение в админке обеспечивает существование
$_SESSION["test"]=2;как пример . Проверка с существованием этой переменной находтся в файле att.php опять же как пример . Этот файл помещен в начало всех файлов с которых производится та или иная монипуляция со скриптом , чтоб удостовериться что оная существует .. Вопрос такой , есть файлы как например functions.php где расположен один php с функциями , то есть никаких монипуляция с этой страницы сделать "по идее" нельзя . Нужно ли там тоже размещять файл att.php ? если не размещать то можно без логина и пароля перейти на эту страницу , на ней конечно не будет ничего , но безопасно ли такое ?
Спустя 1 день, 19 часов, 24 минуты, 3 секунды (30.09.2011 - 11:35) Белый Тигр написал(а):
Любые проверки должны быть только там где они необходимы. То есть в данном случае подключать этот файл к файлу с функциями не стоит. Где есть ограничение доступа - размещайте проверку там, но не более того.
P.S. а подобные подключаемые файлы с функциями и прочими "кишками" лучше всего запихнуть в одну директорию, и закрыть её .htaccess`ом от внешних обращений. Здесь как с проверкой сессии - доступ должен быть разрешён только к тем частям сайта, к которым это необходимо.
P.S. а подобные подключаемые файлы с функциями и прочими "кишками" лучше всего запихнуть в одну директорию, и закрыть её .htaccess`ом от внешних обращений. Здесь как с проверкой сессии - доступ должен быть разрешён только к тем частям сайта, к которым это необходимо.
Спустя 2 часа, 51 минута, 41 секунда (30.09.2011 - 14:27) andrey888 написал(а):
Thanks ..