• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Lotus Analyzer V1.6

O

Omh

Вернулся из отпуска.
Смотрю v.1.2 - у меня уже почти нет ошибок в базе :)

Вот ещё один случай, который обрабатывается некорректно:

Код:
Dim Total As Long
Total = Ubound(NoteIDs)
Dim PrgPrinter As New clsProgressPrinter("SOME_TEXT", Total)
clsProgressPrinter - самописный класс.

Анализатор говорит:
Код:
contains unnecessary variables: total
----------------------
Ещё вариант:
Код:
Dim MsgList List As String
Dim Msg As String

forall x in...
Msg = SOME_GENERATED_INFO
MsgList(Msg) = "-"
end forall

Говорит Msg - лишняя, хотя юзается как tag для list'a
------------------------
Ещё косячок:
Код:
Dim Message As String
Message = SOME_GENERATED_INFO
Messagebox Message, 0 + 16, "Error"
Переменная мессыджбосится, а анализатор говорит
Код:
ErrHandler - contains unnecessary variables: message
Врёд!
----------------------
На предидущей странице уже указывал
Код:
Dim session As New NotesSession
Dim SignByUser As String
SignByUser = "Active user's ID (" + session.CommonUserName + ")"
Говорит session - лишняя.
Всё осталось так же.
----------------------
В остальном всё лучше.
Поиск невидимых хотспотов точно лучше стал.
А то раньше многова-то фейковых результов выдавал.
 
O

Omh

ToxaRat
Ещё такое предложение:
мне кажется косяки надо разделить на 2 группы: ошибки и предупреждения.
Потому что двойная пустая линия или пустой код по большому счёту всё-таки не ошибка, а предупреждение, а вот лишние переменные больше ошибка, чем предупреждение.
Или не very идея?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
мне кажется косяки надо разделить на 2 группы: ошибки и предупреждения.
Потому что двойная пустая линия или пустой код по большому счёту всё-таки не ошибка, а предупреждение, а вот лишние переменные больше ошибка, чем предупреждение.
Или не very идея?
не вери :)
это всё ошибки
наверно сильно сказалась одна из моих работ, где было взято за правило - если есть альтернативный код выполняющийся хотя бы на секунду быстрее то значит весь этот код ОШИБКА
звучит может и жестковато, то это научило очень многому и в последствии лишь подтверждалось.

"Пустой код" это вообще интересное зрелище, даже возьмем теже события в форме на QueryOpen и прочих, казалось бы, вы всё там удалили(не через Ctrl+A а построчно) что приводит к наличию там кода о чем явно говорит DXML а это в свою очеред ведет к увеличению размера формы, сетевого трафика, кешу, памяти.
один смешной килобайт при 1000 пользователей превращается уже в мегабайт и уже не так смешно(я не говорю о том, что код "выполняется" и даже дебаггер туда залетает...)
Всё это ведет к "тормознутости", которую на самом деле легко избежать(буквально пару секунд работы), и тогда возникает вопрос "зачем мы создаем эту тормознутость"?

Всё это я к тому, что всё, что находит анализатор это грубейшая ошибка, ведущая к "тормознутости"

Сейчас у вас есть возможность всё это легко найти и исправить, так за дело! ;)
 
O

Omh

Тогда ещё ошибку прибавить можно: поиск оставленных Stop'ов.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
поиск оставленных Stop'ов
вот это уже разговор по делу :)

Список у меня большой, что еще нужно сделать, но буду рад если вам удастся его дополнить

Самая жирная вещь о которой я сейчас думаю это компилинг+декомпилинг кода, разбивание его на блоки, и сравнение этих блоков с существующей эталонной базой блоков - своего рода как игра в шахматы, когда рассматривая блоки декомпилингового кода я пытаюсь найти комбинацию более лучшего/шустрого кода-хода и тем самым признавая данный код не оптимизированным, сложность не в наполнении базы "правильными" блоками - этого добра у меня море.
Сложность как обьяснить потом, что данный блок кода я признал не самым лучшим вариантом а что есть решении получше, тут то я не смогу выдать какая именно ошибка и в какой строке, ведь я оперирую декомпилированным кодом и проверяю к примеру что "слишком уж часто он стек насилует"
в общем надеюсь что это будет как можно позже сделано, когда "мысль" структурируется ;)
 
O

Omh

Пока мысли структурируются можно было бы сделать ещё такую штуку:
либо зашитый, либо кастомайзбл в виде документов список "кричащих косяков": GetNthDocument/GetNthEntry и в таком духе.

У нас самих такая тулза есть, которая ищет откровенные косяки в коде:
косяки дефайнятся в виде документов (язык - формула/скрипт/javascript, паттерн косяка - *GetNthDocument*) и потом анализируется DXL на соответствие косячным паттернам.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
в догонку
есть моменты когда парсер возвращает ошибку Err=4602, Error=DOM parser operation failed
связано это с тем что элемент дизайна невозможно экпортнуть
яркий пример:
агент содержащий в себе лотусиный код НО условия отбора у него на simple search в этой ситуации я пасс

