Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 723

Приветствую вас, любители высоких технологий! Вот и очередной выпуск рассылки. За неделю на сайте появилось много новых и интересных материалов, некоторые из которых вы сможете увидеть в этом выпуске.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

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

[- к содержанию -]

Ответ #1 @Алексей Немиро 04.04.2013 10:48
Сложная тема :)

Само по себе, нормализация - это приведение базы в идеальный вид по мнению Кристофера Дейта, который внес свой вклад в развитие релаксационных баз данных, в коих число входит и SQL Server.

В первой форме необходимо, чтобы данные были полностью уникальными. Чтобы не было дубликатов данных, в том числе: строк с полностью идентичными данными, колонок с одинаковыми названиями.

Важный момент, нужно чтобы не было логических дубликатов данных.

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

Например, есть холодильник. Требуется, чтобы на первой полке лежали только красные яблоки, на второй - желтые, на третей - зеленые.
Неправильная логика хранения яблок может быть следующей:
Первая полка   | Вторая полка  | Третья полка 
------------------------------------------------
Красное яблоко | Желтое яблоко | Зеленое яблоко
Почему логика неправильная, думаю это очевидно. В данной структуре присутствует жесткая привязка яблок к полкам. Стоит изменить количество яблок или добавить новую полку, структура холодильника сильно изменится, станет не удобной, сложной, и будет требоваться много времени, чтобы найти что-то в таком холодильнике, не говоря уже о том, само изменение структуры процесс достаточно дорой.
Первая полка   | Вторая
полка  | Третья полка 
------------------------------------------------
Красное яблоко | Желтое яблоко | Зеленое яблоко
               | Желтое яблоко | Зеленое яблоко
               | Желтое яблоко | Зеленое яблоко
               | Желтое яблоко |  
               | Желтое яблоко |
               | Желтое яблоко | 
               | Желтое яблоко |
Представим, что в холодильнике хранится сто тонн яблок. Если понадобится добавить новую полку, то придется разгрузить холодильник (а там ведь сто тонн яблок), добавить полку и загрузить обратно яблоки (напомню, что их там сто тонн). В реальных условиях, изменение структуры базы данных, размер которой несколько десятков, а то и сотен, гигабайт может занять множество СУТОК. Даже самые простые действия в изменении структуры базы данных могут сделать базу недоступной для работы, что при коммерческом использовании может стать серьезной проблемой.

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

В идеале структура должна быть такой:
Полка
       | Яблоко
-----------------------------
Первая полка | Красное яблоко 
-----------------------------
Вторая полка | Желтое яблоко 
-----------------------------
Третья полка | Зеленое яблоко
Т.е. расширение данных будет происходить по вертикали, а не горизонтали. Это лучше, т.к. не нужно будет менять структуру таблицы.

Яблок может быть множество, если они будут хранить в куче, то сложно будет выбрать конкретное яблоко. Например:
Полка        | Яблоко
-----------------------------
Первая полка | Красное яблоко 
-----------------------------
Вторая полка | Желтое яблоко 
             | Желтое яблоко
             | Желтое яблоко
-----------------------------
Третья полка | Зеленое яблоко
             | Зеленое яблоко
             | Зеленое яблоко
             | Зеленое яблоко
             | Зеленое яблоко
