В помощь веб-разработчику

January 12th, 2008

divная вёрстка

Posted by admin in Без рубрики

Есть страница - 2 колонки, левая 200px шириной, правая резиновая.
Как сделать так, чтобы резиновая загружалась раньше?

January 12th, 2008

WYSIWYG-редактор

Posted by admin in Без рубрики

решил сменить WYSIWYG-редактор. до этого пользовался SPAW. посоветуйте альтернативу по таким характеристикам:

1. Наличие функции очистки кода от “лишних” тегов ворда и пр.
2. Полноэкранный режим
3. Возможность вставки Flash
4. Возможность конфигурировать тулбар
5. Multilanguage

January 11th, 2008

Значение value в созданном SELECT-е

Posted by admin in Без рубрики

Добрый день.
Ниже фрагмент кода с комментариями:
————————————————
<html>
<head>
    <script>
    function init(){
            
// Получаем элемент DIV (единственный в BODY)
            var gDiv = document.getElementById(”id_div”);

            // Создается SELECT
            var gSel = document.createElement('SELECT');

            // Задаём для SELECT значение id = 'id_sel'
            gSel.setAttribute(”id”, “id_sel”);

            // Создаются две OPTION
            var gOpt1 = document.createElement('OPTION');
            var gOpt2 = document.createElement('OPTION');

            // Этим двум OPTION задаются надписи “One” и “Two”
            gOpt1.appendChild(document.createTextNode(”One”));
            gOpt2.appendChild(document.createTextNode(”Two”));

            // Эти две OPTION прикручиваются к созданному SELECT
            gSel.appendChild(gOpt1);
            gSel.appendChild(gOpt2);

            // А SELECT, в свою очередь, прикручивается к DIV-у
            gDiv.appendChild(gSel);

            // Для SELECT задаём функцию-обработчик show_value(), ….
            gSel.onchange = function(){
                show_value();
            }
    }

    // … которая просто отображает alert-ом выбранное в SELECT-е значение.
    function show_value(){
        alert(document.getElementById(”id_sel”).value);
    }

    </script>
</head>

<body onload=”init();”>
    <div id=”id_div”></div>
</body>
</html>


————————————————

При изменении значения в списке должно по alert-у появляться сообщение с новым выбранным значением.
В FF и в Opera всё работает как надо, а в IE сообщение пустое (т.е. value возвращает пустую строку).
С чем это может быть связано?

January 11th, 2008

ответ пинг сервисов

Posted by admin in Без рубрики

Соорудил небольшой скриптик, ответа удалось добиться только от rpc.weblogs.com/RPC2
яндексовский ping.blogs.yandex.ru/RPC2 и гугловский blogsearch.google.com/ping/RPC2 не отвечают, но кажется боты приходят. В общем непонятно. Может я чего не так делаю?

UPD: Проблема решена. Не обращайте внимание на найденные в инете отзывы, оказывается что размер данных надо прописывать (а не так как кто-то пишет что при любом числе вместо 250 яндекс не отвечает).


для гугла у меня так:

fwrite($ping, "POST /ping/RPC2 HTTP/1.0rn" .
	"User-Agent: Pinguinrn".
		"Host: blogsearch.google.comrn".
		"Content-Type: text/xmlrn".
		"Content-length: 250rnrn");
fwrite($ping,'<?xml version="1.0"?>'.
'<methodCall>'.
  '<methodName>weblogUpdates.extendedPing</methodName>'.
  '<params>'.
    '<param>'.
      '<value>site.com</value>'.
    '</param>'.
    '<param>'.
      '<value>http://site.com/</value>'.
    '</param>'.
    '<param>'.
      '<value>http://site.com/</value>'.
    '</param>'.
    '<param>'.
      '<value>http://site.com/rss/</value>'.
    '</param>'.
  '</params>'.
'</methodCall>');
	fclose ($ping);
}

для яндекса:

	if( $ping = fsockopen("ping.blogs.yandex.ru", 80, $errno, $errstr, 29) )
	{
		fwrite($ping, "POST /RPC2 HTTP/1.0rn" .
			"User-Agent: Pinguinrn".
			"Host: ping.blogs.yandex.rurn".
			"Content-Type: text/xmlrn".
			"Content-length: 250rnrn");
		fwrite($ping,'<?xml version="1.0"?>'.
'<methodCall>'.
  '<methodName>weblogUpdates.ping</methodName>'.
  '<params>'.
    '<param>'.
      '<value>site.com</value>'.
    '</param>'.
    '<param>'.
      '<value>http://site.com/</value>'.
    '</param>'.
  '</params>'.
'</methodCall>');

	fclose ($ping);
}

