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

Форум PHP

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

 

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

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

тема: php.ini

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

 
 автор: cheops   (23.10.2006 в 22:54)   письмо автору
 
   для: Gandzas   (23.10.2006 в 17:16)
 

. - это текущая директория,
.. - это родительская директория
т.е. все остальные директории отличные от этих проходят, is_file() - проверяет является ли текущая позиция файлом.

   
 
 автор: Gandzas   (23.10.2006 в 17:21)   письмо автору
 
   для: Gandzas   (23.10.2006 в 17:16)
 

кроме того в случае с поименным перечислениям всегла можно добавить какое-то конкретное имя файла типа if ($file != "." && $file != ".." && $file != ".htaccess" && $file != "index.html") { и так далее

   
 
 автор: Gandzas   (23.10.2006 в 17:16)   письмо автору
 
   для: Trianon   (23.10.2006 в 15:20)
 

Спасибо.

А в чем разница?

Сможеть, если получит админский доступ.
Но в этом случае, говорить можно о взломе любого сайта :))

   
 
 автор: 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 в 15:05)   письмо автору
 
   для: 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');
    }
?>


Сюда можно что-то еще добавить?

   
 
 автор: Gandzas   (23.10.2006 в 13:56)   письмо автору
 
   для: cheops   (23.10.2006 в 13:47)
 

Спасибо. :)

   
 
 автор: 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("не шали");
?>

она не пропустит ничего кроме цифр и букв. В принципе отсутствие точки тоже не даёт практически никаких шансов для манёвра злоумышленика, но так спокойнее :)))

   
 
 автор: Gandzas   (23.10.2006 в 13:43)   письмо автору
 
   для: cheops   (23.10.2006 в 13:40)
 

Да. Вообще файлы стараюсь обзывать только буквами

   
 
 автор: cheops   (23.10.2006 в 13:40)   письмо автору
 
   для: Gandzas   (23.10.2006 в 13:31)
 

Если работает, то лучше :))) (однако вероятность взлома всё равно остаётся, у вас $p какие значения может принимать? Только цифры и буквы?).

   
 
 автор: Gandzas   (23.10.2006 в 13:31)   письмо автору
 
   для: 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");
?>

   

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

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

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