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

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


Выпуск # 666

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


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

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

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

Форумы Kbyte.Ru

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

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

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

Доброго времени суток!
Имеется база данных из нее вытаскивается таблица, но не вся, а только нужные поля для отображения.
Как запихать все это в DataGrid я знаю и знаю несколько способов, но тут задача несколько другая, нужно получить что-то типа того что на данном скриншоте:



Как бы странно это не звучало, но скриншот сделан с моей программы и вы конечно подумаете зачем я тогда вас спрашиваю как это сделать, но меня интересует как это сделать ПРАВИЛЬНО, т.е. с наименьшей нагрузкой на железо.

Как делаю я (только не кидайте камнями, я только учусь):
1) выгружаю таблицу
2) прохожу по всем записям таблицы
2.1) добавляю по одной записи в DataGrid, добавляя в нужные поля картинки (они для удобного управления)
2.2) изменяю цвета ячеек последней добавленной записи

код выглядит примерно так:
  Dim d_Table As DataTable
  Dim d_Row As DataGridViewRow

  d_Table = Orders_GetTable(GetFilter(cOrder.sREAD), GetParams(cOrder.sREAD))
  For i As Integer = 0 To d_Table.Rows.Count - 1
   dgv_Orders.Rows.Add(New Object() {d_Table(i).Item(0), d_Table(i).Item(1), "", d_Table(i).Item(2), d_Table(i).Item(3), d_Table(i).Item(4), "", d_Table(i).Item(5), My.Resources.stat_11, My.Resources.order_edit, My.Resources.order_delete})
   d_Row = dgv_Orders.Rows(dgv_Orders.Rows.Count - 1)
   If Sett.Orders.VisibleColor = True Then
    d_Row.Cells(1).Style.BackColor = Color1
    d_Row.Cells(2).Style.BackColor = Color0
    d_Row.Cells(6).Style.BackColor = Color0
   End If
  Next

Просто на моем рабочем компьюторе (впринципе уже стареньком) все работает быстро на 10 записях иногда мерцает при обновлении, но на более слабых (на пенках) даже при 10 записях уже идет плавная отрисовка, вот почему я и задался вопросом по оптимизации данного момента.
Можно ли как-нибудь это оптимизировать или хотя бы скрыть на время отрисовку, чтоб сразу показывался результат?
Но лучше подскажите по оптимизации.

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

Ответ #1 @Aleksey Nemiro 30.11.2011 12:11
Если мне не изменяет память, установка у DataGrid свойства Enabled = False, перед загрузкой данных, должна решить проблему.
Либо можно вообще скрывать DataGrid и показывать какой-нибудь ProgressBar.

Если данных много, можно в цикл вставить Application.DoEvents(), но это замедлит процесс загрузки.

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

Ответ #2 @Pavel_61981 30.11.2011 13:19
Я решил попробовать сделать так:
1) выгружаю таблицу
2) добавлю к таблице нужные колонки (для картинок)
3) привязываю таблицу к DataGrid
4) в CellFomatting делаю анализ ячеек для цветовой градации и добавляю картинки в последние колонки

Потом может сравню производительность... интересно, я один за это переживаю?

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

Ответ #3 @Aleksey Nemiro 30.11.2011 14:26
3) привязываю таблицу к DataGrid
Через DataSource? Если логика позволяет, то можно и так

Я обычно добавляют данные в DataGrid циклом, примерно как показано в тексте вопроса. Это удобней и визуализацию (процесс загрузки) при необходимости можно сделать, без особых заморочек. Главное запретить прорисовку грида, чтобы работало быстрее и чтоб он не мерцал. Двойная буферизация формы тоже может помочь избавиться от мерцания, но наверняка тормознет процесс загрузки.

Если данных немного, то при биндинге, будет заметное преимущество в скорости загрузки данных. Если данных будет много, программа при загрузке подвиснет. Хотя процесс биндинга, наверное, можно в отдельный поток вывести и показать какой-нибудь процесс загрузки. Но это будет сложнее, чем грузить данные циклом