А еще непонятно что для яндекса указывать, главную страницу, rss ленту или просто урл последнего нового документа?

January 11th, 2008

Удаление узла в prototype.js

Posted by admin in Без рубрики

Можно ли в prototype.js удалить элемент, не удаляя его детишек?

Например, было:

Потом делаем
$('mydiv').ВсёЧтоХочешьСоМнойДелайФашистТолькоДетокНеТрожь;

И получается:

Как сделать “в лоб” - знаю, но не хочу. Надеюсь, что есть API метод стандартный.

January 11th, 2008

Безопасность CMS сайта на примере сайта Связного

Posted by admin in Без рубрики

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

Лазил недавно по сайту Связного, наткнулся на несуществующую страницу, в которой мне их движок сайта вывалил весь бектрейс вызовов своих процедур. Прямо с путями в файловой системе! Офигенный прокол с точки зрения безопасности. Немного поэкспериментировал с GET-параметром action и выяснил что на какие параметры он выдает такой же дамп, а на какие-то - нет.



Скриншот выдаваемого листинга (кликни чтобы посмортеть в оригинальном размере)


Если в качестве параметра ввести любую абракадабру, то движок выдает пустую страницу (хотя по логике должна быть страница с 404 ошибкой - page not found). Например, вот такая страница c параметром action=DABlank8 содержит в себе информацию о компании. Если поиграться с последней цифрой в параметре, изменить ее с 8 на 6, к примеру, то получим бектрейс вызовов движка сайта. А если вообще уберем последнюю цифру, то получим пустую страницу.

Еще немного полазив по сайту, замечаем, что параметр action имеет свою структуру. Начало этого параметра, а именно, подстрока-префикс DA присутсвует во многих страницах. Что это означает - не совсем понятно. За ним идет как бы корень раздела или группы страниц - Blank для обычных контентовых страниц, News - для лент новостей, Product - для продуктов и т.д. Что означает последний номер - не совсем понятно, ясно что идентификатор какой-то, но он не всегда срабатывает. Чтобы понять надо дальше лазить и разбираться.

И все это сопровождается полными трейсами вызовов функций и полными путями от корня к соответствующим файлам. А это дает неплохой набор начальных данных для обратного инжинеринга (читай - для хакинга) CMS сайта. Если движок у них не самописный, а какой-то коммерческий, то по именам файлов и функций его можно попытаться опознать. А далее идет проверка на известные дырки в этом движке в предыдущих версиях (вдруг они не обновились?). Плюс уже известны все нужные пути в файловой системе, если у них где-то на сайте “гуляют” пути к файлам в параметрах, то можно попробовать поиграться с этим.

Именно поэтому на серьезных продакшн-сайтах открытых в интернет, всегда выключают выдачу в браузер всех ерроров и warning'ов, потому что это дает потенциональному злоумышленнику лишнюю информацию. А уж выдавать бектрейс вызовов - это уже совсем моветон. Ну, а мелочь вроде пустой белой страницы вместо положенной по правилам хорошего тона страницы с 404 ошибкой - это совсем не так страшно с точки зрения безопасности, но не совсем правильно.

Да, а еще в нормальных движках скрывают GET-параметры. Кстати, при этом часто используют в апаче и nginx'е такой модуль Rewrite. Он умеет преобразовывать по шаблону переданный ему URL требуемой страницы. То есть пути из index.php?action=news&news_id=666 превращаются в /news/666. Еще может оказаться логичней внести сюда дату новости, например, /news/2008/01/11/666. Такой трюк убивает (в хорошем смысле слова) трех полезных зайцев:

  1. скрывает от пользователя GET-параметры, теперь уже не понятно что - полный путь, а что - параметры, с какими можно играться и пытаться подсунуть им на вход что-то плохое.
  2. делает структуру сайта похожей на структуру папок, то есть более логичной
  3. упрощает поисковую оптимизацию сайта, поскольку не все поисковики уважают и не всегда правильно “понимают” страницы с GET-запросами

Ну хватит. Кому надо будет (у кого свободного времени много) - тот дальше нароет.

Кстати, сайт Связному делала некая студия под названием netPro. Будем надеяться до них дойдет эта статья и они все ошибочки подправят. :) В любом случае - спасибо за материал для статьи. Статья не претендует на профессиональный анализ безопасности сайта, а лишь знакомит читателя с некими фактами и содержит в себе мысли и вывода автора, отражающие лишь уровень знаний оного.

ЗЫ Спасибо коментаторам - судя по GET параметрам на сайте самой студии стоит такой же движок. Самописка.

January 10th, 2008

GOOD JOB FOR GOOD JAVA DEVELOPER

Posted by admin in Без рубрики

Московский офис Американской софтверной компании Mediaspectrum, Inc. (автоматизация  издательского бизнеса в крупных зарубежных издательских домах и газетных холдингах) предлагает рассмотреть открытую позицию

Java-developer 

Требования: 

  • Высшее образование
  • Опыт работы с Java от 2-х лет
  • Опыт работы с J2EE, EJB, JSP, Servlet, JDBC
  • Сервер приложения: WebSphere
  • Базыданных: Oracle, MSSQL Server
  • Системы версcионного контроля: CVS, SVN
  • Желательно: Struts, Spring, JSF, Hibernate, iBatis, Weblogic. JBoss, Tomcat, XUL, Ajax, WebSphere Portal 5.1.  Postgress, My SQL.  SourceSafe

Условия:

  • Индексируемая заработная плата -  от 54 000 руб.  по результатам собеседования
  • Мед.страховка, оплачиваемый 100% отпуск, больничный
  • Дотация на обеды в офисе
  • Офис рядом с м. Новослободская
  • Рабочий день с 10-18
  • Перспективы профессионального и материального роста

Contact info: job@mediaspectrum.net, www.mediaspectrum.net, 495 981 3162, Котова Алла

January 10th, 2008

Просмотр HD-видео на сайте

Posted by admin in Без рубрики

Есть задача - дать возможность посетителям просматривать ОДИН, вполне определенный, ролик прямо со страницы сайта, не скачивая его. Предположим, изначально ролик имеет параметры: 1280×720 (16:9/HD), mpeg2.

Если посмотреть, к примеру на gametrailers.net, то сделать это можно как минимум 3-мя способами:

1. Через Flash плеер
2. Через Quicktime плеер
3. Через Windows-Media плеер

Есть несколько вопросов по этим способам:

1. Есть ли какие либо ограничение на макс.разрешение проигрываемого ролика?
2. Есть ли какие либо другие ограничения (размер файла, FPS, …)
3. Какие типы файлов поддерживаются, кроме: 1-FLV, 2-MOV, 3-WMV ?
4. Где тот или иной способ будет ТОЧНО работать без установки каких либо дополнительных модулей?
5. Есть ли различия по скорости работы?
6. Что, на Ваш взгляд, предпочтительнее и почему?

UPD: Хорошая статейка на тему

January 9th, 2008

требуется программист: PHP+C#+SQL з.п. 2000 у.е.

Posted by admin in Без рубрики

В зеленоградский офис инвестиционно-финансовой компании “Опцион” требуется программист: PHP+C#+SQL
Требование: опыт работы и наличие реализованных проектов;

Условия:
+ З.П. от 1200 у.е. до 2000 у.е. по итогам собеседования;
+ бонусы;
+ гибкий график, возможность совмещения с учебой для студентов;
+ Работа в Зеленоградском Бизнес Центре.

ICQ 396255537, info(собака)option.ru (с пометкой программист)

January 9th, 2008

Кластеризация

Posted by admin in Без рубрики

Имеется 3 физических сервера. Имеется java-приложение (типа CMS), работающее с постгресом. Сделали балансировку, т.е. 3 копии приложения работают на трех серверах каждый под своим Томкатом.

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

Сейчас на одном сервере стоит балансер БД, с которым и работают все приложения (есть одна проблема, которая, как я думаю, как раз на этом узком месте и завязана). Задача балансера - раскидывать данные на постгресы, стоящие на остальных двух серверах в качестве резерва. Если балансер падает (в любом проявлении), всегда есть возможность направить поток запросов на другие копиюю БД.

В идеале хочется, чтобы каждая реплика приложения работала независимо со своей СУБД на своем сервере.

« Previous PageNext Page »