Попробуй-ка выбрать второе яблоко со второй полки! А если их там сотни, тысячи, миллионы?
Происходит группировка логически идентичных объектов в ячейке данных, т.е. не соответствует первой нормальной форме.
Яблоки должны быть разделены:
Полка        | Яблоко
-----------------------------
Первая полка | Красное яблоко 
-----------------------------
Вторая полка | Желтое яблоко 
-----------------------------
Вторая полка | Желтое яблоко
-----------------------------
Вторая полка | Желтое яблоко
-----------------------------
Третья полка | Зеленое яблоко
-----------------------------
Третья полка | Зеленое яблоко
-----------------------------
Третья полка | Зеленое яблоко
-----------------------------
Третья полка | Зеленое яблоко
-----------------------------
Третья полка | Зеленое яблоко
Однако яблоки не уникальные. Сделать их уникальными можно добавив новое свойство. У нас уже есть два свойство - цвет и тип продукта (яблоко):
Полка        | Продукт | Цвет
---------------------------------
Первая полка | Яблоко  | Красный
---------------------------------
Вторая полка | Яблоко  | Желтый
---------------------------------
Третья полка | Яблоко  | Зеленый
Чтобы продукты были уникальными, им можно присвоить порядковый номер:
Полка        | Номер продукта | Продукт | Цвет
---------------------------------------------------
Первая полка | 1              | Яблоко  | Красный
---------------------------------------------------
Вторая полка | 2              | Яблоко  | Желтый
---------------------------------------------------
Вторая полка | 3              | Яблоко  | Желтый
---------------------------------------------------
Вторая полка | 4              | Яблоко  | Желтый
---------------------------------------------------
Третья полка | 5              | Яблоко  | Зеленый
---------------------------------------------------
Третья полка | 6              | Яблоко  | Зеленый
---------------------------------------------------
Третья полка | 7              | Яблоко  | Зеленый
---------------------------------------------------
Третья полка | 8              | Яблоко  | Зеленый
---------------------------------------------------
Третья полка | 9              | Яблоко  | Зеленый
Аналогично можно сделать с полками, чтобы не было дубликатов:
Номер полки  | Название полки 
---------------------------------
1            | Первая полка 
---------------------------------
2            | Вторая полка 
---------------------------------
3            | Третья полка
Холодильник:
Номер полки  | Номер продукта | Продукт | Цвет
---------------------------------------------------
1            | 1              | Яблоко  | Красный
---------------------------------------------------
2            | 2              | Яблоко  | Желтый
---------------------------------------------------
2            | 3              | Яблоко  | Желтый
---------------------------------------------------
3            | 4              | Яблоко  | Желтый
---------------------------------------------------
3            | 5              | Яблоко  | Зеленый
---------------------------------------------------
3            | 6              | Яблоко  | Зеленый
---------------------------------------------------
3            | 7              | Яблоко  | Зеленый
---------------------------------------------------
3            | 8              | Яблоко  | Зеленый
---------------------------------------------------
3            | 9              | Яблоко  | Зеленый
Аналогично можно сделать с продуктами и цветом:
Номер типа продукта  | Название продукта
---------------------------------
1                    | Яблоко 
Номер цвета     | Название цвета
---------------------------------
1               | Красный
---------------------------------
2               | Желтый
---------------------------------
3               | Красный
В конечном итоге, холодильник соответствующий идеологии нормализации будет таким:
Номер полки  | Номер продукта | Номер типа продукта | Номер цвета
-------------------------------------------------------------------
1            | 1              | 1                   | 1
-------------------------------------------------------------------
2            | 2              | 1                   | 2
-------------------------------------------------------------------
2            | 3              | 1                   | 2
-------------------------------------------------------------------
3            | 4              | 1                   | 2
-------------------------------------------------------------------
3            | 5              | 1                   | 2
-------------------------------------------------------------------
3            | 6              | 1                   | 3
-------------------------------------------------------------------
3            | 7              | 1                   | 3
-------------------------------------------------------------------
3            | 8              | 1                   | 3
-------------------------------------------------------------------
3            | 9              | 1                   | 3
В таком холодильник можно легко добавить новые полки, или убрать старые. Расширить ассортимент продуктов, цветов. Поменять расположение продуктов, поменять сами продукты и любые их свойства.

По сути, каждый программист, с получением опыта, стремится к подобной структуре.

Однако, такая, вертикальная структура имеет свои подводные камни, если перестараться, может получиться "как всегда". Нужно учитывать ресурсы и реальные возможности при проектировании базы данных. Учитывать потенциальные объем, варианты расширения. Если сделать полностью гибкую базу и эта гибкость окажется невостребованной, то это в конечном итоге может негативно отразиться на производительности. Также нужно умело использовать гибкость базы при работе с ней. Стараться делать меньше JOIN-ов (избыток JOIN-ов в вертикальной структуре может серьезно тормознуть базу), в меру создавать индексы (если перестараться, опять же можно снизить производительность).

Нужно стремиться упрощать все, ибо простота - это есть совершенство.

[- к содержанию -]

Добавить свой ответ в эту тему
Среда Visual Basic STUDIO’2010 Professional
Не совпадает число значений запроса и число результирующих полей.
В таблице 11 полей, я же задал только для 4-х.
Public Con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; " +
            " Data Source=E:\CD_MY_new\DATA\My_Pension.mdb") 
	Public DT As New Data.DataTable 
