2011-01-18 3 views
0

Я использовал этот фрагмент кода php для сайта. Теперь у его старого и у меня было несколько атак. Сценарий использовался для включения другого файла из другого места и отправки спама. Очевидно, это делает мой скрипт отправителем спама.php, прочитайте проблему с кодом файла

за содержание

$htm = ".htm"; 
$pid = "$details$htm"; 
function show_details($pid) 
{ 
if (!preg_match("/http/", $pid)) { 
require($pid); 
} else { 
    die; 
} 
} 

и для названия, описания, ключевые слова и т.д ..

$txt = ".txt"; 
$title = "$details$txt"; 
function show_title($title) 
{ 
if (!preg_match("/http/", $title)) { 
if (file_exists($title)) { 
require($title); 
} else { 
    die; 
} 
} 
} 

и display.php файл с

print ' 
<!-- CONTENT --> 
'; 
show_details("$pid"); 
print ' 

этим кодом ı смог вызвать любой контент с помощью «/display.php?details=mycontentpage»

mycontentpage.htm mycontentpage.txt

.............

Теперь этот код должен быть повторно закодированы .. Я не могу изменить конструкцию, сайт слишком велико. Так что, я думаю, мне просто нужно придерживаться этого.

Может ли кто-нибудь помочь? Любые комментарии ?

+1

Если они могут быть включены в файл где-то, весь ваш сайт скомпрометирован. Даже если вы исправляете это, могут быть тысячи задних пятен, которые они открыли. Возьмите это всерьез. ---- Сказанное, ваше описание того, что вы пытаетесь сделать, было настолько смутно сформулировано, что я не могу понять, какова была ваша проблема на самом деле. – Incognito

ответ

0

Чтобы сделать такие сценарии более безопасными, вы должны убедиться, что для параметра register_globals установлено значение OFF. Это означает, что вы должны добавить строку типа:

php_flag register_globals off

... Для .htaccess. Тогда, объявить все ваши пользовательские переменные в первый раз, вы используете их, как:

$details = $_GET['details']

... который сопоставляет данные из URI штучных «детали» к PHP переменной $ деталей.

Я могу очень хорошо видеть, как ваши злоумышленники могли войти через ваш код и установить register_globals в on - им нужно было просто создать файл .htm с PHP-кодом в нем, который переназначает другие переменные, включая его , затем альт.

Для получения дополнительной информации см: http://us2.php.net/manual/en/security.globals.php

Надеется, что это помогает!

+0

Возможно, вам также нужен какой-то класс, который унижает содержимое файлов .htm и .txt, если вы разрешите пользователям создавать их - как минимум, запустите его через htmlentities(); - см .: http://ca2.php.net/htmlentities – aendrew

+0

спасибо ... но дело в том, что я не могу изменить код для всего веб-сайта, его слишком большой. Мы уже готовим новый сайт. Мне нужно найти временное решение для этого. , если есть «http» по адресу get (что означает его выход из этого сайта), die .. else run .. Но мне также нужно включить «ftp», «//», «/», «:», .. Если я могу также включить их, нужно покупать мне достаточно времени. Есть идеи ? – Has

+0

Я не вижу, как размер имеет к этому отношение (если вы не делаете что-то вроде репликации приведенного выше кода на каждой странице - если это так, вы делаете это неправильно ...); в конечном счете, объявив свои переменные, вы не изменяете, как работает код вообще - вы просто используете их чуть более безопасно. Возможно, стоит использовать is_file(); вместо preg_match, если только в последнем исключает вас от именования файлов «http» или любых производных от этого. Возможно, попробуйте что-то в размере: if (is_file ($ _SERVER {'DOCUMENT_ROOT'}. "/my_images/abc.jpg")) {} – aendrew

Смежные вопросы