Тесты в свое время я тоже проводил, как раз нашел этот проект у себя. Результаты ниже.
~280 000 строк данных, три колонки: число, строка (255 символов), дата. Без дополнительной обработки. База Access. Время получения данных не учитывается, только вывод в грид.
На моем компе (Q9450, 4 GB RAM):

- биндинг: 0.056 сек.

- цикл, без прорисовки грида (Visible = false): ~1 сек. (от 0.9 до 1.1)

- цикл, с прорисовкой грида (Visible = true): 3.43 сек.
- цикл, с прорисовкой грида (Visible = true) +двойная буферизация +Application.DoEvents после добавления каждой строки: много-много минут (самый красивый вариант, но и самый тормознутый; мерцание исключено)

- цикл, грид недоступен (Enabled = false): 0.78 сек.
- цикл, грид недоступен (Enabled = false) +Application.DoEvents после добавления каждой новой строки: 0.844 сек.
- цикл, грид недоступен (Enabled = false) +Application.DoEvents после добавления каждой 1000 строки: 0.789 сек.

Для учета времени использовал потоковый таймер с интервалом 1 мс.

Как я и говорил, у биндинга явное преимущество. При заполнении циклом, блокировка (Enabled = false) грида значительно увеличивает скорость загрузки данных. Если в перспективе данных будет много, то лучше использовать биндинг. Если данных немного и нужны безграничные возможности по их обработке, то лучше использовать циклы. Оптимальный вариант при заполнении циклом можно подобрать опытным путем.

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

Ответ #4 @Pavel_61981 30.11.2011 16:31
Ой, даже не ожидал столь развернутый ответ

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

Но учитывая что строк в таблицах более 300-400 не будет, то думаю тут любой вариант подойдет... просто я дотошный

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

Добавить свой ответ в эту тему
Всем привет.
Вопрос конечно банальный, но мне не удалось найти на него исчерпывающий ответ.
Кто знает каким образом проходит SQLDataReader по полученному результату запроса из БД?
Проблема в том, что в очередной раз сталкиваюсь с проблемой поиска ошибки при попытке считывания данных.
Вот код:
DataTable people = new DataTable ();
        try
        {
                 string query = string.Format(@"SELECT dbo.Book.ID, 
                                                dbo.PeopleGroup.PersonType_Name, 
                                                dbo.Book.Surname, 
                                                dbo.Book.FirstName, 
                                                dbo.Book.SecondName, 
                                                dbo.Book.Phone_work, 
                                                dbo.Book.Phone_mob, 
                                                dbo.Book.Phone_home, 
                                                dbo.Book.Email, 
                                                dbo.Book.Birthday, 
                                                dbo.Book.Address, 
                                                dbo.Book.User_ID, 
                                                dbo.Book.PersonType_ID 
                                                FROM dbo.Book 
                                                INNER JOIN dbo.PeopleGroup ON dbo.Book.PersonType_ID = dbo.PeopleGroup.PersonType_ID
                                                ORDER BY dbo.Book.Surname");
            SqlCommand com = new SqlCommand(query, SQLCon);
            SQLCon.Open();

            SqlDataReader reader = com.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {                    people.Rows.Add(reader.GetInt32(0),
                                            reader["PersonType_Name"].ToString(),
                                            reader["Surname"].ToString(),
                                            reader["FirstName"].ToString(),
                                            reader["SecondName"].ToString(),
                                            reader["Phone_work"].ToString(),
                                            reader["Phone_mob"].ToString(),
                                            reader["Phone_home"].ToString(),
                                            reader["Email"].ToString(),
                                            reader["Birthday"].ToString(),
                                            reader["Address"].ToString(),
                                            reader.GetInt32(11),
                                            reader.GetByte(12));
                }
            }
        }
        catch (Exception ex)
        {

        }
        finally
        {
            if (SQLCon.State == ConnectionState.Open)
                SQLCon.Close();
        }