Dim sqlCommand As New OleDbCommand("", Con)
        sqlCommand.Parameters.Clear()

        sqlCommand.Parameters.Add("@PensNum", SqlDbType.NVarChar, 10)
        sqlCommand.Parameters.Add("@LastName", SqlDbType.NVarChar, 20)
        sqlCommand.Parameters.Add("@FirstName", SqlDbType.NVarChar, 15)
        sqlCommand.Parameters.Add("@patronymic", SqlDbType.NVarChar, 25)
        ' а заодно и
        sqlCommand.CommandText = "INSERT INTO [Pensioner] VALUES(@PensNum, @LastName," &
                "@FirstName, @patronymic)"
        
        For Each row As DataRow In DT.Rows
            Dim sPensNum As String = row("NumPensCertificate").ToString()
            Dim sLastName As String = row("LastName").ToString()
            Dim sFirstName As String = row("FirstName").ToString()
            Dim sPatronymic As String = row("patronymic").ToString()

            sqlCommand.Parameters("@PensNum").Value = sPensNum
            sqlCommand.Parameters("@LastName").Value = sLastName
            sqlCommand.Parameters("@FirstName").Value = sFirstName
            sqlCommand.Parameters("@patronymic").Value = sPatronymic

            DT.Clear() ' Очищаем таблицу DT 
            Con.Open()
sqlCommand.CommandText = "INSERT INTO [Pensioner] VALUES(@PensNum, @LastName, @FirstName, @patronymic)"
sqlCommand.ExecuteNonQuery() ' Не совпадает число значений запроса и число результирующих полей.
            DA = New OleDb.OleDbDataAdapter(sqlCommand) 'Через адаптер получаем результаты запроса
            Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
            Con.Close() ' Закрываем соединение.
        Next
СПАСИБО!

[- к содержанию -]

Ответ #1 @Алексей Немиро 02.04.2013 18:59
Запрос неправильный, нужно явно указывать имена полей, в которые добавляются данные:
INSERT INTO [Pensioner] (PensNum, LastName, FirstName, patronymic) VALUES (@PensNum, @LastName, @FirstName, @patronymic)

[- к содержанию -]

Добавить свой ответ в эту тему
Привет всем!
Как можно сохранить картинку из RichTextBox-а в графическом формате(jpg,png,bmp...)?
Спасибо!

[- к содержанию -]

Ответ #1 @inv.DS 31.03.2013 09:00
Какой язык программирования?

[- к содержанию -]

Ответ #2 @Алексей Немиро 02.04.2013 09:54
Из кода RTF можно выдернуть.

[- к содержанию -]

Добавить свой ответ в эту тему
Алексей вы будете гордится мной я сам сделал это!!!!
Вот скрины и код:
Using w As New FoxTools.Lib.Net.Web()

            w.Method = FoxTools.Lib.Net.Enums.HttpMethod.POST
            w.Url = "http://f-bit.ru/"
            w.ResponseAutoEncoding = True
            w.ContentType = "multipart/form-data"
            w.Queries.AddQuery("PHP_SESSION_UPLOAD_PROGRESS", "test")
            w.Queries.AddFile("uploadfile", "test.txt", IO.File.ReadAllBytes("D:\Desktop\test.txt"))
            w.Queries.AddQuery("action", "upload")
            w.Queries.AddQuery("pass", "")
            w.Queries.AddQuery("pass_2", "")
            w.Queries.AddQuery("delete", "1")
            w.Queries.AddQuery("description", "")
            w.Queries.AddQuery("show_options", "false")
            Dim result As String = w.ExecuteString()

            Dim Url As String = Regex.Match(result, "(.*?)result(.*?)1(.*?)url(.+?)(.+?)(.+?)(?<Url>.+?)"",""delete_url"":""0""}").Groups("Url").Value
            Process.Start(Url)
        End Using


[- к содержанию -]

Ответ #1 @Алексей Немиро 30.03.2013 10:24
Добавить свой ответ в эту тему
Подскажите или поправте меня пожалуйста... Проблемма такова: Код на VB6 необходимо создать программно директорию куда потом и сохраним файл, для его последующего чтения.
вот как я пробую:
Private Sub Command1_Click()
If Dir(k) <> "" Then
k = "C:\temp\Рабочий"
MkDir (k)
End If

FN = FreeFile
a = InputBox("введите имя файла")
FName = k & "\" & a & ".txt"
Open FName For Output As #FN
Print #FN, Text1.Text
Close #FN
Shell "cmd /X /C start " & FName, vbHide
End Sub

