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

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

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

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

Как скрыть код на Querymodechange для пользователей

  • Автор темы susinmn
  • Дата начала
S

susinmn

Вот такая ситуация.
Опытный пользователь включает Debug LotusScript
И меняет значение Continue на 1, т.е. на True, соответственно входит в редактирование, после отработки скрипта в Querymodechange

tmp1=Evaluate({@if(@IsMember("[Admin]";@UserRoles);"1";"0")})
If tmp1(0)="1" Then
Continue=True
Else
Continue=False
End If
 
O

Omh

1. Закрыть дизайн.
2. Перед отсылкой дизайна клиенту, стереть из документа формы все айтемы, содержащие некомпилированный скрипт
3. Подключив внешний файл, писать скрипт в нём (знаю, что так можно, но сам не пробовал)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
ммм.... не понятно для чего вообще раздавать такие прпава?
 
O

Omh

Эвалуэйт можно заменить на db.QueryAccessRoles
И вообще, закрыть по AUTHORS полям: то что есть - не защита.
 
S

susinmn

не, весь дизайн не желательно скрывать.
именно нужно скрыть скрипт данной sub.
можно/нет?

по поводу прав, нет времени перелопачивать всю бд
 
M

morpheus

susinmn
просто убрать пользователю галочку DeleteDocument
 
S

susinmn

спасибо, нашел
 
A

Akupaka

как по мне то самое оно:
Подключив внешний файл, писать скрипт в нём
делается так, в том месте куда надо пихнуть код пишеться %Include fileName, где fileName - путь к файлу, в котором есть код...
рекомендую использовать библиотеку, к торой будут такие вот скрытые процедуры
в библиотеке в Options прописать %include к файлу с процедурами,
в библиотеке можно даже сделать прокси процедуры для тех, что в файле, чтобы тому, кто использует библиотеку было видно как правиольно вызывать код.
еще можно в библиотеке сделать процедуру, в теле которой написать %include, тогда в этом файле может быть только код именно этой процедуры без ничего, т.е. написали код в библиотеке, отладили, потом вырезали, вставили в файл, в процедуре, вместо кода, написали %include файла, в который код всунули. но так тяжелее, каждую процедуру в своем файле хранить не удобно...
 
T

turumbay

Еще треба не забыть, что опытный пользователь может открыть документ из вида комбинацией клавиш ctrl+E.
И queryModeChange в этом случае вообще не отработает. Рекомендуеца добавить эту же проверку на postOpen.

Если задача сформулирована так: не дать пользователю перехватить дебагером queryModeChange, то тема полностью раскрыта Omh и Akupaka.

Если хочется иметь железную защиту - то поля authors. Если хочется поиграть в интерфейсные бантики - можно еще рассмотреть вариант с вычисляемым SaveOptions. Оно дебагером не ловица. Перейти в режим редактирования получится - а сохранится нет.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
не надо защищать кодом - то что можно запретить на уровне ACL
убрать юзера из полей Authors - и не смогет он ничего
притом - выше автора не давать никому (кроме админа БД) доступа к базе
и плевать на его возможности промотра кода :D
 
K

K-Fire

Вообще то библиотека не подойдет в данном случае. Т.к. это будет что-то вроде
Код:
Sub querymodechange(...)
continue = someFunction()
End sub
И пользователь-хакер перед выходом из querymodechange просто поменяет continue и все.
Так что скрытие кода только одного события (остальные открыты) - это весьма нетривиально, или просто нереально :D


И я кстати не понимаю вообще слов "Если хочется иметь железную защиту - то поля authors". Поля Authors/Readers нужно использовать всегда где есть разделение пользователей по ролям. Вообще всегда. Всякие заглушки это даже не от лени, т.к. с полями дизайн как правило чище и проще, а от неумения ими пользоваться.
 
T

turumbay

Вообще то библиотека не подойдет в данном случае. Т.к. это будет что-то вроде
Код:
Sub querymodechange(...)
continue = someFunction()
End sub
И пользователь-хакер перед выходом из querymodechange просто поменяет continue и все.
Так что скрытие кода только одного события (остальные открыты) - это весьма нетривиально, или просто нереально :D
Нетривиально, но реально. Решается перегрузкой события формы.

Код:
Public Class TDocController
Private t_uidoc As NotesUIDocument

Public Sub New( i_uidoc As NotesUIDocument )
Set t_uidoc = i_uidoc
On Event Querymodechange From t_uidoc Call QuerymodechangeUIDoc
End Sub

Private Sub QuerymodechangeUIDoc( source As NotesUIDocument , Continue )
Messagebox "Querymodechange catched"
End Sub

End Class
Код класса можно закрыть описанным коллегами методом. В событии queryModeChange формы достаточно положить пустой комментарий( ' )
Узкое место - момент инициализации объекта TDocController. Обычно вешается на queryOpen формы и точно также обходится отладчиком. Но тут пользователю надо догадаться что к чему....

И я кстати не понимаю вообще слов "Если хочется иметь железную защиту - то поля authors". Поля Authors/Readers нужно использовать всегда где есть разделение пользователей по ролям. Вообще всегда. Всякие заглушки это даже не от лени, т.к. с полями дизайн как правило чище и проще, а от неумения ими пользоваться.
Абсолютно согласен. Поэтому и назвал одно - железным, а другое - бантиками.
 
30.05.2006
1 345
12
BIT
0
1. Закрыть дизайн.
2. Перед отсылкой дизайна клиенту, стереть из документа формы все айтемы, содержащие некомпилированный скрипт
3. Подключив внешний файл, писать скрипт в нём (знаю, что так можно, но сам не пробовал)
Что интересно, закрытие дизайна НЕ ПОМЕШАЕТ хакеру запустить дебагер. Кода в нём он действительно не увидит, но некоторые действа можно и "в слепую" провернуть
 
A

Akupaka

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

susinmn

Всем большое спасибо, но правка ACL не получится, т.к. база старая и там куча всякой ерунды уже имеется, которая привязана на editor.
Я, конечно, изначально, рассчитывал, что это делается в момент...
 
Мы в соцсетях:

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