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

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


Выпуск # 653

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


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

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

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

Форумы Kbyte.Ru

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

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

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

Дана строка: http://kbyte.ru?x3d%3cscript%3eAlert(%271%27)%3b%3c%2fscript%3e&key1=1&key2=2
Нужно вернуть строку: http://kbyte.ru?key1=1&key2=2, удалив строку, содержащую CSS – атаку. Как это сделать?
У меня есть некий код:
 
 public void GetParamsCheckForCSS(HttpRequest Request) 
        { 
            string OriginalPath = Request.Path.ToLower(); 
            string PathInfo = Request.PathInfo.ToLower(); 
            NameValueCollection Query_Collection = Request.QueryString; 
            List<string> ParamList = new List<string>(); 
            if (Query_Collection.Count > 0) 
            { 
                string[] QueryKeys = Query_Collection.AllKeys; 
                foreach (string k in QueryKeys) 
                { 
                    ParamList.Add((string)Query_Collection[k]); 
                } 
                int BadParamIndex = 0; 
                Regex SearchScript = new Regex("[^<script>].*[$</script>]", 
                RegexOptions.IgnoreCase 
                | RegexOptions.CultureInvariant 
                | RegexOptions.IgnorePatternWhitespace 
                ); 
                foreach (string p in ParamList) 
                { 
                    string c = HttpUtility.UrlDecode(p); 
                    if (SearchScript.Matches(c).Count > 0) 
                    { 
                        ParamList.Remove(p); 
                    } 
                    BadParamIndex++; 
                } 
                 HttpContext.Current.RewritePath(OriginalPath, PathInfo, "x="); 
            } 
             
        } 
который пока не работает так, как мне нужно. Что в нём не так?

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

Помогите,кто может! Изучаю тему связи между базой данных Access и приложением, в последнем из которых есть Label с текущей датой и Label_имя, где должно выводиться Имя, внесённое в" База.accdb" с датой,которая и будет являться значением для вывода Имени в Label_имя. Прочитал много литературы, но по данной теме ничего исчерпывающего не нашёл.

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

Ответ #1 @Aleksey Nemiro 11.08.2011 20:22
Строка соединения с БД будет примерно такой:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Полный физический путь к файлу БД;Persist Security Info=False;

Программно подсоединиться к базе можно примерно так:
Dim myConn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\База.accdb;Persist Security Info=False;") 
Try 
 myConn.Open() 
 'соединение открыто, теперь можно работать с базой 
 'например, можно получить список записей в виде таблицы: 
 Dim myTable As New DataTable() 
 Dim DA As New OleDbDataAdapter("SELECT * FROM имя_таблицы", myConn) 
 DA.Fill(myTable) 
 For Each myRow As DataRow in myTable.Rows 
  MsgBox(myRow(0))'myRow("имя поля таблицы") 
 Next 
 'или получить значение определенного поля таблицы 
 Dim myCmd As New OleDbCommand("SELECT TOP 1 имя_поля FROM имя_таблицы WHERE условия выбора данных", myConn) 
 MsgBox(myCmd.ExecuteScalar()) 
 'или удалить строку данных 
 myCmd = New OleDbCommand("DELETE FROM имя_таблицы WHERE условия удаления данных", myConn) 
 myCmd.ExecuteNonQuery() 
 'и т.д. и т.п. 
Catch ex As Exception 
 'ошибка 
 MsgBox(ex.Message) 
Finally 
 If myConn.State = ConnectionState.Open Then myConn.Close() ' Закрываем соединение 
End Try

PS: С развертыванием приложения использующего Microsoft Access 2007 могут возникнуть проблемы, драйвера скорей всего придется с собой таскать и изобретать заплатки для 64-битных систем. Классический Access в этом плане лучше.
С классическим, строка соединения будет такой:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Полный физический путь к файлу БД;

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

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

 
User-agent: *  
Disallow: / # 
в корне сайта.
Насколько правильно такое решение?

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

Ответ #1 @Игорь Голов 10.08.2011 03:09
Опытным путём выяснено - такое решение в корне верно.

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

Ответ #2 @Aleksey Nemiro 10.08.2011 11:15
Опытным путём выяснено - такое решение в корне верно.
Не факт. Если поисковые боты где-нибудь найдут ссылки на сайт, то они все равно могут его проиндексировать, даже если не контент, то сами ссылки точно (Google так делает).
Надежней всего, в дополнение к robots.txt, возвращать HTTP-код ошибки, например 403:
Response.StatusCode = 403;

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

Ответ #3 @Игорь Голов 10.08.2011 12:31
Кому возвращать и как?

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

Ответ #4 @Aleksey Nemiro 10.08.2011 12:41
Возвращать в ответе :)

При успешном выполнении запроса, сервер возвращает HTTP-код 200.
Если поисковый бот видит, что сервер выдает 200 код, то индексирует ссылку и страницу (это разные вещи).