На XP работает нормально, но при переносе на V7(64-бит) выдает ошибку типа файл не найден...Да походу и не сохранился никуда...Может недостаточно прав для сохранения в новых ОС или ...как можно обойти проблемму? Сам перехожу на VB.net, но программку на VB6 все же хочется адаптировать к новым осям..Спасибо всем...

[- к содержанию -]

Ответ #1 @inv.DS 30.03.2013 08:02
Уважаемый, в Windows Seven программы надо запускать от имени администратора.

k = "C:\Рабочий"
Set FSO = CreateObject("Scripting.FileSystemObject")
File = k
If FSO.FileExists(File) Then
    MsgBox "Каталог " & File & " существует = " & FSO.FileExists(File)
Else
    MsgBox "Каталог не найден, сейчас будет создан!"
    MkDir (k)
End If

FN = FreeFile
a = InputBox("введите имя файла")
FName = k & "\" & a & ".txt"
Open FName For Output As #FN
Print #FN, Text1.Text
Close #FN
Shell "cmd /X /C start " & FName, vbHide

[- к содержанию -]

Ответ #2 @Леонид 31.03.2013 05:13
Запускать от имени администратора это и так понятно.....
по коду Спасибо..каталог создается, но 05 строка игнорируется при наличии каталога переходит на 07 строку и выдает ошибку "75" то есть условие
04 If FSO.FileExists(File) Then
05 MsgBox "Каталог " & File & " существует = " & FSO.FileExists(File)
06 Else
не выполняется????

[- к содержанию -]

Ответ #3 @inv.DS 31.03.2013 08:52
Dim k As String

Private Sub Command1_Click()
    k = "D:\Ðàáî÷èé\"
If Dir(k) <> "" Then ' Åñëè ôàéëà/ïàïêè íå ñóùåñòâóåò, òî ôóíêöèÿ âîçâðàùàåò "", åñëè æå ñóùåñòâóåò, òî ôóíêöèÿ âîçâðàùàåò
èìÿ ôàéëà
    MsgBox "Ôàéë ñóùåñòâóåò"
    GoTo Try
Else
    MsgBox "Ôàéë íå ñóùåñòâóåò"
    FN = FreeFile
    a = InputBox("ââåäèòå èìÿ ôàéëà")
    If a = "" Then MsgBox "Âû íå óêàçàëè äàííûõ!": End
        FName = k & "\" & a & ".txt"
        Open FName For Output As #FN
        Print #FN, Text1.Text
        Close #FN
        Shell "cmd /X /C start " & FName, vbHide
End If

Exit Sub
Try:

    FN = FreeFile
    a = InputBox("ââåäèòå èìÿ ôàéëà")
    FName = k & "\" & a & ".txt"
    Open FName For Output As #FN
    Print #FN, Text1.Text
    Close #FN
    Shell "cmd /X /C start " & FName, vbHide
End Sub

На вот тебе рабочий код! Кстати "Спасибо" можно сказать и кнопочкой "Спасибо", или повышением репутации!

[- к содержанию -]

Добавить свой ответ в эту тему
REg @i32 29.03.2013 14:42
Привет всем.Что то не получается отловить ссылку.Раньше ловил.-Может забанели как .Хотя ответ приходит от
POST запроса..
<p style=""line-height:" 2; font-size: 12px;"><a href="http://url.html" target="_blank">http://url.html</a><br></p>
Перепробовал разные варианты последний такой
Dim mw As Match = Regex.Match(soqww, "<a href=([^\x3e]*) target=""_blank"">(?<Bllw>.*?)</a><br></p>")
        Label6.Text = (mw.Groups("Bllw").Value)
или
target=""_blank""\x3E(?<Bllw>.*?)</a><br></p>")
спасибо..

[- к содержанию -]

Ответ #1 @Алексей Немиро 29.03.2013 14:49
\x3E - это же закрывающаяся треугольная скобка (>).
<a href=(все что угодно, кроме >) target=""_blank"">(?<Bllw>.*?)</a><br></p>
Естественно, не будет работать, т.к. между > и "все что угодно" стоит "target=""_blank"".

Так:
<a([^\x3e]*?)>(?<Bllw>.*?)</a>
или так:
<a(.*?)>(?<Bllw>.*?)</a>

[- к содержанию -]

Ответ #2 @i32 29.03.2013 14:57
Что то не найти..мсг-пусто
MsgBox(mw.Groups("Bllw").Value)