или не обращайте внимание на это
или избавляйтесь от simple search
 
A

abbatik

1. Там, где стоит Option Explicit, ругается, что нет Option declare.
2.
17:43:15 - agent: (ImportReceivedDXL)...
agent: (ImportReceivedDXL): initialize - contains unnecessary variables: importednoteids

В коде:

Dim importedNoteIDs() As String
...
Redim Preserve importedNoteIDs(0 To i)
importedNoteIDs(i)=importedNoteID
...
cdoc.ReplaceItemValue "NoteIDs", importedNoteIDs

3. GetNotesNamevar - contains unnecessary variables: firstuser

Dim OldProxy As Variant, FirstUser As String
...
Let NotesName = Evaluate ({@Trim (@Right (Properties ; "[NTSN]"))} , StaffDoc)
Let FirstUser = NotesName(0)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
abbatik
Там, где стоит Option Explicit, ругается, что нет Option declare
решил, что должно быть всё в едином стиле, хоть Option Explicit и является синонимом, но писать придется Option declare

3. GetNotesNamevar - contains unnecessary variables: firstuser

Dim OldProxy As Variant, FirstUser As String
...
Let NotesName = Evaluate ({@Trim (@Right (Properties ; "[NTSN]"))} , StaffDoc)
Let FirstUser = NotesName(0)
всё верно, в данном коде вы firstuser не используете, вы лишь присваеваете в него, а обратно данные из него не достаете, значит переменная лишняя

agent: (ImportReceivedDXL): initialize - contains unnecessary variables: importednoteids

В коде:

Dim importedNoteIDs() As String
...
Redim Preserve importedNoteIDs(0 To i)
importedNoteIDs(i)=importedNoteID
...
cdoc.ReplaceItemValue "NoteIDs", importedNoteIDs
с этим разберусь...
хотя уже подозреваю что из-за конструкции
cdoc.ReplaceItemValue "NoteIDs", importedNoteIDs
её правильнее использовать
call cdoc.ReplaceItemValue("NoteIDs", importedNoteIDs)
ошибка тогда сразу пропадет
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Omh
готовлюсь к 15 сентября, приглашаю, поэтому временно забросил разработку :)
на диске с демоверсией будет так же и утилитка идти
да, думаю 1.3 будет еще публичной
 
O

Omh

Ну мне до Украины пилить далекова-то :)
Подожду 1.3, если оставшиеся косяки будут исправлены, буду счастлив, если не - привыкну.
Но использовать буду энивей, хорошая вещь.
 
N

nvyush

1) Ругается, что doc - лишний (contains unnecessary variables: doc)
<!--shcode--><pre><code class='LotusScript'>Dim doc As New NotesDocument(db)
Dim RTItem As New NotesRichTextItem(doc, "Body")
RTItem.AppendText "Some text"[/CODE]
2) В представлении ругается, что обработчик события OnSelect - лишний (unnecessary sub/fun: onselect)
3) Ругается: contains an of the same name variable: status
<!--shcode--><pre><code class='LotusScript'>Public Class NotesMessageQueue
...
Public Property Get Message As String
Dim status As Integer
...
End Property

Sub New(MQName As String, AutoClose As Integer)
Dim status As Integer
...
End Sub
...
End Class[/CODE]
 
H

hosm

Возникли пару вопросов по работе утилиты v1.2.
1) при анализе кода пишет "contains unnecessary variables: dtype". Это правильно?
<!--shcode--><pre><code class='vb'>Dim dType(0 To 1) As Variant
dType(0) = "0"
dType(1) = "Sort"
With tmpDoc
.ReplaceItemValue "Dialog", dType
End With[/CODE]
Можно, конечно, заменить dType на конструкцию типа Split("0:Sort", ":").

2) А вот тут не пойму, почему для поля попали в лишние события: unnecessary sub/fun: onblur, onfocus
Если еще к onblur можно придраться:
<!--shcode--><pre><code class='LotusScript'>Sub Onblur(Source As Field)
'
End Sub[/CODE]
(но здесь она нужна - event потом связывается), то в onfocus вполне приличный код.
Можно привести критерии того, что считается unnecessary sub/fun?

В качестве предложений для обработки анализатором:
1) использование UI классов в коде шедульных агентов.
2) наличие Lotusscript кода в элементах дизайна, предназначенных только для веба.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
отписываюсь
версия 1.3 практически закончена - слишком много работы, чтобы её доделать, поэтому кусочками дописываю
в этой версии уже можно отправить анализ на шедулинг и получить по почте, но злоупотребления приводят к "замораживанию" сервера, причем иногда даже на вечно, пример: отправляю на анализ сразу всю папку с базами порядка 30 баз, письмо получил, ошибки вижу, но сервер уже не отзыватеся...пока не могу решить эту траблу, подозреваю, что проблема в DXML сервера 8.5.1 на других может лучше...