На картинке видно, что ридер успел прочитать некоторую информацию. Но на чем он споткнулся, я не могу понять - порядок считывания данных мне не понятен.
1. Имеет ли значение, в каком порядке я считываю данные из полученных данных?

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

Ответ #1 @Aleksey Nemiro 28.11.2011 13:04
Ридер читает данные построчно, как указано в инструкции ORDER BY.

В каком порядке получать поля, хм... Хотел сказать, что значения не имеет, но вижу что в коде используется обращение к полям как по имени (например: reader["PersonType_Name"].ToString()), так и по индексу (например: reader.GetInt32(0))

Если обращаться к полям только по имени, то в каком порядке, значения не имеет.
А если по индексу, то порядок должен соответствовать порядку полей определенном в инструкции SELECT FROM. Хотя приведенный код, в плане индексов, верный.

Если данные имеют значение NULL (DBNull.Value), то может происходить исключение при преобразовании данных в ToString и в функциях GetInt32, GetByte. Чтобы этого не происходило, нужно проверять данные на DBNull.Value. Лучше сделать несколько хелпер-функций для этого:
public string GetDataAsString(object obj)
{
 if (obj == DBNull.Value) return String.Empty;//данные имеют значение NULL, возвращаем пустую строку
 return obj.ToString(); // есть данные, возвращаем их в виде строки
}

public int GetDataAsInt32(object obj)
{
 if (obj == DBNull.Value) return 0;//данные имеют значение NULL, возвращаем 0
 return Convert.ToInt32(obj); // есть данные, возвращаем их в виде числа
}

public bool GetDataAsBool(object obj)
{
 if (obj == DBNull.Value) return false;//данные имеют значение NULL, возвращаем false
 return Convert.ToBoolean(obj); // есть данные, возвращаем их в виде boolean
}
и можно использовать эти функции при добавлении данных куда-либо:
     people.Rows.Add(GetDataAsInt32(reader["ID"]),
           GetDataAsString(reader["PersonType_Name"]),
           GetDataAsString(reader["Surname"]),
           GetDataAsString(reader["FirstName"]),
           GetDataAsString(reader["SecondName"]),
           GetDataAsString(reader["Phone_work"]),
           GetDataAsString(reader["Phone_mob"]),
           GetDataAsString(reader["Phone_home"]),
           GetDataAsString(reader["Email"]),
           GetDataAsString(reader["Birthday"]),
           GetDataAsString(reader["Address"]),
           GetDataAsInt32(reader["User_ID"]),
           GetDataAsInt32(reader["PersonType_ID"]));
(код на работоспособность не проверял)