[- к содержанию -]

Ответ #3 @i32 29.03.2013 15:08
Так тег же со скобкой
target="_blank">
Я просто разные варианты мутил.Этот кстате вариант и работал..Сейчас перестал
 Dim soqww As String = thepage
        Match = Regex.Match(soqwt, "target\x3D""\x5Fblank""\x3E(?<Bllw>.*?)\x3C/a><br></p>")
        Label6.Text = (mw.Groups("Bllw").Value)

[- к содержанию -]

Ответ #4 @Алексей Немиро 29.03.2013 15:30
Нужен весь текст, в котором делается поиск.
Проблема может быть в пробелах/переводах строк, в регистре символов.
Можно попробовать добавить опции Multiline, Singlieline:
Match = Regex.Match(soqwt, "target\x3D""\x5Fblank""\x3E(?<Bllw>.*?)\x3C/a><br></p>", RegularExpressions.Singleline)
Match = Regex.Match(soqwt, "target\x3D""\x5Fblank""\x3E(?<Bllw>.*?)\x3C/a><br></p>", RegularExpressions.Multiline)
Match = Regex.Match(soqwt, "target\x3D""\x5Fblank""\x3E(?<Bllw>.*?)\x3C/a><br></p>", RegularExpressions.Singleline Or RegularExpressions.Multiline)
Match = Regex.Match(soqwt, "target\x3D""\x5Fblank""\x3E(?<Bllw>.*?)\x3C/a><br></p>", RegularExpressions.Singleline Or RegularExpressions.Multiline Or RegularExpressions.IgnoreCase)

[- к содержанию -]

Ответ #5 @i32 29.03.2013 20:46
RegexOptions.SingleLine
Так наверно?

[- к содержанию -]

Добавить свой ответ в эту тему · В теме есть еще 6 ответов. Смотреть все ответы.

Все темы и обсуждения

Исходные коды

WPF 3D ListBoxItems

Visual Basic .NET: Интерфейс @Shark1 04.04.2013 04:17
Пример динамического добавления объекта (в данном случае это картинки) в элемент управления ListBox с возможностью повернуть ListBoxItem относительно оси Y.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Все исходные коды

Вакансии в IT

Web-дизайнер

Россия, Нижний Новгород | Удаленная работа

Web-дизайнер

Россия, Нижний Новгород | Работа в офисе | 25 000,00 KBP

Инженер-программист

Россия, Иркутск | Работа в офисе | 21 750,00 KBP

Инженер-программист

Россия, Тюмень | Работа в офисе | 90 000,00 KBP

Web-программист

Россия, Тюмень | Работа в офисе | 20 000,00 KBP

Программист 1С

Россия, Тюмень | Работа в офисе | 30 000,00 KBP

Инженер-программист

Россия, Новосибирск | Работа в офисе | 35 000,00 KBP

Web программист

Россия, Новосибирск | Работа в офисе | 15 000,00 KBP

Программист 1С

Россия, Ростов-на-Дону | Работа в офисе | 50 000,00 KBP

PHP-программист

Россия, Ростов-на-Дону | Работа в офисе | 30 000,00 KBP

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

"Доктор Веб" обновляет интернет-сервис Dr.Web AV-Desk

Компания «Доктор Веб» сегодня выпустила агент версии 6.2 в рамках интернет-сервиса Dr.Web AV-Desk, на базе которого предоставляется услуга "Антивирус Dr.Web". Новый агент доступен для сетей с серверами версий 6.0 и 6.1. В нем реализована поддержка новых операционных систем семейства Windows, интегрированы новые модули, ряд компонентов актуализирован, выявленные ошибки исправлены.

Основная новость для подписчиков услуги «Антивирус Dr.Web», использующих новейшие ОС от Microsoft: теперь агент (6.2.0.3210) может работать на компьютерах с установленными ОС Windows 8 и Windows Server 2012.

В состав обновляемых модулей включена новая версия брандмауэра (7.0.1.11210), оснащенного усовершенствованным пользовательским интерфейсом, обновленным драйвером, и включающего в себя все самые современные наработки, соответствующие продуктам Dr.Web для Windows. Новая версия антивирусного сканера (7.0.100.11230) отличается высоким быстродействием и позволяет выполнять проверку в многопоточном режиме. Кроме того, сканер также оснащен новым графическим интерфейсом. Также в агент Dr.Web AV-Desk интегрирован новый сервис Dr.Web Net Filtering Service (6.0.13.1170) с драйвером перехвата трафика Dr.Web Net Filter for Windows (7.0.2.7202): эти модули пришли на смену устаревшей технологии перехвата трафика через стек LSP и заменили процессы почтового антивирусного монитора SpIDer Mail и веб-антивируса SpIDer Gate.