Все ваши найденные "косяки" анализирую и исправляюсь :)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
апачки :rolleyes:
Версия 1.3 - 15.12.2009
- исправлен поиск неиспользованных переменных
- исправлен алгоритм поиска неиспользованные функций
- добавлена возможность анализировать сервером
- добавлена возможность сохранять результаты анализа сервера
- анализ сервера сохраняется в базе и отсылается указанным лицам
- серверный анализ сделан через РТтекст и более красив
- добавлена проверка на команду Stop в LS, в которой нет необходимости в нормальном коде
- добавлена проверка на правильное использование Doc items - например: (Doc.Var1 = "1") не правильно, правильно только (Doc.ReplaceItemValue("Var1", "1")) - аналогично с (a1 = Doc.Var1(0)) или ошибочное использование свойств например: (if Doc.IsResponCe then)
- добавлена возможность выбирать анализируемые элементы: All, library, agent, form, view
 
O

Omh

Смотрю
Сначала недопетрил, куда делся лог.
Мне кажется, по умолчанию анализ лучше делать на клиентской стороне, а не на серверной.

Это так, превое впечатление.
Сам анализ ещё не смотрел.

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

Ошибочных срабатываний стало меньше.

Вообщем, как и раньше - клёво.
Спасибо!

Посмотрю на досуге поподробнее.

Кстати, при анализе на сервере мне ничё не пришло, правда, я базу не подписывал.
Мне не нравиться, что она что-то шлёт наружу :)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Мне не нравиться, что она что-то шлёт наружу
забань серверным правилом :rolleyes:
но я бы не переживал, всего от версии 1.2 я получил порядка 2К писем, ничего особенного, просто статистика для меня

Мне кажется, по умолчанию анализ лучше делать на клиентской стороне, а не на серверной.
тут народ жаловался как раз в обратном, ко всему прочему сделал по умолчанию именно сервером так как там красивее и нагляднее :)

Кстати, при анализе на сервере мне ничё не пришло, правда, я базу не подписывал.
естественно, это же лотусиный агент, а правила для всех одинаковы

Добавлено: вложил новую версию и сюда так же (а не только линк)
 
O

Omh

<!--shcode--><pre><code class='vb'>Dim Message As String
Message = EDataFinalMsg + Chr(13) + Chr(13) + "Stack:" + Chr(13) + Implode(StackNames, Chr(13))
Print EDataFinalPrint + ": " + Implode(Reverse(StackNames), " -> ")
Messagebox Message, 0 + 16, "Error"[/CODE]ErrHandler - contains unnecessary variables: message :rolleyes:
--------------------------
И ещё одна ошибка не поправлена (я говорил на этой же странице наверху)
<!--shcode--><pre><code class='vb'>Dim Total As Long
Total = ListGetUbound(DatabasesToAdd) + 1
Dim ProgressBar As New clsProgressBar(NPB_TWOLINE, Total)[/CODE]clsProgressBar - самописный класс

Говорит contains unnecessary variables: total
----------------------------
Ещё из старенького
<!--shcode--><pre><code class='vb'>Dim session As New NotesSession
Dim SignByUser As String
SignByUser = "Sign by current user user's ID (" + session.CommonUserName + ")"[/CODE]
Матюгает: contains unnecessary variables: session
----------------------------
Новинка :)
<!--shcode--><pre><code class='vb'>Dim CurrentUserACLEntry As New NotesACLEntry(ACL, session.Username, ACLLEVEL_MANAGER)
Call ACL.Save[/CODE]
Аз южуал: contains unnecessary variables: currentuseraclentry
Хотя кагбэ одним своим объявлением она является задействованной.
-----------------------------
Думаю последний вброс:
<!--shcode--><pre><code class='vb'>Dim MsgList List As String
Dim Msg As String

Forall x In Scripts
ScriptUses = Split(x.ScriptUsesUnnecessary, SEP)
Msg = GetScriptInfo(x) + " (" + Implode(ScriptUses, ", ") + ")"
MsgList(Msg) = "-"
End Forall[/CODE]
Говорит Msg лишний, хотя юзаю как таг.
Кажись это тоже уже было
 
O

Omh

Там, где появилась возможность анализировать желаемые типы (All, Library, Agent, Form, View) логичнее было бы сделать через чекбокс, типа формы, агенты и view (только all надо будет куда-то вынести), а не через radiobutton.
А вообще можно было бы вынести сюда и actions/pages - ты всё равно NotesNoteCollection строишь, получается какое-то искуственное ограничение, кмк.

И не совсем по core - фунционалу, но:
1. Разброс шрифтов и их цветов просто ядовитейший.
2. Ширины поля, где указывается путь к анализируемой базе, как правило не хвататет.
3. Было бу неплохо иметь возможность копировать репорт в клипборд одним кликом (что-нить вроде uidoc.copy)
4. При случайном нажатии кнопки "view all reports" твой текущий репорт пропадает бесследно (это я про анализ на стороне клиента) :)

Пока всё.
Инфа - сто процентов :)

Плюс если в форме/view/page анализируем action - shared, можно было бы это показать (хотя бы в скобочках).
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!