PS: Можно сразу получить таблицу данных, минуя DataReader:
DataTable people = new DataTable();
using (SqlConnection myConn = new SqlConnection("строка соединения с бд"))
{
 myConn.Open();
 SqlDataAdapter DA = new SqlDataAdapter(@"SELECT dbo.Book.ID, 
         dbo.PeopleGroup.PersonType_Name, 
         dbo.Book.Surname, 
         dbo.Book.FirstName, 
         dbo.Book.SecondName, 
         dbo.Book.Phone_work, 
         dbo.Book.Phone_mob, 
         dbo.Book.Phone_home, 
         dbo.Book.Email, 
         dbo.Book.Birthday, 
         dbo.Book.Address, 
         dbo.Book.User_ID, 
         dbo.Book.PersonType_ID 
         FROM dbo.Book 
         INNER JOIN dbo.PeopleGroup ON dbo.Book.PersonType_ID = dbo.PeopleGroup.PersonType_ID
         ORDER BY dbo.Book.Surname", myConn);
 DA.Fill(people);
}
// в таблицу people будут загружены данные из бд

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

Ответ #2 @Павел 28.11.2011 23:22
Спасибо за ответ и код. Но по-прежнему на стою на месте.
Что-то я нифига не пойму:
Ридер все прочитал (см.картинку), но не может занести в таблицу -
пишет АргументЭксепшн:Длина входного массива больше числа столбцов в этой таблице.
такое впечатление, что DataTable people работает в режиме ReadOnly!!!

Пробовал вариант с Дата Адаптером - там все тупо пролетает и выдает пустую таблицу.

Зашел в тупик. Подскажите, пж, с какой стороны хоть начинать распутывать...

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

Ответ #3 @Алексей Немиро 28.11.2011 23:59
В случае с заполнением таблицы из ридера, только сейчас заметил, что во всех приведенных здесь фрагментов кода в таблице (people) нет колонок. Нужно добавить колонки в коллекцию Columns. Примерно так:
people.Columns.Add("имя колонки");

По адаптеру, где именно видно, что в таблице нет данных? Если Sql-запрос что-то вернул, то данные должны быть в DataTable.

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

Добавить свой ответ в эту тему
Привет всем. Передо мной стала задачи написать целый программный комплекс для тестирования знаний в школах (вузах).
- Программа должна быть типа клиент-сервер (на одном компе сервер, на остальных в кабинете клиентские программы),
- основной ОС будет XP
- не плохо бы сделать и клиента для linux
в системном программировании я сильно отстал (2 года занимался web программированием и вёрсткой),
поэтому не в курсе на чём в наше время модно и удобно писать такие программы.
Предполагаю юзать MS VS 2010, С языком не определился но хотел бы на VB (c С++ впринцепе разобраться проблемой не является)
смущает меня то, что на каждый комп нужно будет ставить .NET Framework...
общем прошу посоветовать мне какие средства использовать для разработки и можно ли как то обойтись без .NET Framework

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

Ответ #1 @Aleksey Nemiro 28.11.2011 15:06
Если сервер будет нормальным сервером (не XP), с учетом "2 года занимался web программированием и вёрсткой", оптимальней всего писать для веб Клиентам ничего не придется дополнительного ставить, разве что ярлык на рабочий стол, для быстрого подключения к серверу. И в перспективе можно будет вынести систему в Интернет.
можно ли как то обойтись без .NET Framework
.NET Framework сейчас по-моему у всех должен стоять, его все кому не лень используют. Например, производители железа.
Еще нынче есть так называемый клиентский профиль:
.NET Framework (клиентский профиль) — это подмножество компонентов.NET Framework, предназначенное для клиентских приложений. Оно содержит оптимизированный набор функций Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) и ClickOnce. Это позволяет быстро разрабатывать решения на базе WPF, Windows Forms, WCF и консольных приложений, ориентированные на .NET Framework (клиентский профиль).
.NET Framework (клиентский профиль) поддерживает установку с помощью стандартного загрузчика, которую можно использовать для клиентских приложений. Это позволяет гарантировать, что установлены все компоненты, необходимые для запуска приложения, независимо от наличия платформы .NET Framework или ее версии. При такой процедуре установки используется единый пользовательский интерфейс как для Windows XP, так и для Windows Vista, а сама установка при этом не вызывает трудностей.

На .NET, особенно в VB, реализация будет проще, чем на Си :)

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

Ответ #2 @it-master 29.11.2011 01:19
Спасибо:)
впервые услышал про клиентский профиль, это хорошая идея...
для веба писать было бы не плохо, но не получится, там принцепиальный вопрос:)

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

Ответ #3 @Pavel_61981 30.11.2011 09:52
It-master,
не знаю к счатью это или к горю, но я как раз таки сейчас разрабатываю этот комплекс...
Использую WCF и пишу его как раз на VB.NET
Вот только не люблю я разрабатывать ПО с кем-то... как говорится: "хочешь сделать хорошо - сделай сам" :)
Но в принципе могу поделиться опытом... подводных камней много с WCF...

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

Добавить свой ответ в эту тему
Доброго всем времени суток! Подскажите, пожалуйста, как правильно разделить строки (при сложившейся ситуации в ниже приведённом коде) на массивы строк ?
В коде использованы примеры, любезно предоставленными Алексеем Немиро.
Текстовое поле под именем txt_таблица_данных содержит строки, сформированные вводом текста в трёх тестовых полях.Для возможного удобства имена русифицированы.

 Private Sub ReadAllData() 'чтение из файла, сохраняющего значения трёх тексовых полей
  If Not File.Exists("data.txt") Then Return 'файл не существует, читать нечего
  Using FS As New FileStream("data.txt", FileMode.Open, FileAccess.Read, FileShare.Inheritable)
   Using SR As New StreamReader(FS, System.Text.Encoding.UTF8)
    txt_таблица_данных.Text = SR.ReadToEnd()
   End Using
  End Using
  Label5.Text = txt_таблица_данных.Text.Split(vbCrLf).Length - 1
 End Sub
 
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ReadAllData()
  Label7.Text = "Сегодня среди Ваших друзей нет именинников"
  Label7.AutoSize = True
  Label7.BackColor = Color.Transparent
  Label7.ForeColor = Color.FromArgb(255, 0, 0)
  'Label6.Text = "Сегодня" & " " & Now.DayOfYear & " " & "день года"
  'Label6.ForeColor = Color.FromArgb(50, 110, 10, 110)
  Dim S As String = txt_таблица_данных.Text 'переменная для массива строк в текстовом поле
  Dim strArray() As String = S.Split(New String() {vbTab}, StringSplitOptions.None) 'разделил строку на 3 соствных части,т.е. дату,имя,город
  'Dim result As New StringBuilder 'часть кода для другой цели
  'S = String.Format("{0}{3}{1}{3}{2}", дата, имя, город, vbTab) ' пример сформированной строки
  дата() = strArray(0)
  имя() = strArray(1)
  город() = strArray(2)
  Dim counter As Integer '= 1
  Dim n As Integer = strArray.Length - 1
  For counter = 0 To n
   If дата(counter) = Picker.Text Then 'участок кода, не позволяющий вывести имя 
    Label7.Text = "Сегодня свой День Рождения справляет" & " " & имя(counter) & "!"
   End If
  Next counter
 End Sub

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

Всем доброго времени суток.Есть таблица Accounting из базы данных access Library.База данных подключена через OleDB 4.0 и созранена в DataTable.В таблице столбцы:[Код выдачи], [Фамилия читателя], [Книга],[ Автор], [Дата выдачи], [Срок возврата].Мне необходимо составить запрос на должников-т.е. если,по отношению к сегодняшней дате разница между [Дата выдачи] и [Срок возврата] больше 7 дней,то вывести в запросе [Код выдачи], [Фамилия читателя], [Книга],[ Автор], [Дата выдачи], [Срок возврата] в DataGridView.Есть тип DataTime,но я не знаю как с ним работать и как прописать это на языке запросов.в Access формат даты такой:(dd,MM,yyyy).Помогите,плиз или посоветуйте литературу,где это подробно описывается.

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

Ответ #1 @Aleksey Nemiro 27.11.2011 21:19
Можно использовать функцию DateDiff:
SELECT * FROM таблица WHERE DateDiff('y',  [Дата выдачи], [Срок возврата]) > 7
(порядок расположения полей может быть обратным, нужно смотреть по потребностям)

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

Ответ #2 @GreatTalker 28.11.2011 18:24
Алексей,а почему указано 'y',ведь должно быть указано 'dd'?

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

Ответ #3 @GreatTalker 28.11.2011 18:32
SELECT        [Код выдачи], [Фамилия читателя], Книга, Автор, [Дата выдачи],
[Срок возврата]
FROM            Accouting
WHERE        (DateDiff('y', [Дата выдачи], [Срок возврата]) > 7)
с таким кодом не получается сохранить запрос...выходит окно:

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

Ответ #4 @Aleksey Nemiro 28.11.2011 18:48
GreatTalker:
Алексей,а почему указано 'y',ведь должно быть указано 'dd'?
В Access функция DateDiff работает как в Visual Basic 6.0:
Параметр Interval может принимать одно из следующих значений:
Yyyy - год;
Q - квартал;
M - месяц;
Y - день в году;
D - число месяца;
W - день недели;
Ww - неделя;
H - час;
N - минута;
S - секунда;
GreatTalker:
с таким кодом не получается сохранить запрос...выходит окно:
Сложно сказать в чем ошибка, но DateDiff тут наверняка не причем
Возможно что-то где-то осталось открыто и не дает изменить запрос. Можно попробовать создать новый запрос..

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

Добавить свой ответ в эту тему

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

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

Имитация кнопки

Windows Presentation Foundation (WPF): Элементы управления Windows @Shark1 28.11.2011 01:12
Пример имитации кнопки в WPF на Visual Basic .NET.

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

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

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

Вакансии в IT

Программист

Россия, Москва | Работа в офисе | 70 000.00 RUB

Программист Delphi

Россия, Москва | Работа в офисе | 49 000.00 RUB

Программист -тестировщик

Россия, Москва | Работа в офисе

Программист C/C++, Java

Россия, Москва | Работа в офисе | 70 000.00 RUB

Программист

Россия, Москва | Работа в офисе | 43 000.00 RUB

Системный архитектор/разработчик Microsoft

Россия, Москва | Удаленная работа | 80 000.00 RUB

Инженер-программист NET, разработчик С#

Россия, Москва | Работа в офисе | 70 000.00 RUB

Программист C++

Россия, Москва | Удаленная работа | 80 000.00 RUB

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

Россия, Москва | Удаленная работа | 75 000.00 RUB

Web-дизайнер

Россия, Москва | Работа в офисе | 45 000.00 RUB

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

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

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

На мобильные карты Google нанесли планы зданий

В программе Google Maps для Android появилась функция "планы зданий". Глядя на план, пользователь сможет найти нужный магазин в торговом центре или терминал в аэропорту. Пока на карты нанесены только планы зданий в США и Японии, но в будущем Google собирается расширить базу.

01.12.2011 12:11 · Категория: Бизнес в IT · Источник: Lenta.ru

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

Во французской IT-компании запретили пользоваться электронной почтой

Крупная французская IT-компания Atos запретит своим сотрудникам общаться по электронной почте. Вместо этого персоналу предпишут использовать мессенджеры. Глава Atos Тьерри Бретон считает, что переписка по электронной почте отнимает у персонала слишком много рабочего времени.

30.11.2011 11:31 · Категория: Бизнес в IT · Источник: Lenta.ru

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

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

Компания IceWarp сообщила об обнаружении уязвимости во второй версии API интернет-сервиса Google Translate, которая позволяет потенциальному атакующему получить из клиентского приложения закрытые данные о пользователях. В IceWarp говорят, что обнаружили уязвимость, когда тестировали собственный продукт LiveWebAssist для обмена сообщениями. Этот продукт использует для перевода текстов движок Google Translate.

"Система перевода Google Translate - это выдающийся продукт и мы были действительно удивлены, обнаружив в ней уязвимость, которая сравнительно легко позволяет перехватывать пользовательские данные", - говорит Ладислав Гоч, президент IceWarp. 

По его словам, для перехвата сообщений необходимо создать специальный файл JavaScript, который будет тем или иным образом запущен на компьютере-жертве. Более того в документации по Google Translate API содержится практически законченный пример атаки:

var source =
'https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&source=en&target=de&callback=translateText&q=' + sourceText;
newScript.src = source;


Notice variable: key=INSERT-YOUR-KEY

"Если кто-либо откроет веб-сайт, применяющий Google Translate API v2, и посмотрит ключ Key, то при помощи этого же уникального ключа хакер на своем компьютере сможет посмотреть какой именно текст переводит конкретный пользователь", - говорит Гоч.

В IceWarp говорят, что в своих продуктах такую систему работы они уже устранили и теперь ожидают того же от Google.

30.11.2011 11:30 · Категория: Безопасность · Источник: 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 если иное не указано отдельно.


В избранное