Просмотр полной версии : Как определить что скрипт запущен локально
pretolock
21.05.2009, 15:50
Как сдалать проверку в PHP скрипте 1 что он запущен из скрипта 2, который находится на томже сайте
Т.е. нужно запретить запуск скрипта 1 удаленно и из других скриптов, если они используют хостинг, этого же сервера
if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR'])
предотвращает только удаленный запуск
В первом файле define('l_include',1);
Во втором первыми строками: if (!defined('l_include')) die;
pretolock
21.05.2009, 17:34
В первом файле define('l_include',1);
Во втором первыми строками: if (!defined('l_include')) die;
а что мешает воспользоваться хостингом на томже серваке и написать:
define('l_include',1);
в чужом скрипте, а потом вызвать мой скрипт который должен быть запущен локально на моем хостинге?
-=Static=-
21.05.2009, 19:22
Если ты никому не расскажешь, что у тебя константа для проверки называется "l_include" - то никто и не догадается, что надо именно ее объявить. А если уже прочли скрипт, например через file_priv в sql-inj - то тут практически никакая проверка не спасет :)
Вот еще мысль: Можно сделать проверку полного пути от корня сервера, чтоб быть уверенным что скрипт Б инклудят из скрипта в твоей папке. Например так:
<?
$docRoot = "/www/home/myfolder/public_html";
if($_SERVER["DOCUMENT_ROOT"] != $docRoot) die("You try to include my script from another fucking server");
// ...
?>
pretolock Не позволит нормально настроенный сервер/права на файл. Если злоумышленнику удалось заинклудить/прочитать исходный текст скрипта - ни одна защита не спасет (кроме быть может самописных библиотек-расширений ПХП)
-=Static=- На переменные нельзя надеяться. Например:echo $_SERVER["DOCUMENT_ROOT"].'<hr>';
$_SERVER["DOCUMENT_ROOT"] = 'some trash dir';
echo $_SERVER["DOCUMENT_ROOT"];
а делов то..
if ( $_SERVER['SERVER_NAME'] == 'localhost' OR
$_SERVER['SERVER_ADDR'] == '127.0.0.1') {
print 'local run';
} else {
print 'remote run';
}
а делов то..
Угу, в своем скрипте перед инклудом твоего скрипта дописываешь
$_SERVER['SERVER_NAME'] = ....;
$_SERVER['SERVER_ADDR'] = ....;
И способ не работает
eLWAux Достаточно неожиданно, но условие будет выполняться всегда ^^ Во всяком случае server_addr :D Да и вообще - зачем читать хотя бы первый пост до конца?
Самый оптимальный вариант - вариант Gift
только я бы еще сделал както так:
<?php
/**
* @author m0hze
* @copyright 2009
*/
$rand = rand(1,6);
define(generate_def($rand),1);
function generate_def($number)
{
$arr = array('a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','x','y','z',
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','X','Y','Z',
'1','2','3','4','5','6',
'7','8','9','0','.',',',
'(',')','[',']','!','?',
'&','^','%','@','*','$',
'<','>','/','|','+','-',
'{','}','`','~');
// Генерируем пароль
$def = "";
for($i = 0; $i < $number; $i++)
{
// Вычисляем случайный индекс массива
$index = rand(0, count($arr) - 1);
$def .= $arr[$index];
}
return $def;
}
?>
Вот только неподумал, как во второй скрипт передать загенеренную константу :)
НУ может ктото другой придумает,но при таком раследе я непредставляю как ктото сможет угадать бдующую константу.
m0Hze Зачем угадывать? Инклудим файл с генератором, инклудим интересующий файл.
Опять таки - если есть возможность читать/инклудить чужой файл - бесполезно это баловство на чистом пхп
ну хз, помоему во всех cms именно такая проверка,которую предложил ты.Я незнаю что еще хочет автор.Возможно можно использовать никс? Там же если я правильно помню есть несколько групп,типо www,local, ну так вот,если пользователь состоит в группе локал,определена константа,и у вызывающего тактойто ип - запускаем,если нет - гуд бай.
НУ хз,хз
pretolock
21.05.2009, 22:59
Вот только неподумал, как во второй скрипт передать загенеренную константу :)
НУ может ктото другой придумает,но при таком раследе я непредставляю как ктото сможет угадать бдующую константу.
я думаю сделать так:
- скрипт который должен запустить локальный скрипт генерирует случайное число
- записывает его в файл
- вызывает локальный скрипт и передает ему в URL'e это случайное число
- локальный скрипт сравнивает случайное число из URL'а со случайным числом прочитанным из файла
- локальный скрипт удаляет файл со случайным числом
как такая схема?
pretolock
21.05.2009, 23:16
m0Hze Зачем угадывать? Инклудим файл с генератором, инклудим интересующий файл.
добавлю еще к условию вызова, что скрипт который должен вызывать локальный скрипт запустить сложно, если его просто так вызвать)
такчто вызвать вызывающий скрипт чтобы он сгенерировал случайные данные будет проблематично
я думаю сделать так:
- скрипт который должен запустить локальный скрипт генерирует случайное число
- записывает его в файл
- вызывает локальный скрипт и передает ему в URL'e это случайное число
- локальный скрипт сравнивает случайное число из URL'а со случайным числом прочитанным из файла
- локальный скрипт удаляет файл со случайным числом
А еще можно отрезать сервер от интернета и электричества, а потом залить бетоном. Если такая паранойя - купите вдску и будет вам счастье
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot