Блог программиста

Читайте и найдете много полезного

Archive for Июнь, 2008

Звонок “хакера”

Posted by admin on 28th Июнь 2008

 

Сегодня позвонил со скайпа на мой телефон некий "хакер" и сообщил что  он нашел уязвимость в моем сайте - ARB,   начал запугивать разными иньекциями, и рассказывать что он может разместить любую информацию на главной странице.  За то что он этого делать не будет и подскажет где уязвимость он хотел 100 баксов.

От души посмеялся. А теперь вот и пишу эту заметочку. Господа если с Вами такое случиться не ведитесь. Во-первых голос у этого "хакера" походил на голос малолетнего геймера. Во-вторых с сайтом он так ничего и не смог сделать. В-третьих если бы и сделал - у меня ведь под рукой всегда есть последние бекапы сайта, так что восстановить смогу в течении минут 10 - что и всем советую. В-четвертых можно ведь обратится к своему хостеру - если это будет повторятся этого "хакера" отловят и тогда он уже будет общаться с правоохранительными органами.

Posted in А ля Дневник | No Comments »

JavaScript и Java

Posted by writer on 16th Июнь 2008

JavaScript и Java- это два разных языка программирования. Java- это объектно-ориентированный язык программирования и запускается при помощи компилятора и вспомогательных файлов. Разрабатываемые с помощью Java программы могут работать как законченные приложения либо как встроенные в Web-страницу апплеты. И хотя они встроены в страницу HTML, они храняться на клиенской машине как отдельные файлы.

Напротив, JavaScript, размещаются внутри HTML страницы и не могут существовать, как отдельные программы и функционируют, будучи запущенными в браузерах типа Netscape Navigator или Internet Explorer.

Сегодня Всемирная сеть - это среда информационного обмена для миллионов людей. Они размещают текст, видео, звук, и информацию, и все более и более, они усложняют свои страницы, делая их интерактивными в сети. JavaScript - это новый язык программирования, используемый в составе страниц HTML для увеличения функциональности и возможностей взаимодействия с пользователями. Он был разработан фирмой Netscape в сотруднечестве с Sun Microsystems на базе языка Sun’s Java .С помощью JavaScript на Web-странице можно сделать то, что невозможно сделать стандартными тегами HTML. Скрипты выполняются в результате наступления каких-либо событий, инициированных действиями пользователя. Создание Web- документов, вклучающих программы на JavaScript, требует наличее текстового редактора и подходящего браузера. Некоторые просмоторщики включают в себе встроенные редакторы, поэтому необходимость во внешнем редакторе отпадает.

Несмотря на отсутствие прямой связи с языком Java, JavaScript может обращаться к внешним свойствам и методам Java- апплетов, встроенных в страницу HTML. Разница сводится к тому, что апплеты существуют вне браузера, в то время как программы JavaScript могут работать только внутри браузера. На первой взгляд кажется, что найти информацию по JavaScript несложно. Сначала создается впечатление, что ее можно увидеть везде: на сервере Natscape, в виде электронных руководств и примеров, во многих других местах. Тем не менее разыскать информацию об объектах, операторах, цветах и всем прочем в одном источнике, чтобы она была всегда под рукой, трудно.

Posted in Обо всем | No Comments »

Поиск записей в таблице(SELECT)

Posted by writer on 7th Июнь 2008

Поиск записей осуществляется командой SELECT
SELECT * FROM table_name WHERE (выражение) [order by field_name [desc][asc]]
Эта команда ищет все записи в таблице table_name, которые удовлетворяют выражению выражение.
Если записей несколько, то при указаном предложении order by они будут отсортированы по тому полю, имя которого записывается правее этого ключевого слова (если задано слово desc, то упорядочивание происходит в обратном порядке). В предложении order by могут также задаваться несколько полей.
Особое значение имеет символ *. Он предписывает, что из отобранных записей следует извлечь все поля, когда будет выполнена команда получения выборки. С другой стороны, вместо звездочки можно через запятую непосредственно перечислить имена полей, которые требуют извлечения. Но чаще всего все же пользуются именно *.

Например, нам надо найти в таблице, содержащей сообщения в гостевой книге, все записи, которые оставил определенный пользователь.
// Имя пользователя
$user="Admin";
// name - имя поля в таблице, которое содержит имена пользователей,
// оставивших свои сообщения в гостевой
// db_guest - имя таблицы, содержащей сообщения, оставленные в гостевой
$sql="select * from db_guest where (name='$user')";
$result=mysql_query($sql);
// Находим кол-во записей, удовлетворяющих условию
$rows=mysql_num_rows($result);
echo "$user оставил в гостевой $rows записей.";
Но что делать, если искомый текст не занимает все поле, а является частью этого поля (например, при поиске слова или словосочетания в общем массиве текста)?
Например я использую следующую команду (наверно этот способ не самый лучщий, но тем не менее он работает):
// $search - содержит искомый тест
$sql="select * form db_guest where (locate('$search',content)>0)";
$result=mysql_query($sql);
Смысл такой: если кол-во вхождений строки $search в поле content больше 0 (т.е. оно вообще есть), то запись добавляется к остальным найденым записям.
Надо отметить, что указанный способ ищет текст с учетом регистра. Чтобы искать без учета регистра, можно воспользоваться следующей командой:
// $search - содержит искомый тест
$sql="select * form db_guest where (locate(lower('$search'),lower(content))>0)";
$result=mysql_query($sql);
т.е. искомая строка и запись в таблице переводится в верхний регистр и затем производится поиск.

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

Для этого одно из полей таблицы базы должно содержать время записи сообщения.
Сортировка по какому-либо столбцу осуществляется при помощи конструкции order by.
В нашем случае, при учете, что более “свежие” сообщения будут сортироваться верхними:
// time - столбец, содержащий время написания записи
// в формате "UNIX timestamp"
$sql="SELECT * FROM db_guest ORDER BY data DESC";
$result=mysql_query($sql);
Т.е. данные были отсортированны по убыванию.
Если нам надо отсортировать данные по возростанию, надо вместо ключевого слова DESC применить ASC:
$sql="SELECT * FROM db_guest ORDER BY data ASC";
$result=mysql_query($sql);
Данные также можно отсортировать по нескольким столбцам. Для этого надо названия столбцов указать через запятую.
Это может пригодиться, например, если в столбце, по которому производится сортировка, есть несколько одинаковых значений.
$sql="SELECT * FROM db_name ORDER BY field1,field2 ASC";
$result=mysql_query($sql);
Сначало данные сортируются по первому столбцу field1. Затем, если в первом столбце есть несколько одинаковых значений, выполняется дополнительная сортировка по второму столбцу (внутри группы с одинаковыми значениями в первом столбце).

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

В этом параметре задается два значения:
LIMIT start,length
start - указывает, с какой позиции нужно выдавать найденные записи
length - кол-во записей

Например, нам нужно выбрать из базы данных гостевой книги записи начиная с 20 по 45 (т.е. чтоб вывести 25 записей):
$sql="select * from db_guest limit 20,25";
$result=mysql_query($sql);

Posted in Справочник по MySQL | No Comments »

Обновление записей в таблице(UPDATE)

Posted by writer on 7th Июнь 2008

Обновление записи осуществляется командой UPDATE
UPDATE table_name SET field_name1=’var1′, field_name2=’var2′,… WHERE (выражение)
Данная команда для всех записей в таблице table_name, удовлетворяющих выражению выражение, устанавливает указанные поля field_nameN в значение varN.
Эту команду удобно применять, если не требуется обновлять не все поля какой-то записи, а нужно обновить только некоторые.

Допустим, у нас гостевая книга использует для хранения информации базу данных MySQL.
Таблица (с именем db_guest), содержащая данные об оставленных сообщениях, имеет следующую структуру:
id - поле содержит идентификационный уникальный номер записи;
name - поле содержит имя пользователя, оставившего сообщение;
mail - е-майл пользователя;
url - URL пользователя;
content - непосредственно, само сообщение.
Напишем сценарий (на PHP), который выводит всю базу данных оставленных сообщений и позволяет вносить изменения в оставленные сообщения:
Листинг файла guest_update.php
<html>
<head>
<title>Обновление записей гостевой книги.</title>
</head>
<body>
<?
// Подключаемся к базе данных
mysql_connect("localhost", "root", "");
mysql_select_db("test");

// Если мы уже нажимали кнопку изменения записи
if(@$submit_update) {
  // Обновляем выбранную запись
  $sql="update db_guest set name='$name', mail='$mail', url='$url', content='$content'
         where (id='$update')";
  mysql_query($sql);
};

// Заносим в переменную <I>$result</I> всю базу оставленных сообщений
$sql="select * from db_guest";
$result=mysql_query($sql);
// Узнаем кол-во записей в гостевой книге
$rows=mysql_num_rows($result);
echo "<table border=0 align=center>";
echo "<tr><td align=center><B>Имя</B></td>";
echo "<td align=center><B>Е-майл</B></td>";
echo "<td align=center><B>URL</B></td>";
echo "<td align=center><B>Сообщение</B></td>";
echo "<td align=center><B>Изменить</B></td></tr>";
for($i=0;$i<$rows;$i++) {
  // Устанавливаем курсор на соответствующую позицию
  mysql_data_seek($result,$i);
  // Записываем в ассоциативный массив <I>$arr_guest</I>
  // значения полей таблицы гостевой книги
  $arr_guest=mysql_fetch_array($result);
  echo "<form method=get action='guest_update.php'>";
  echo "<input type=hidden name='update' value='".$arr_guest["id"].”‘>”;
  echo “<tr>”;
  echo “<td><input type=text name=’name’ value=’”.$arr_guest["name"].”‘></td>”;
  echo “<td><input type=text name=’mail’ value=’”.$arr_guest["mail"].”‘></td>”;
  echo “<td><input type=text name=’url’ value=’”.$arr_guest["url"].”‘></td>”;
  echo “<td><textarea name=’content’>”.$arr_guest["content"].”</textarea></td>”;
  echo “<td><input type=submit name=’submit_update’ value=’Изменить’></td>”;
  echo “</tr>”;
  echo “</form>”;
};
echo “</table>”;
echo “</form>”;
?>
</body>
</html>

Posted in Справочник по MySQL | No Comments »

Удаление строк из таблицы (DELETE FROM)

Posted by writer on 7th Июнь 2008

Удаление записи осуществляется командой DELETE FROM
DELETE FROM table_name WHERE (выражение)
Данная команда удаляет из таблицы table_name все записи, для которых выполнено выражение.
выражение - это просто логическое выражение.
Например нам надо удалить запись из таблицы, содержащей ФИО, адрес и телефон:
DELETE FROM tel_numb WHERE (fio='Вася Пупкин')
или, если надо удалить по нескольким параметрам
DELETE FROM tel_numb WHERE (fio='Вася Пупкин' && tel='23-45-45')
В выражении, помимо имен полей, констант и операторов, могут также встречаться простейшие вычисляемые части, например: (id<10+4*5).

Допустим, у нас гостевая книга использует для хранения информации базу данных MySQL.
Таблица (с именем db_guest), содержащая данные об оставленных сообщениях, имеет следующую структуру:
id - поле содержит идентификационный уникальный номер записи;
name - поле содержит имя пользователя, оставившего сообщение;
mail - е-майл пользователя;
url - URL пользователя;
content - непосредственно, само сообщение.
Напишем сценарий (на PHP), который выводит всю базу данных оставленных сообщений и позволяет удалить выбранное сообщение:
Листинг файла guest_delete.php
<html>
<head>
<title>Удаление записей гостевой книги.</title>
</head>
<body>
<?
// Подключаемся к базе данных
mysql_connect("localhost", "root", "");
mysql_select_db("test");

// Если мы уже нажимали кнопку удаления
if(@$del_radio) {
  // Удаляем выбранную запись
  $sql="delete from db_guest where (id='$del_radio')";
  mysql_query($sql);
};

// Заносим в переменную <I>$result</I> всю базу оставленных сообщений
$sql="select * from db_guest";
$result=mysql_query($sql);
// Узнаем кол-во записей в гостевой книге
$rows=mysql_num_rows($result);
echo "<form method=get action='guest_delete.php'>";
echo "<table border=0 align=center>";
echo "<tr><td align=center><B>Удалить</B></td>";
echo "<td align=center><B>Имя</B></td>";
echo "<td align=center><B>Е-майл</B></td>";
echo "<td align=center><B>URL</B></td>";
echo "<td align=center><B>Сообщение</B></td></tr>";
for($i=0;$i<$rows;$i++) {
  // Устанавливаем курсор на соответствующую позицию
  mysql_data_seek($result,$i);
  // Записываем в ассоциативный массив <I>$arr_guest</I>
  // значения полей таблицы гостевой книги
  $arr_guest=mysql_fetch_array($result);
  echo "<tr><td>";
  echo "<input type=radio name='del_radio' value='".$arr_guest["id"].”‘></td>”;
  echo “<td>”.$arr_guest["name"].”</td>”;
  echo “<td>”.$arr_guest["mail"].”</td>”;
  echo “<td>”.$arr_guest["url"].”</td>”;
  echo “<td>”.$arr_guest["content"].”</td></tr>”;
};
echo “<tr><td colspan=5 align=center>”;
echo “<input type=submit value=’Удалить’>”;
echo “</td></tr>”;
echo “</table>”;
echo “</form>”;
?>
</body>
</html>

Posted in Справочник по MySQL | No Comments »

Вставка строки в таблицу (INSERT INTO)

Posted by writer on 7th Июнь 2008

Вставка записи осуществляется командой INSERT INTO
INSERT INTO table_name(field_name1, field_name2,…) values(’content1′, ‘content2′,…)
Данная команда добавляет в таблицу table_name запись, у которой поля, обозначеные как field_nameN, установлены в значение contentN.

Например, если мы создаем таблицу адресов и телефонов (ФИО, адрес, телефон), то надо записать следующий код:
CREATE TABLE tel_numb(fio text, address text, tel text)
Вставить в таблицу tel_numb значения можно так:
INSERT INTO tel_numb(fio, address, tel)
         values('Вася Пупкин', 'ул.Горького, д.18', '23-23-23')
Те поля, которые небыли перечислены в команде вставки, получают “неопределенные” значения (неопределенное значение - это не пустая строка, а просто признак, который говорит MySQL, что у данного поля нет никакого значения).
Надо отметить, что если при создании таблицы поле было отмечено флагом NOT NULL, и оно при вставке записи получило неопределенное значение, то MySQL возвратит ошибку.
При вставке в таблицу бинарных данных (или текстовых, содержащих апострофы и слеши) некоторые символы должны быть защищены обратными слешами, а именно, символы \, ‘ и символ с нулевым кодом.

Posted in Справочник по MySQL | No Comments »

Изменение свойство таблицы

Posted by writer on 7th Июнь 2008

Изменение свойств таблицы : Переименование таблицы (ALTER TABLE RENAME)

Переименование таблицы можно сделать при помощи следующей конструкции:
ALTER TABLE table_name_old RENAME table_name_new