HTTP-код ответа сервера можно изменить программно, передав его в свойство StatusCode объекта Response.
403 HTTP-код - это доступ запрещен, получив такой ответ от сервера, поисковые боты не будут индексировать содержимое, а браузер будет выводить сайт как обычно и пользователь в браузере ничего не заметит.

Глобально, StatusCode наверное можно куда-нибудь в Global.asax запихнуть. Например в обработчик события Application_AcquireRequestState, добавить строку:
Response.StatusCode = 403;

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

Добавить свой ответ в эту тему
Есть ServerControl. В нём необходимо перехватывать содержимое полей форм.
Как это сделать?
После отправки формы есть следующие скрытые поля:

 
__EVENTTARGET= 
__EVENTARGUMENT= 
__VIEWSTATE=/wEPDwUKMjA0NDMyNTA4NWRkVCXAc9oFTUf+tgHii+c3vob/veJLbpLDWuyFoGFymHg= 
__PREVIOUSPAGE=Q7Z0UNmHF0zLIFNh1lV466ItVGsPRzGJhur-a_2tjAEYQy5FLjVGUbEQ6uqYfNc_Cn8TzVbicifTaUNjq8pMQUdfcbf3UljvZyqL9VcG-yY1 
__EVENTVALIDATION=/wEWAwK057W8DQLR49OXDQLT8MqYCKQnvDTuU3TpiwiD0O3iF6rVyYESDYM9AO9VSFAx5HjQ 
ctl00$MainContent$TextBox1=12 
ctl00$MainContent$Button1=Button 

Из этого великолепия мне необходимо значение TextBox.

Первое пришедшее на ум решение:
 
_request = Parent.Page.Request; 
 if (_request.Form.Count > 0) 
 { 
 form_Collection = _request.Form; 
 Keys = form_Collection.AllKeys; 
 foreach (string k in form_Collection) 
 { 
 if (k.IndexOf("TextBox") > -1) 
 { 
 Parent.Page.Response.Write(String.Format("{0}={1}<br/>", k, form_Collection[k])); 
 } 
 } 
 
 } 
Переменные объявлены раннее.
Спасибо

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

Ответ #1 @Aleksey Nemiro 09.08.2011 19:50
Можно сделать в своем ServerControl свойства и передавать туда нужные данные со страницы.
//
свойство в контроле 
private string _TextFromPage = ""; 
public string TextFromPage 
{ 
  get { return _TextFromPage; } 
  set { _TextFromPage = value; }    
}
Через свойства вполне можно передавать ссылки на элементы управления страницы.

Либо можно найти контрол на странице, это немного сложнее, чем со свойствами. Все будет зависеть от того, где именно расположен элемент на странице, как искомый, так и текущий. Найти нужный элемент можно через функцию FindControl, например this.FindControl("TextBox1"), или Parent.FindControl("TextBox1"), или Parent.Page.FindControl("TextBox1") и т.п.

Через Request.Form в принципе тоже можно, но это криво, т.к. ASP .NET генерирует свои идентификаторы элементам. Кстати, в ASP .NET 4.0 клиентскими идентификаторами можно управлять:
<asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Static" />
Тогда обращаться можно так
Reques.Form["TextBox1"]
Parent.Page.Request
универсальней через HttpContext.Current
HttpContext.Current.Request... 
HttpContext.Current.Response... 
HttpContext.Current.Server...

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

Ответ #2 @Игорь Голов 09.08.2011 19:56
Тут есть пунктик маленький. Небольшой такой - под этот контрол ничего менять не надо. Он должен кинуться на страницу и добросовестно отработать с минимумом изменений в коде самой страницы

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

Ответ #3 @Aleksey Nemiro 09.08.2011 20:09
Если заранее не известно, сколько текстовых полей на странице, то можно рекурсивно перебрать все контролы формы, примерно так:
protected
void Page_Load(object sender, EventArgs e) 
{ 
  List<TextBox> result = new List<TextBox>(); 
  GetAllTextBox(this.Page.Form.Controls, ref result); 
  foreach (TextBox t in result) 
  { 
    Response.Write(String.Format("{0}={1}<br />", t.ID, t.Text)); 
  } 
} 
private void GetAllTextBox(ControlCollection cc, ref List<TextBox> result) 
{ 
  foreach (Control c in cc) 
  { 
    if (c.GetType() == typeof(TextBox)) 
    { 
      result.Add((TextBox)c); 
    } 
    else 
    { 
      GetAllTextBox(c.Controls, ref result); 
    } 
  } 
}

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

Добавить свой ответ в эту тему
Я хочу купить двухядерный компьютер с процессором Intel Core I5 с частотой 3 ГГц вместо моего одноядерного компьютера с частотой 2 ГГц в надежде на то, что это позволит примерно на порядок увеличить производительность компьютера, т.к. сейчас мой компьютер решает мою задачу в программе Solsys7 целую неделю, а мне надо ее решать десятки раз (в лучшем случае) или сотни раз (в худшем случае). Конечно же, основной упор я делаю на наличие двух ядер, хотя и повышенная частота шины и памяти 1333 Мгц и повышенная оперативная память 2*4ГГб и наличие повышенной памяти кэша (даже трех уровней), тоже значительно повысят производительность компьютера.

Так вот вопрос состоит в том – можно ли в программе написанной на Visual Basic 6 запустить два потока (две нити) используя функцию API CreateThread для второго ядра. Исходя из документации Visual Basic 6 это возможно, но все мои попытки и отзывы других пользователей убеждают меня в том, что это только теоретическая возможность, а реально работает только один поток. Насколько я понимаю, это связано с тем, что виртуальная машина, т.е. библиотека msvbvm60.dll может работать только с одним потоком, хотя есть возможность установить семафор обращения к ней с помощью функции API CreateSemaphore, но это опять таки только в теории. По этому, я уточняя свой вопрос – можно ли реально в программе написанной на Visual Basic 6 запустить два потока (второй для другого процессора), если второй поток не обращается к библиотеке msvbvm60.dll, например, обращается к приложению Excell или к библиотеке DLL, написанной на другом языке, например, Free Basic. Можно, конечно же, без особых проблем применить технологию OpenMP, но ее поддерживает только VB.NET, а мне бы не хотелось 21 форму программы Solsys7 переделывать под NET (да и не нравится мне этот NET, т.к. в версии NET это уже не Visual Basic 6, а такой же язык, как и все остальные C++, Pascal и т.д.).

С наилучшими пожеланиями Сергей Юдин.

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

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

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

Многопоточность в Visual Basic 6.0

Visual Basic 5.0/6.0: Система @Неизвестно 11.08.2011 19:59
Пример реализации многопоточного приложения на Visual Basic 6.0.

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

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

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

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

Citrix покупает компанию RingCube

Производитель программного обеспечения для виртуализации Citrix Systems сообщил о покупке разработчика программного обеспечения RingCube, выпускающего решения для персонализации десктопов внутри VDI (virtual desktop infrastructures). Финансовые детали сделки не разглашаются. В совместном заявлении сторон говорится, что программное обеспечение RingCube позволит корпоративным клиентам решений Citrix облегчить предоставление персонализированных виртуальных клиентских рабочих столов работникам разных подразделений организаций.

В Citrix намерены интегрировать технологии RingCube в собственное VDI-решение XenDesktop.

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

11.08.2011 11:43 · Категория: Бизнес в IT · Источник: CyberSecurity.ru

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

Китайские инженеры разработали роботизированный автомобиль HQ3

Исследовательская группа из Национального университета оборонных технологий в КНР накануне представила прототип автономного автомобиля собственной разработки, который в будущем имеет шансы на коммерциализацию. Новинка была создана при поддержке компании China First Auto Works.

Как говорят разработчики, новый седан Hongqi HQ3 оборудован современными камерами, сенсорами и компьютером, позволяющим автомобилю самостоятельно заводиться и останавливать двигатель, перемещаться в потоке движения и уходить от столкновений без помощи водителя. Авторы технологии говорят, что ранее они провели испытания HQ3, когда автомобиль совершил полностью самостоятельную поездку из города в провинции Хубей в город в провинции Хунань. Расстояние между городами составило около 220 км. 

Роботизированный автомобиль HQ3 не использует спутниковую технологию GPS для определения местоположения машины. Вместо этого он полагается на собственные камеры и сенсоры, наблюдающие за дорожным движением, лимитами на скорость и перестроениями из ряда в ряд. Исследователи говорят, что скорость принятия решений о маневрах на дороге у робо-автомобиля почти в 12,5 раз быстрее, чем у водителя - 40 миллисекунд против 500 миллисекунд у человека.

Разработчики говорят, что за счет более высокой скорости принятия решения HQ3 должен быть безопаснее. Хотя, это в теории. На практике водители могут принимать многоходовые решения по маневрированию на дороге, тогда как компьютер HQ3 пока не способен выстраивать многоходовые дорожные комбинации. Ввиду этого, инженеры ограничили максимальную скорость движения автомобилем 100 км/час. При такой максимальной скорости, как показали испытания, все 67 сенсоров, расположенных на корпусе машины оптимальным образом оценивают ситуацию и передают ее в компьютер.

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

Напомним, что собственные разработки в области робо-автомобилей сейчас ведут многие компании и университеты по всему миру. Так, Google ранее презентовала автономную модель легковушки Prius, а инженеры из Стенфордского университета создали роботизированную версию Audi TT. Обе последних новинки полагаются на систему навигации GPS.

10.08.2011 11:26 · Категория: Железо · Источник: CyberSecurity.ru

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

Apple добилась запрета на продажу Samsung Galaxy Tab 10.1 в Европе

Земельный суд в Дюссельдорфе наложил временный запрет на продажу планшета Samsung Galaxy Tab 10.1 на территории Евросоюза за исключением Нидерландов. Такое решение было принято по иску компании Apple, которая обвиняет южнокорейскую компанию в копировании планшета iPad 2.

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


В избранное