|
|
|
|
|
для: Gandzas
(23.10.2006 в 17:16)
| | . - это текущая директория,
.. - это родительская директория
т.е. все остальные директории отличные от этих проходят, is_file() - проверяет является ли текущая позиция файлом. | |
|
|
|
|
|
|
|
для: Gandzas
(23.10.2006 в 17:16)
| | кроме того в случае с поименным перечислениям всегла можно добавить какое-то конкретное имя файла типа if ($file != "." && $file != ".." && $file != ".htaccess" && $file != "index.html") { и так далее | |
|
|
|
|
|
|
|
для: Trianon
(23.10.2006 в 15:20)
| | Спасибо.
А в чем разница?
Сможеть, если получит админский доступ.
Но в этом случае, говорить можно о взломе любого сайта :)) | |
|
|
|
|
|
|
|
для: Gandzas
(23.10.2006 в 15:05)
| | Строку
if ($file != "." && $file != "..") {
|
имеет смысл поменять на
if (is_file("files/$file")) {
|
Кроме того, если пользователь тем или иным образом сможет загрузить в каталог files собственный файл, опасность выполнения произвольного кода всё еще остается. | |
|
|
|
|
|
|
|
для: Gandzas
(23.10.2006 в 13:56)
| | Учитывая Вашу помощь, появился код:
<?
$p_values = array();
$count_files = 0;
if ($handle = opendir('files')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$p_values[$count_files] = trim(str_replace('.php', '', $file));
$count_files++;
}
}
closedir($handle);
}
$p = (isset($_GET['p'])) ? strtolower($_GET['p']) : 'cat';
if (in_array($p, $p_values)) {
require('files/'.$p.'.php');
} else {
die('No access');
}
?>
|
Сюда можно что-то еще добавить? | |
|
|
|
|
|
|
|
для: cheops
(23.10.2006 в 13:47)
| | Спасибо. :) | |
|
|
|
|
|
|
|
для: Gandzas
(23.10.2006 в 13:43)
| | Тогда вместо
<?php
if(eregi("(\.)",$p)) exit("не шали");
?>
|
можно использовать следующую проверку
<?php
if(preg_match("|[^\0-9a-z]|i",$p)) exit("не шали");
?>
|
она не пропустит ничего кроме цифр и букв. В принципе отсутствие точки тоже не даёт практически никаких шансов для манёвра злоумышленика, но так спокойнее :))) | |
|
|
|
|
|
|
|
для: cheops
(23.10.2006 в 13:40)
| | Да. Вообще файлы стараюсь обзывать только буквами | |
|
|
|
|
|
|
|
для: Gandzas
(23.10.2006 в 13:31)
| | Если работает, то лучше :))) (однако вероятность взлома всё равно остаётся, у вас $p какие значения может принимать? Только цифры и буквы?). | |
|
|
|
|
|
|
|
для: cheops
(23.10.2006 в 13:29)
| | Так какой вариант лучше?
<?php require("шапка.php"); ?>
или
<?php
$p = $_GET['p'];
if(!@$p) $p="cat";
if(eregi("(\.)",$p)) exit("не шали");
require("files/".$p.".php");
?> | |
|
|
|
|