где

  • table_name_old - старое имя таблицы, которое нам нужно переименовать;
  • table_name_new - новое имя таблицы.
  • Допустим, нам нужно переименовать таблицу search в search_en:
    $sql="ALTER TABLE search RENAME search_en";
    mysql_query($sql);

    Изменение свойств таблицы : Вставка столбцов (ALTER TABLE ADD)

    Вставку нового столбца можно осуществить при помощи следующей конструкции:
    ALTER TABLE table_name ADD field_name parametrs
    где
  • table_name - имя таблицы, в которой будет вставлен новый столбец;
  • field_name - имя вставляемого столбца;
  • parametrs - параметры, описывающие вставляемый столбец.

    Обязательным параметром является указание типа данных.
    (Про возможные типы данных подробно написано в Создание и удаление таблицы).

    Например, нам надо вставить в таблицу my_frends столбец под названием adress_2, который будет содержать текстовые значения:

    $sql="ALTER TABLE my_frends ADD adress_2 TEXT";
    mysql_query($sql);
    По умолчанию новый столбец вставляется в конец таблицы.
    Если необходимо, чтобы столбец встал в начало таблицы, нужно после параметров вставляемого столбца написать ключевое слово FIRST:
    $sql="ALTER TABLE my_frends ADD adress_2 TEXT FIRST";
    mysql_query($sql);

    Теперь только что вставленный столбец окажется вначале таблицы.

    Если необходимо, чтобы столбец был вставлен не в начале таблицы, и не в конце, а после определенного столбца, то нужно применить ключевое слово AFTER имя столбца, после которого будет установлен новый столбец:

    $sql="ALTER TABLE my_frends ADD adress_2 TEXT AFTER adress_1";
    mysql_query($sql);

    В этом примере новый столбец adress_2 будет установлен после столбца adress_1.

    Если нужно дописать к таблице не один, а несколько столбцов, то для каждого столбца нужно ADD field_name parametrs записать через запятую:

    $sql="ALTER TABLE my_frends ADD adress_2 TEXT,
          ADD adress_3 TEXT, ADD adress_4 TEXT";
    mysql_query($sql);

    В случае, если надо дописать два столбца внутри таблицы, можно поступить следующим образом:

    $sql="ALTER TABLE my_frends ADD adress_2 TEXT AFTER adress_1,
          ADD adress_3 TEXT AFTER adress_2";
    mysql_query($sql);

    Т.е. мы первый вставляемый столбец записываем после adress_1, а второй после первого.


    Изменение свойств таблицы : Изменение свойств столбца (ALTER TABLE CHANGE)

    Изменить свойства одного или нескольких столбцов можно при помощи следующей конструкции:

    ALTER TABLE table_name CHANGE field_name_old field_name_new parametrs
    где
  • table_name - имя таблицы, в которой находится изменяемый столбец;
  • field_name_old - имя столбца изменяемого столбца;
  • field_name_new - новое имя изменяемого столбца (должно равняться field_name_old, если мы не хотим поменять имя столбца);
  • parametrs - новые параметры столбца.
  • В следующем примере установим тип строки field_1 как текст:

    $sql="ALTER TABLE my_table CHANGE field_1 field_1 TEXT";
    mysql_query($sql);
    А если необходимо при этом еще и переименовать столбец в field_2, то получиться так:

    $sql="ALTER TABLE my_table CHANGE field_1 field_2 TEXT";
    mysql_query($sql);

    В случае, если надо изменить свойства сразу нескольких столбцов, то конструкцию CHANGE field_name_old field_name_new parametrs повторяем через запятую для каждого столбца:

    $sql="ALTER TABLE my_table CHANGE field_1 field_2 TEXT,
          CHANGE field_3 field_3 TEXT";
    mysql_query($sql);

    Изменение свойств таблицы : Удаление столбцов (ALTER TABLE DROP)

    Удаление столбца можно сделать при помощи следующей конструкции:
    ALTER TABLE table_name DROP field_name

    где

  • table_name - имя таблицы, в которой будет удален столбец;
  • field_name - имя удаляемого столбца.
  • $sql="ALTER TABLE search DROP id_num";
    mysql_query($sql);
    Если мы хотим удалить сразу несколько полей, то надо через запятую повторить DROP field_name для каждого столбца:
    $sql="ALTER TABLE search DROP id_1, DROP id_2, DROP id_3";
    mysql_query($sql);

    Posted in Справочник по MySQL | No Comments »

    Индексирование файлов в Windows

    Posted by writer on 2nd Июнь 2008

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

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

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

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

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

    Все основные настройки механизма индексирования сосредоточены в диалоге Параметры индексирования, который вызывается при помощи одноименного значка Панели управления. Данный диалог состоит из трех интересных для нас элементов.

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

    Также обратите внимание на поле Индексировать следующие места и кнопку Изменить. С их помощью можно определить каталоги,  содержимое которых будет заноситься в индекс.

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

    Читателям, которые интересуются реестром, возможно будет интересно узнать о некоторых его параметрах, относящихся к настройкам индексирования, которые нельзя изменить стандартными способами.

    Например, к таким параметрам относится параметр dword-типа UseLowPriorityConfiguration, расположенный в ветви реестра HKLM/SOFTWARE/Microsoft/Windows Search/. Он позволяет изменить приоритет службы индексирования.

    Также можно обратить внимание на параметр dword-типа LowDiskMinimumBytes и NotifyQueueFileLimit, расположенные в ветви реестра HKLM/Software/Microsoft/ Windows Search/Gather. Они определяют минимальный размер свободного места на диске в мегабайтах с базой данных, необходимой для индексации, а также максимальное количество файлов в индексе.

    Posted in Обо всем | No Comments »