Изменения коснулись и модуля самозащиты Dr.Web SelfPROtect (8.0.1.11301) — была заметно увеличена производительность компонента, а также исправлен целый ряд ошибок. В частности, была повышена устойчивость к изменениям со стороны руткитов, способных перехватывать вызовы используемых для управления работой приложений процедур.

В сканирующий сервис Scanning Engine (8.0.2.12140) также было внесено множество исправлений: в частности, исправлена ошибка, вызывавшая аварийное завершение работы сервиса при перезагрузке Scanning Engine или вирусных баз, ошибка утечки памяти при работе с менеджером карантина, устранены причины сбоев сервиса в версиях ОС Windows для стран Восточной Азии.

Новые компоненты - новая версия сканера с графическим интерфейсом, а также сервис Dr.Web Net Filtering Service с драйвером перехвата трафика Dr.Web Net Filter for Windows, - будут установлены в операционных системах Windows 2000 с пакетом обновлений SP4 и накопительным пакетом обновлений Update Rollup 1, Windows XP с пакетом обновлений SP2 и старше, Windows 2003 пакетом обновлений SP1 и старше, Windows Vista и старше. В остальных операционных системах данные компоненты использоваться не будут.

Для подписчиков услуги "Антивирус Dr.Web" обновление пройдет автоматически, однако потребует двух перезагрузок компьютеров.

03.04.2013 10:41 · Категория: Безопасность · Источник: CyberSecurity.ru

[- к содержанию -]

В DNS-сервере BIND обнаружена критически опасная уязвимость

Уязвимость в популярном программном обеспечении BIND, используемом для создания серверов доменных имен, позволяет полностью обрушить работу системы и даже затронуть другие сервисы, работающие на том же оборудовании. С таким заявлением в пятницу выступили разработчики из ISC (Internet Systems Consortium), ведущие разработку BIND.

ISC представляет собой некоммерческую организацию, занимающуюся созданием BIND уже на протяжении многих лет. Здесь сообщили, что уязвимости подвержены только те версии BIND, что ориентированы на работу в Unix/Linux-системах, тогда как Windows-вариант BIND не подвержен данной проблеме.

Согласно обнародованной информации, уязвимость кроется по данным разработчиков, в системе обработки регулярных выражений, за которые отвечает библиотека libdns, входящая в BIND. Уязвимы оказываются версии BIND 9.7.x, 9.8.0 - 9.8.5b1 и 9.9.0 - 9.9.3b1. Отметим, что все основные вендоры коммерческих Linux- и Unix-систем в пятницу или субботу уже выпустили экстренные исправления для DNS-сервера.

По словам специалистов, опасность данной уязвимости заключается в том, что BIND на сегодня является самым популярным DNS-сервером, а для Unix/Linux-систем он вообще является стандартом де-факто. Также BIND используют Solaris, Mac OS X и FreeBSD.

Уязвимость можно использовать путем отправки специально сконструированных запросов, которые вынуждают демон BIND выйти за пределы отведенной памяти и провоцируют крах сервера с последующим доступом к другим данным на атакуемом сервере. ISC отмечает, что данный баг является критически опасным и ему подвержены как авторитативные, так и рекурсивные DNS-серверы.

Как сообщили в ISC, если у пользователя нет возможности обновить BIND из новых исходников, доступных на сайте производителя, ему необходимо запретить использование регулярных выражений, вручную отредактировав файл config.h согласно инструкциям, доступным по адресу https://kb.isc.org/article/AA-00879

Версии BIND 7.x также подвержены уязвимости, но они не исправлены, так как больше не поддерживаются, версии BIND 10.x не подвержены уязвимости, но пока сам разработчик не рекомендует работу с ними на рабочих серверах.

В ISC уже сообщили, что им известно об атаках на серверы BIND, используемых на реальных серверах. В компании Arbor Networks, оказывающей защиту от DDoS-атак, также говорят об известных им случаях атак и призывают как можно быстрее обновиться.

01.04.2013 14:50 · Категория: Безопасность · Источник: CyberSecurity.ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное